您好我已经写过这个来使用牛顿方法确定根。算法有效。我还试图实现收敛EOC的实验顺序。它也有效,但我得到的结果是牛顿方法的收敛顺序为1,实际上它是2。
function [x,y,eoc,k]=newnew(f,df,x0,xe,eps,kmax)
x = x0;
y = feval(f,x);
for m=1:kmax
z = -y/feval(df,x);
x = x + z;
y = feval(f,x);
k = m;
for n=m
Ek=abs(x-xe);
end
for n=m+1
Ekp=abs(x-xe);
end
eoc=log(Ek)/log(Ekp);
if abs(y)<eps
return
end
end
disp('no convergence');
end
出了什么问题?
答案 0 :(得分:1)
当您说Ek=abs(x-xe)
和Exp=abs(x-xe)
时,它们完全相同!这就是eoc
每次评估为1的原因。
请注意,这些等式中没有n
。实际上,您也不需要那些额外的for n=m
循环。在for m=1:kmax
循环内,m
是单个值而不是数组。
eoc
需要通过将之前的循环迭代与当前循环进行比较来计算(因为它没有多大意义来比较一个尚未发生的未来循环迭代)。因为这看起来像家庭作业,我不会给你任何代码..但这是一个非常强烈的暗示。