Code covered by the BSD License

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

### Ricardo Portal (view profile)

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
```