收敛顺序牛顿

时间:2014-05-03 13:10:21

标签: matlab newtons-method

您好我已经写过这个来使用牛顿方法确定根。算法有效。我还试图实现收敛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   

出了什么问题?

1 个答案:

答案 0 :(得分:1)

当您说Ek=abs(x-xe)Exp=abs(x-xe)时,它们完全相同!这就是eoc每次评估为1的原因。

请注意,这些等式中没有n。实际上,您也不需要那些额外的for n=m循环。在for m=1:kmax循环内,m是单个值而不是数组。

eoc需要通过将之前的循环迭代与当前循环进行比较来计算(因为它没有多大意义来比较一个尚未发生的未来循环迭代)。因为这看起来像家庭作业,我不会给你任何代码..但这是一个非常强烈的暗示。