标签:
杂谈 |
分类: 学习 |
MATLAB 牛顿下山法的一个小程序,原理就不详细说了。因牛顿迭代法受初值选取的限制,为防止迭代发散,对迭代过程再附加一项要求:|f(x(k+1))|<|f(x(k))|,将牛顿法迭代的结果:x(k+1)'=x(k)-f(x(k))/f'(x(k))和前一近似值x(k)适当加权平均做为新的改进值:x(k+1)=u*x(k+1)'+(1-u)*x(k),其中u(0<>
迭代时u取1开始,逐次减半计算,直至附加要求符合为止。实例计算中x(k)=x(0)不变,只更新u和x(k+1),直至:|f(x(k+1))|<|f(x(k))|(即|f(x(1))|<|f(x(0))|),然后更新下山因子为u=1,继续以牛顿法迭代。下面是实例(不够完善,有限制条件没有加上,不过一般情况下程序中限制条件都够用了):
%
function [f,d]=f(x)
f=x^3-x-1;
d=3*x^2-1;
%
function [x1,n]=Newton(f,x0,emg1,emg2)
n=0;
u=1;
[f0,d0]=feval_r(f,x0);
x1=x0-f0/d0;
[f1,d1]=feval_r(f,x1);
while abs(x1-x0)>emg1 &
abs(f1)>emg2
end
%
clear
clc
[x,n]=Newton(@f,0.6,1e-4,1e-4);
%
已更正,谢谢云儿2010.06.09

加载中…