方程求根之二分法

二分法

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

1 基本思想

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

2 构造原理

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

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

3 分析

3.1 求根数列

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

3.2 收敛性

由于
x ∗ ∈ I k , k = 0 , 1 , ⋯ ⇒ I 0 ⊃ I 1 ⊃ I 2 ⋯ x^*\in I_k,k=0,1,\cdots \Rightarrow I_0\supset I_1\supset I_2\cdots xIk,k=0,1,I0I1I2
因此
∣ x ∗ − x k ∣ ≤ 1 2 ( b k − a k ) = 1 2 2 ( b k − 1 − a k − 1 ) = ⋯ = 1 2 k + 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)

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

3.3 计算次数控制

由于
∣ x ∗ − x k ∣ ≤ 1 2 k + 1 ( b − a ) |x^*-x_k|\le \frac{1}{2^{k+1}}(b-a) xxk2k+11(ba)
对给定的计算精度 ϵ > 0 \epsilon\gt 0 ϵ>0,要成立 ∣ x ∗ − x k ∣ < ϵ |x^*-x_k|\lt\epsilon xxk<ϵ ,让
1 2 k + 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 − 1 k\gt\frac{\ln(b-a)-\ln\epsilon}{\ln2}-1 k>ln2ln(ba)lnϵ1

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

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 ∗ − x k ∣ ≤ ∣ x k − x k − 1 ∣ |x^*-x_k|\le|x_k-x_{k-1}| xxkxkxk1

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

4 例题及代码

用二分法求方程 2 x 3 − 5 x − 1 = 0 2x^3-5x-1=0 2x35x1=0在区间 [ 1 , 2 ] [1,2] [1,2]内的根,绝对误差 ϵ ≤ 1 0 − 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

猜你喜欢

转载自blog.csdn.net/meng_xin_true/article/details/125562990