halfinterval.m

来自「《精通MATLAB科学计算》一书的实例源代码」· M 代码 · 共 43 行

M
43
字号
function root=HalfInterval(f,a,b,eps)
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
    root=FindRoots(f,a,b,eps);
end


function r=FindRoots(f,a,b,eps)
f_1=subs(sym(f),findsym(sym(f)),a);
f_2=subs(sym(f),findsym(sym(f)),b);
mf=subs(sym(f),findsym(sym(f)),(a+b)/2);
if(f_1*mf>0)
    t=(a+b)/2;
    r=FindRoots(f,t,b,eps);
else
    if(f_1*mf==0)
        r=(a+b)/2;
    else
        if(abs(b-a)<=eps)
            r=(b+3*a)/4;
        else
            s=(a+b)/2;
            r=FindRoots(f,a,s,eps);
        end
    end
end
    

⌨️ 快捷键说明

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