BFGS

% Método de BFGS para OGSR

 

% Se comprueba el gradiente ERROR ABSOLUTO

 

x=rand(n,1);dejer(x)-jacnum(‘ejer’,x)’

 

% Se comprueba el gradiente ERROR RELATIVO

 

x=rand(n,1);gfx=dejer(x);v=jacnum(‘ejer’,x)’;norm(gfx-v)/max(1,norm(gfx))

 

% Se ejecuta la siguiente línea una sola vez

 

em=eps/2;e0=sqrt(em);x=[0 0]’;fx=ejer(x);gfx=dejer(x);B=eye(length(x));d=-B\gfx;ro=-2*max(1,abs(fx))/(gfx’*d);[xn,ro,fxn,gfxn,info]=wolfe(x,d,fx,gfx,ro,’ejer’,’dejer’); if info==0, s=xn-x;y=gfxn-gfx;[fx-fxn,norm(s),norm(gfxn)], else,info,end; sy=s’*y;bs=B*s;sbs=s’*bs; if sy<0.2*sbs, theta=0.8*sbs/(sbs-sy);y=theta*y+(1-theta)*bs;sy=0.2*sbs; end, alpha=(y’*y)/sy;B=alpha*B;bs=alpha*bs;sbs=alpha*sbs;B=B+(y*y’)/sy-(bs*bs’)/sbs; x=xn;fx=fxn;gfx=gfxn;d=-B\gfx;ro=1;[xn,ro,fxn,gfxn,info]=wolfe(x,d,fx,gfx,ro,’ejer’,’dejer’); if info==0, s=xn-x;y=gfxn-gfx;[fx-fxn,norm(s),norm(gfxn)], else,info,end;

 

% Actualización de variables e iteraciones posteriores a la primera

sy=s’*y;bs=B*s;sbs=s’*bs; if sy<0.2*sbs, theta=0.8*sbs/(sbs-sy);y=theta*y+(1-theta)*bs;sy=0.2*sbs; end, B=B+(y*y’)/sy-(bs*bs’)/sbs;x=xn;fx=fxn;gfx=gfxn;d=-B\gfx;ro=1;[xn,ro,fxn,gfxn,info]=wolfe(x,d,fx,gfx,ro,’ejer’,’dejer’); if info==0, s=xn-x;y=gfxn-gfx;[fx-fxn,norm(s),norm(gfxn)], else,info,end;

 

% Solución Se itera hasta info= -1

 

x,fx,gfx,H=jacnum(‘dejer’,x);H=(H+H’)/2;eig(H)

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s