Main Content

Optimization Solver Plot Functions

What Is a Plot Function?

The PlotFcns field of an options structure specifies one or more functions that an optimization function calls at each iteration to plot various measures of progress. Pass a function handle or cell array of function handles.

You can use the PlotFcns option with the following MATLAB optimization functions:

  • fminbnd

  • fminsearch

  • fzero

The predefined plot functions for these optimization functions are:

  • @optimplotx plots the current point

  • @optimplotfval plots the function value

  • @optimplotfunccount plots the function count (not available for fzero)

Example: Use Built-In Plot Function

View the progress of a minimization using fminsearch with the plot function @optimplotfval.

The objective function onehump appears at the end of this example.

Set options to use the @optimplotfval plot function.

options = optimset('PlotFcns',@optimplotfval);

Call fminsearch starting from the point x0 = [2,1].

x0 = [2 1];
[x fval] = fminsearch(@onehump,x0,options)

x = 1×2

   -0.6691    0.0000

fval = -0.4052

Example: Use Custom Plot Function

You can write a custom plot function using the same syntax as an output function. For more information on this structure, see Optimization Solver Output Functions.

Create a 2-D plot function that shows the iterative points labeled with the iteration number. For the code, see the myplot helper function at the end of this example. Have the plot function call both the original @optimplotfval plot function as well as myplot.

options.PlotFcns = {@myplot @optimplotfval};
[x fval] = fminsearch(@onehump,x0,options)

x = 1×2

   -0.6691    0.0000

fval = -0.4052

The custom plot function plots roughly the last half of the iterations over each other as the solver converges to the final point [-0.6691 0.0000]. This makes the last half of the iterations hard to read. Nevertheless, the plot gives some indication of how fminsearch iterates toward the minimizing point.

Helper Functions

This code creates the onehump helper function.

function f = onehump(x)

r = x(1)^2 + x(2)^2;
s = exp(-r);
f = x(1)*s+r/20;
end

This code creates the myplot helper function.

function stop = myplot(x,optimValues,state)
stop = false;
switch state
    case 'init'
          % Setup for plots or dialog boxes
          hold on
    case 'iter'
          % Make updates to plots or dialog boxes as needed
          plot(x(1),x(2),'rx');
          text(x(1)+.05,x(2),... 
                num2str(optimValues.iteration));
    case 'done'
          % Cleanup of plots, dialog boxes, or final plot
          hold off
end
end

Related Topics