Consider the problem of finding a set of values [x1, x2] that solves
To solve this two-dimensional problem, write a file that returns
the function value. Then, invoke the unconstrained minimization routine
This code ships with the toolbox. To view, enter
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
Set options because the
requires that the objective function include a gradient. If you do
not set the options, then, depending on your MATLAB® version,
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 = struct with fields: iterations: 8 funcCount: 66 stepsize: 6.3361e-07 lssteplength: 1 firstorderopt: 1.2284e-07 algorithm: 'quasi-newton' message: 'Local minimum found.…'
exitflag tells whether the algorithm
exitflag = 1 means a local minimum was
found. The meanings of exitflags are given in function reference pages.
output structure gives more details about
the optimization. For
it includes the number of iterations in
the number of function evaluations in
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
the type of algorithm used in
algorithm, and the
exit message (the reason the algorithm stopped).