## Plot Functions

### Plot an Optimization During Execution

You can plot various measures of progress during the execution of a solver. Set the `PlotFcn` name-value pair in `optimoptions`, and specify one or more plotting functions for the solver to call at each iteration. Pass a function handle or cell array of function handles.

There are a variety of predefined plot functions available. See the `PlotFcn` option description in the solver function reference page.

You can also use a custom-written plot function. Write a function file using the same structure as an output function. For more information on this structure, see Output Function and Plot Function Syntax.

### Use a Plot Function

This example shows how to use plot functions to view the progress of the `fmincon` `'interior-point'` algorithm. The problem is taken from Constrained Nonlinear Problem Using Optimize Live Editor Task or Solver.

Write the nonlinear objective and constraint functions, including their gradients. The objective function is Rosenbrock's function.

`type rosenbrockwithgrad`
```function [f,g] = rosenbrockwithgrad(x) % Calculate objective f f = 100*(x(2) - x(1)^2)^2 + (1-x(1))^2; if nargout > 1 % gradient required g = [-400*(x(2)-x(1)^2)*x(1)-2*(1-x(1)); 200*(x(2)-x(1)^2)]; end ```

Save this file as `rosenbrockwithgrad.m`.

The constraint function is that the solution satisfies `norm(x)^2 <= 1`.

`type unitdisk2`
```function [c,ceq,gc,gceq] = unitdisk2(x) c = x(1)^2 + x(2)^2 - 1; ceq = [ ]; if nargout > 2 gc = [2*x(1);2*x(2)]; gceq = []; end ```

Save this file as `unitdisk2.m`.

Create options for the solver that include calling three plot functions.

```options = optimoptions(@fmincon,'Algorithm','interior-point',... 'SpecifyObjectiveGradient',true,'SpecifyConstraintGradient',true,... 'PlotFcn',{@optimplotx,@optimplotfval,@optimplotfirstorderopt});```

Create the initial point `x0 = [0,0]`, and set the remaining inputs to empty (`[]`).

```x0 = [0,0]; A = []; b = []; Aeq = []; beq = []; lb = []; ub = [];```

Call `fmincon`, including the options.

```fun = @rosenbrockwithgrad; nonlcon = @unitdisk2; x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)``` ```Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance. ```
```x = 1×2 0.7864 0.6177 ```