Minimización no restringida utilizando fminunc
Este ejemplo muestra cómo utilizar fminunc
para resolver el problema de minimización no lineal
Para resolver este problema de dos dimensiones, escriba una función que devuelve . Después, invoque la rutina de minimización no restringida fminunc
comenzando desde el punto inicial x0 = [-1,1]
.
La función auxiliar objfun
al final de este ejemplo calcula .
Para encontrar el mínimo de , establezca el punto inicial y llame a fminunc
.
x0 = [-1,1]; [x,fval,exitflag,output] = fminunc(@objfun,x0);
Local minimum found. Optimization completed because the size of the gradient is less than the value of the optimality tolerance.
Visualice los resultados, incluyendo la medida de optimalidad de primer orden de la estructura output
.
disp(x)
0.5000 -1.0000
disp(fval)
3.6609e-15
disp(exitflag)
1
disp(output.firstorderopt)
1.2284e-07
La salida exitflag
indica si el algoritmo converge. exitflag
= 1 significa que fminunc
encuentra un mínimo local.
La estructura output
proporciona más detalles sobre la optimización. Para fminunc
, la estructura incluye:
output.iterations
, el número de iteracionesoutput.funcCount
, el número de evaluaciones de funciónoutput.stepsize
, el tamaño de paso finaloutput.firstorderopt
, una medida de optimalidad de primer orden (que, en este caso no restringido, es la norma infinito del gradiente en la solución)output.algorithm
, el tipo de algoritmo utilizadooutput.message
, la razón por la que el algoritmo se ha detenido
Función auxiliar
Este código crea la función auxiliar 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); end