To use a plot function other than those included with the software, you can write your own custom plot function that is called at each iteration of the pattern search to create the plot. This example shows how to create a plot function that displays the logarithmic change in the best objective function value from the previous iteration to the current iteration. More plot function details are available in Plot Options.

To create the plot function for this example, copy and paste
the following code into a new function file in the MATLAB^{®} Editor:

function stop = psplotchange(optimvalues, flag) % PSPLOTCHANGE Plots the change in the best objective function % value from the previous iteration. % Best objective function value in the previous iteration persistent last_best stop = false; if(strcmp(flag,'init')) set(gca,'Yscale','log'); %Set up the plot hold on; xlabel('Iteration'); ylabel('Log Change in Values'); title(['Change in Best Function Value']); end % Best objective function value in the current iteration best = min(optimvalues.fval); % Set last_best to best if optimvalues.iteration == 0 last_best = best; else %Change in objective function value change = last_best - best; plot(optimvalues.iteration, change, '.r'); end

Then save the file as `psplotchange.m`

in a
folder on the MATLAB path.

The problem is the same as Linearly Constrained Problem. To set up the problem:

Enter the following at the MATLAB command line:

x0 = [2 1 0 9 1 0]; Aineq = [-8 7 3 -4 9 0]; bineq = 7; Aeq = [7 1 8 3 3 3; 5 0 -5 1 -5 8; -2 -6 7 1 1 9; 1 -1 2 -2 3 -3]; beq = [84 62 65 1];

Enter

`optimtool`

to open the Optimization app.Choose the

`patternsearch`

solver.Set up the problem to match the following figure.

Since this is a linearly constrained problem, set the

**Poll method**to`GSS Positive basis 2N`

.

To use the custom plot function, select **Custom function** in
the **Plot functions** pane and enter `@psplotchange`

in
the field to the right. To compare the custom plot with the best function
value plot, also select **Best function value**.

Now, when you run the example, the pattern search tool displays the plots shown in the following figure.

Note that because the scale of the *y*-axis
in the lower custom plot is logarithmic, the plot will only show changes
that are greater than 0.

The plot function uses information contained in the following structures, which the Optimization app passes to the function as input arguments:

`optimvalues`

— Current state of the solver, a structure`flag`

— Current status of the algorithm, a character vector

The most important statements of the custom plot function, `psplotchange.m`

,
are summarized in the following table.

**Custom Plot Function Statements**

Statement | Description |
---|---|

`persistent last_best` | Creates the persistent variable |

`set(gca,'Yscale','log')` | Sets up the plot before the algorithm starts. |

`best = min(optimvalues.fval)` | Sets |

`change = last_best - best` | Sets the variable |

`plot(optimvalues.iteration, change, '.r')` | Plots the variable |

Was this topic helpful?