一、二分法定义

 二分法(Bisection method) 即一分为二的方法. 设[a,b]为R的闭区间. 逐次二分法就是造出如下的区间序列([an,bn]):a0=a,b0=b,且对任一自然数n,[an+1,bn+1]或者等于[an,cn],或者等于[cn,bn],其中cn表示[an,bn]的中点。

二、二分法算法

给定精确度 ξ ξ ξ,用二分法求函数 f ( x ) f(x) f(x)零点近似值的步骤如下:
 1.确定区间[a,b],验证 f ( a ) ⋅ f ( b ) < 0 f(a)·f(b)<0 f(a)f(b)<0,给定精确度 ξ ξ ξ.
 2.求区间(a,b)的中点c.
 3.计算 f ( c ) f(c) f(c).
  (1) 若 f ( c ) = 0 f(c)=0 f(c)=0,则c就是函数的零点;
  (2) 若 f ( a ) ⋅ f ( c ) < 0 f(a)·f(c)<0 f(a)f(c)<0,则令b=c;
  (3) 若 f ( c ) ⋅ f ( b ) < 0 f(c)·f(b)<0 f(c)f(b)<0,则令a=c.
  (4) 判断是否达到精确度ξ:即若 ∣ a − b ∣ < ξ |a-b|<ξ ab<ξ,则得到零点近似值a(或b)为近似c,否则重复step2-4。

三、matlab实现

%此程序是求x^3-x-1=0在[1,2]的误差不超过0.001的解。
x_up = 2;
x_down = 1;
error = 0.001;
res_down = x_down^3 - x_down - 1;
res_up = x_up^3 - x_up - 1;

while(res_down * res_up < 0)
        x = 0.5*(x_up + x_down);%求区间(a,b)的中点c.
        res = x^3 - x - 1;%计算f(c)
        
        if( res*res_down < 0 )
                x_up = x;% 若f(a)·f(c)<0,则令b=c;
        else
                x_down = x;%若f(c)·f(b)<0,则令a=c.
        end
        
        if( abs(x_up-x_down) < error ) %确定区间[a,b],验证f(a)·f(b)<0,给定精确度ξ.
                break;
        end
end

result_x = 0.5*(x_up + x_down)
%若有改动请改1,2,3,4,5,8行
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐