用二分法求解g(x)=0的解法.m

来自「拉格朗日插值多项式拟合,牛顿插值多项式,欧拉方程解偏微分方程,使用极限微分求解导」· M 代码 · 共 41 行

M
41
字号
%用二分法求解方程g(x)=0的解
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
%求解条件:g(x)=0在区间(a,b)上有唯一的解,且g(x)是连续的,g(a)与g(b)符合相反
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
%-------------------------------------------
%先定义函数function y=g(x)
%          y=sin(x)-(x^2)/4;(改变y的函数表达式及为求解相应的函数)
%调用方法为【c,err,yc】=dichotomy('g',a,b,delta)            !注意函数是字符串调用
%-------------------------------------------
function[c,err,yc]=dichotomy(g,a,b,delta)
%-------------------------------------------
%input  -g,函数表达式,用字符表示调用函数feval(g,x)
%       -a
%       -b为函数二分法给定的区间
%       -delta 为横轴的给定误差
%-------------------------------------------
ya=feval(g,a);
yb=feval(g,b);
if ya*yb>0
    disp('区间给的数值不合要求,请重新定义')
    break
end
while ((b-a)>delta)
    c=(a+b)/2;
    yc=feval(g,c);
    if yc==0
        a=c;
        b=c;
    elseif yb*yc>0
        b=c;
        yb=yc;
    else
        a=c;
        ya=yc;
    end
end
    c=(a+b)/2;
    err=abs(b-a);
    yc=feval(g,c);
    
    

⌨️ 快捷键说明

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