newtonroot.m

来自「MATLAB编写的一个M文件」· M 代码 · 共 40 行

M
40
字号
function root=NewtonRoot(f,a,b,eps)
% 牛顿切线法求函数f在[a,b]上的一个零点
% 函数名:f
% 区间左端点a
% 区间右端点b
% 根的精度:eps
% 求出的函数零点:root

if(nargin==3)
    eps=1.0e-4;
end

f1=subs(sym(f),findsym(sym(f)),a);
f2=subs(sym(f),findsym(sym(f)),b);
if(f1==0)
    root=a;
end
if(f2==0)
    root=b;
end

if(f1*f2>0)
    disp('两端点函数值乘积大于0!');
    return;
else 
    tol=1;fun=diff(sym(f));
    fa=subs(sym(f),findsym(sym(f)),a);
    fb=subs(sym(f),findsym(sym(f)),b); 
    dfa=subs(sym(fun),findsym(sym(fun)),a);
    dfb=subs(sym(fun),findsym(sym(fun)),b);
  if(dfa>dfb),root=a-fa/dfa;else root=b-fb/dfb;end
    while(tol>eps)
        r1=root;
        fx=subs(sym(f),findsym(sym(f)),r1);
        dfx=subs(sym(fun),findsym(sym(fun)),r1);
        root=r1-fx/dfx;
        tol=abs(root-r1);
    end
end

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?