Consider the problem of finding a set of values [x1, x2] that solves
| (6-15) |
To solve this two-dimensional problem, write a file that returns
the function value. Then, invoke the unconstrained minimization routine fminunc.
This code ships with the toolbox. To view, enter type
objfun:
function f = objfun(x) f = exp(x(1)) * (4*x(1)^2 + 2*x(2)^2 + 4*x(1)*x(2) + 2*x(2) + 1);
Set options to use the 'quasi-newton' algorithm.
Set options because the 'trust-region' algorithm
requires that the objective function include a gradient. If you do
not set the options, then, depending on your MATLAB® version, fminunc can
issue a warning.
options = optimoptions(@fminunc,'Algorithm','quasi-newton');
x0 = [-1,1]; % Starting guess [x,fval,exitflag,output] = fminunc(@objfun,x0,options);
This produces the following output:
Local minimum found. Optimization completed because the size of the gradient is less than the default value of the function tolerance.
View the results:
x,fval,exitflag,output
x =
0.5000 -1.0000
fval =
3.6609e-15
exitflag =
1
output =
iterations: 8
funcCount: 66
stepsize: 6.3361e-07
lssteplength: 1
firstorderopt: 1.2284e-07
algorithm: 'quasi-newton'
message: 'Local minimum found.…'The exitflag tells whether the algorithm
converged. exitflag = 1 means a local minimum was
found. The meanings of exitflags are given in function reference pages.
The output structure gives more details about
the optimization. For fminunc,
it includes the number of iterations in iterations,
the number of function evaluations in funcCount,
the final step-size in stepsize, a measure of first-order
optimality (which in this unconstrained case is the infinity norm
of the gradient at the solution) in firstorderopt,
the type of algorithm used in algorithm, and the
exit message (the reason the algorithm stopped).