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