开始条件
什么时候可以开始二分
先选定初始闭区间 $[a_0,b_0]$。要在这个区间内开始二分,必须先确认零点存在。
若函数 $f$ 在 $[a_0,b_0]$ 上连续,并且两端的函数值异号,即
那么零点存在定理保证开区间 $(a_0,b_0)$ 内至少有一个零点。
二分法将逐步逼近其中一个由异号区间锁定的零点,但不负责找出区间内的所有零点。
更新区间
每一次如何更新区间
有了连续且端点异号的区间,接下来要判断保留哪一半。把当前区间记为 $[a,b]$,先取中点
若 $f(m)=0$,就已经找到精确零点,可以停止。若 $f(m)\ne0$,它必定与两个异号端点中的一个同号、与另一个异号。因此,按下面的规则保留端点异号的一半:
函数在新区间上仍连续,两端的函数值仍异号,所以其中仍至少有一个零点。每次更新都保留了这个保证,同时把区间长度减半。
经过 $n$ 次更新,区间长度变为
分母中的 $2^n$ 来自连续 $n$ 次减半。因此,只要继续二分,含零点区间就会按可控的速度缩小。
误差控制
精度怎样由区间长度控制
区间缩小到什么程度,决定了近似值能有多精确。设保留区间 $[a_n,b_n]$ 中的某个零点为 $x^*$,取区间中点作为近似值:
零点位于两个端点之间,中点到任一端点的距离都是区间长度的一半。因此,中点与零点的距离不会超过这个长度:
若采用更保守的停止标准 $b_n-a_n<\varepsilon$,则从区间中取任意一个数作为近似值,它与该零点的误差都小于 $\varepsilon$。
最后要用近似符号“$\approx$”表达结果,不能把近似值写成与零点精确相等。
完整例子
完整看一次区间缩小
用方程 $2x^3+3x-3=0$ 看一次完整计算。记 $f(x)=2x^3+3x-3$,它是多项式函数,在 $[0,1]$ 上连续。代入两个端点,得到
所以初始区间 $[0,1]$ 内有零点。依次取中点,再根据函数值的符号保留异号的一半。表中每一行的“保留区间”就是下一次二分的起点。
| 次数 | 中点 $m$ | $f(m)$ 的符号 | 保留区间 |
|---|---|---|---|
| 1 | 0.5 | − | [0.5, 1] |
| 2 | 0.75 | + | [0.5, 0.75] |
| 3 | 0.625 | − | [0.625, 0.75] |
| 4 | 0.6875 | − | [0.6875, 0.75] |
| 5 | 0.71875 | − | [0.71875, 0.75] |
| 6 | 0.734375 | − | [0.734375, 0.75] |
| 7 | 0.7421875 | + | [0.734375, 0.7421875] |
最后两个端点处的函数值分别为
两端仍异号,说明保留区间仍含有零点。此时区间长度为
取中点 $0.73828125$,再按小数形式表示,可写出近似解 $x\approx0.74$。由于 $0.74$ 本身也在最终区间内,这个表示仍满足误差小于 $0.01$。
方法边界
二分法能与不能保证的事
回到整个过程,二分法的保证始终来自两个条件:函数连续,区间两端的函数值异号。在这两个条件下,含零点区间会不断缩小,从而得到满足指定误差的近似值。
它不能单独证明零点唯一,也不能找到所有零点。如果函数在零点处只接触 $x$ 轴而不变号,标准二分法也无法依靠端点异号来定位这个零点。
每次保留异号的一半,用区间长度控制误差;中点函数值恰好为零时,就已找到精确零点。