Minimización sin restricciones utilizando fminunc
Este ejemplo muestra cómo utilizar fminunc
para resolver el problema de minimización no lineal
Para resolver este problema bidimensional, escriba una función que devuelve . Después, invoque la rutina de minimización sin restricciones 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. <stopping criteria details>
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 sin restricciones, 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