Contenido principal

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

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