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