0

你好,我写这个是为了用牛顿法确定一个根。该算法有效。我还尝试实施收敛 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   

怎么了?

4

1 回答 1

1

当你说Ek=abs(x-xe)Exp=abs(x-xe)时,它们是完全一样的!这就是为什么eoc每次都评估为 1 的原因。

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

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

于 2014-05-03T13:31:54.287 回答