Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Minimización con gradiente y hessian

Este ejemplo muestra cómo resolver un problema de minimización no lineal con una matriz de hessian tridiagonales explícita ().Hx

El problema es encontrar para minimizarx

f(x)=i=1n1((xi2)(xi+12+1)+(xi+12)(xi2+1)),(1)

donde =.n1000

Paso 1: escribir un archivo brownfgh. m que calcula la función objetiva, el gradiente del objetivo, y la matriz de la tridiagonales de hessian dispersa.

El archivo es largo por lo que no se incluye aquí. Vea el código con el comando

type brownfgh

Debido a que calcula el degradado y los valores de hessian, así como la función objetiva, debe usar para indicar que esta información está disponible en, utilizando las opciones y.brownfghoptimoptionsbrownfghSpecifyObjectiveGradientHessianFcn

Paso 2: llame a una rutina de minimización no lineal con un punto de partida XStart.

n = 1000; xstart = -ones(n,1); xstart(2:2:n,1) = 1; options = optimoptions(@fminunc,'Algorithm','trust-region',...     'SpecifyObjectiveGradient',true,'HessianFcn','objective'); [x,fval,exitflag,output] = fminunc(@brownfgh,xstart,options);

Este problema variable 1000 se resuelve en aproximadamente 7 iteraciones y 7 iteraciones de degradado conjugados con una convergencia de indicación positiva.exitflag El valor final de la función y la medida de optimalidad en la solución son ambos cercanos a cero.x Para, la optimalidad de primer orden es la norma de infinito del gradiente de la función, que es cero en un mínimo local:fminunc

fval,exitflag,output.firstorderopt
fval =     2.8709e-17   exitflag =       1   ans =     4.7948e-10

Temas relacionados