www.gusucode.com > 学会不同搜索法(最速下降法,共轭梯度法,牛顿法,拟牛顿法)的计算步骤 > code/ninewton.m
%拟牛顿法极小化函数的通用子函数,gonge.m %输入变量为初始的迭代点,输出变量为极小值点 function x0=ninewton(x) %判断梯度范数是否满足计算精度的要求.是,标志变量设为1,输出结果;否,标志变量设为0,继续迭代 if sum(abs(tidu(x)).^2)<1e-4 flag=1; x0=x; else flag=0; end %初始的H矩阵为单位矩阵 h0=eye(4); %循环求解函数的极小点 while flag==0 %计算新的迭代方向 d=-h0*tidu(x)'; a=gold(x,d); x1=(x'+a*h0*d)'; s=x1-x; y=tidu(x1)-tidu(x); v=s*y'; %校正H矩阵 h0=(eye(4)-s'*y./v)*h0*(eye(4)-y'*s./v)+s'*s./v; %判断下一次和上一次迭代点之差是否满足计算精度的要求.是,标志变量设为1,输出结果;否,标志变量设为0,继续迭代 if sum(abs(x-x1).^2)<1e-4 flag=1; x0=x; else flag=0; end x=x1; end