image thumbnail

Determination of the minimum distance between two SuperEllipsoids surfaces. Using Optimization

by

Ricardo Portal

 

Optimization method to determine the minimum distance (or max overlap) between two SuperEllipsoids?

plotfval(x,optimValues,state)
function stop = plotfval(x,optimValues,state)
% OPTIMPLOTFVAL Plot value of the objective function at each iteration.
%
%   STOP = OPTIMPLOTFVAL(X,OPTIMVALUES,STATE) plots OPTIMVALUES.fval.  If
%   the function value is not scalar, a bar plot of the elements at the
%   current iteration is displayed.  If the OPTIMVALUES.fval field does not
%   exist, the OPTIMVALUES.residual field is used.
%
%   Example:
%   Create an options structure that will use OPTIMPLOTFVAL as the plot
%   function
%     options = optimset('PlotFcns',@optimplotfval);
%
%   Pass the options into an optimization problem to view the plot
%     fminbnd(@sin,3,10,options)

%   Copyright 2006 The MathWorks, Inc.
%   $Revision: 1.1.6.2 $  $Date: 2006/06/20 20:10:00 $

stop = false;
switch state
    case 'iter'
        if isfield(optimValues,'fval')
            if isscalar(optimValues.fval)
                plotscalar(optimValues.iteration,optimValues.fval);
            else
                plotvector(optimValues.iteration,optimValues.fval);
            end
        else
            plotvector(optimValues.iteration,optimValues.residual);
        end
end

function plotscalar(iteration,fval)
% PLOTSCALAR initializes or updates a line plot of the function value
% at each iteration.

if iteration == 0
    plotfval = plot(iteration,fval,'kd',...
    'MarkerFaceColor',[0 0 1],...
    'MarkerEdgeColor',[0 0 0],...
    'MarkerSize',6,...
    'Marker','o',...
    'LineStyle','none',...
    'Color',[0 0 0]);
    title(['Current Function Value: ',num2str(fval)],'interp','none');
    xlabel('Iteration','interp','none');
    set(plotfval,'Tag','optimplotfval');
    ylabel('Function value','interp','none')
    grid on; box on;
    set(gcf,'Color',[1 1 1],'Position',[650 40 600 400]);
else
    plotfval = findobj(get(gca,'Children'),'Tag','optimplotfval');
    newX = [get(plotfval,'Xdata') iteration];
    newY = [get(plotfval,'Ydata') fval];
    set(plotfval,'Xdata',newX, 'Ydata',newY);
    set(get(gca,'Title'),'String',['Current Function Value: ',num2str(fval)]);
end



function plotvector(iteration,fval)
% PLOTVECTOR creates or updates a bar plot of the function values or
% residuals at the current iteration.
if iteration == 0
    xlabelText = ['Number of function values: ',num2str(length(fval))];
    % display up to the first 100 values
    if numel(fval) > 100
        xlabelText = {xlabelText,'Showing only the first 100 values'};
        fval = fval(1:100);
    end
    plotfval = bar(fval);
    title('Current Function Values','interp','none');
    set(plotfval,'edgecolor','none')
    set(gca,'xlim',[0,1 + length(fval)])
    xlabel(xlabelText,'interp','none')
    set(plotfval,'Tag','optimplotfval');
    ylabel('Function value','interp','none')
else
    plotfval = findobj(get(gca,'Children'),'Tag','optimplotfval');
    % display up to the first 100 values
    if numel(fval) > 100
        fval = fval(1:100);
    end
    set(plotfval,'Ydata',fval);
end

Contact us