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 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: 1 firstorderopt: 1.2284e-07 algorithm: 'quasi-newton' message: 'Local minimum found. Optimization completed because the size of ...'
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).