dk=-Hk*gk; %解方程组, 计算搜索方向
while(1)
if(feval(fun,x0+alpha*dk)<=feval(fun,x0)+rho*alpha*gk'*dk) b=alpha;
alpha=(alpha+a)/2;
continue;
end
if(feval(gfun,x0+alpha*dk)'*dk>=sigma*gk'*dk)
a=alpha;
alpha=min([2*alpha, (b+alpha)/2]);
continue;
end
break;
end
x=x0+alpha*dk;
sk=x-x0; yk=feval(gfun,x)-gk;
if(sk'*yk>0)
Hk=Hk-(Hk*yk*yk'*Hk)/(yk'*Hk*yk)+(sk*sk')/(sk'*yk);
end
k=k+1; x0=x;
end
val=feval(fun,x0);
function f=fun(x)
f=100*(x(1)^2-x(2))^2+(x(1)-1)^2;
function gf=gfun(x)
gf=[400*x(1)*(x(1)^2-x(2))+2*(x(1)-1), -200*(x(1)^2-x(2))]'; clear