Contenido principal

Minimización sin restricciones utilizando fminunc

Este ejemplo muestra cómo utilizar fminunc para resolver el problema de minimización no lineal

minxf(x)=ex1(4x12+2x22+4x1x2+2x2+1).

Para resolver este problema bidimensional, escriba una función que devuelve f(x). 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 f(x).

Para encontrar el mínimo de f(x), 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 iteraciones

  • output.funcCount, el número de evaluaciones de función

  • output.stepsize, el tamaño de paso final

  • output.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 utilizado

  • output.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

Consulte también

Temas