刚学完牛顿迭代法,为了验证收敛的速率,用Matlab做了比较
首先是牛顿迭代法
%比较牛顿迭代法、
function [x,i]=newtonmethod(x0,f,ep,Nmax)%x0—初值,f—测试函数,ep—精度,Nmax—迭代的最大次数
i=1;
x(1)=x0;
while(i<=Nmax)
[g1,g2]=f(x(i));
if abs(g2)<=ep
%error('error');
disp('derivative is too smal')
return
end
x(i+1)=x(i)-g1/g2;
b=x(i+1)-x(i);
if(abs(b)<ep)
return;
end
i=i+1;
end
x
i
二分法
%二分法
function [x,k]=bisection(a,b,f,ep)%[a,b]区间,f—函数句柄,ep—最大二分次数
k=1;
eep=b-a;%eep区间长度
while(abs(eep)>ep)
x(k)=a+eep./2;
if(f(x(k)).*f(a)<0)
b=x(k);
else
a=x(k);
end
eep=b-a;
k=k+1;