Main Content

Minimización no restringida 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 de dos dimensiones, escriba una función que devuelve f(x). 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 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.

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 salto final

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

Ejemplos relacionados

Más acerca de