方程求根之二分法

本文介绍了二分法的基本思想及其应用,详细解释了通过不断缩小区间来逼近方程根的过程,并提供了具体的实例和代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二分法

二分法也称对分区间法、对分法等,是最简单的求根方法,属于区间法求根类型。

1 基本思想

利用连续函数零点定理,将含根区间逐次减半缩小构造点列来逼近根。

2 构造原理

设连续函数f(x)f(x)f(x)[a,b][a,b][a,b]只有一个根,满足f(a)f(b)<0f(a)f(b)<0f(a)f(b)<0

  1. I0=[a,b]I_0= [a,b]I0=[a,b],取区间中点x0=0.5(a+b)x_0=0.5(a+b)x0=0.5(a+b)
  2. 判别f(x0)f(x_0)f(x0)的值
    1. f(x0)=0f(x_0)=0f(x0)=0,则x∗=x0x^*=x_0x=x0,停止
    2. f(xₒ)⋅f(a)<0f(xₒ)\cdot f(a)<0f(x)f(a)<0, 记 I1=[a,x0]I_1=[a,x_0]I1=[a,x0];否则,记I1=[x0,b]I_1=[x_0,b]I1=[x0,b]
  3. I1=[a1,b1]I_1=[a_1,b_1]I1=[a1,b1],再取x1=0.5(a1+b1)x_1=0.5(a_1+b_1)x1=0.5(a1+b1)
  4. x1x_1x1满足根精度要求,则x∗≈x1x^*\approx x_1xx1,停止;否则,I1I_1I1代替I0I_0I0。转到第1步

3 分析

3.1 求根数列

记第kkk次二分得到的含根区间为Ik=[ak,bk]I_k=[a_k,b_k]Ik=[ak,bk],则二分法对应的求根数列算式为
xk=0.5(ak+bk) x_k=0.5(a_k+b_k) xk=0.5(ak+bk)

3.2 收敛性

由于
x∗∈Ik,k=0,1,⋯⇒I0⊃I1⊃I2⋯ x^*\in I_k,k=0,1,\cdots \Rightarrow I_0\supset I_1\supset I_2\cdots xIk,k=0,1,I0I1I2
因此
∣x∗−xk∣≤12(bk−ak)=122(bk−1−ak−1)=⋯=12k+1(b−a) |x^*-x_k|\le\frac12(b_k-a_k)=\frac{1}{2^2}(b_{k-1}-a_{k-1})=\cdots =\frac{1}{2^{k+1}}(b-a) xxk21(bkak)=221(bk1ak1)==2k+11(ba)

12k+1(b−a)→0⇒xk→x∗ \frac{1}{2^{k+1}}(b-a)\to 0\Rightarrow x_k\to x^* 2k+11(ba)0xkx

3.3 计算次数控制

由于
∣x∗−xk∣≤12k+1(b−a) |x^*-x_k|\le \frac{1}{2^{k+1}}(b-a) xxk2k+11(ba)
对给定的计算精度ϵ>0\epsilon\gt 0ϵ>0,要成立∣x∗−xk∣<ϵ|x^*-x_k|\lt\epsilonxxk<ϵ ,让
12k+1(b−a)≤ϵ⇒k>ln⁡(b−a)−ln⁡ϵln⁡2−1 \frac{1}{2^{k+1}}(b-a)\le \epsilon\Rightarrow k\gt\frac{\ln(b-a)-\ln\epsilon}{\ln2}-1 2k+11(ba)ϵk>ln2ln(ba)lnϵ1
即满足精度要求的二分次数为k>ln⁡(b−a)−ln⁡ϵln⁡2−1k\gt\frac{\ln(b-a)-\ln\epsilon}{\ln2}-1k>ln2ln(ba)lnϵ1

又由于
∣bk−ak∣=2∣xk−xk−1∣⇒∣x∗−xk∣≤∣xk−xk−1∣ |b_k-a_k|=2|x_k-x_{k-1}|\Rightarrow |x^*-x_k|\le|x_k-x_{k-1}| bkak=2xkxk1xxkxkxk1
于是,满足精度的根可取使∣xk−xk−1∣≤ϵ|x_k-x_{k-1}|\le\epsilonxkxk1ϵ成立的xkx_kxk

3.4 二分法的误差估计

  1. 事先估计:
    k>ln⁡(b−a)−ln⁡ϵln⁡2−1 k\gt\frac{\ln(b-a)-\ln\epsilon}{\ln2}-1 k>ln2ln(ba)lnϵ1

  2. 事后估计:
    ∣x∗−xk∣≤∣xk−xk−1∣ |x^*-x_k|\le|x_k-x_{k-1}| xxkxkxk1

事先估计的kkk往往偏大,主要用于理论估计。
事后估计的kkk往往较小,主要用于实际控制。

4 例题及代码

用二分法求方程2x3−5x−1=02x^3-5x-1=02x35x1=0在区间[1,2][1,2][1,2]内的根,绝对误差ϵ≤10−2\epsilon\le10^{-2}ϵ102

% 二分法求方程在[a,b]区间、误差小于等于epsilon下的近似根
function result = dichotomy(epsilon,a,b)
f=@(x)2*x^3-5*x-1;
m=(a+b)/2;
while ~(abs(a-b)<epsilon || f(m)==0)
    m = (a+b)/2;
    if f(a)*f(m) < 0
        b = m;
    else
        a = m;
    end
end
result = (a+b)/2;
fprintf("近似解为:%.6f",result);
end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值