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 forfzero
)
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