数学 / 函数 · 从概念到零点与增长速度 / 函数的零点与二分法 待审核 10 / 12
zero · 零点存在定理 · bisection

函数的零点与二分法

使 f(x)=0f(x) = 0 成立的实数 xx 称为函数 ff零点。它是一个数,不是一个点,这一点在书写上常被混淆。零点、方程 f(x)=0f(x) = 0 的实数根、函数图象与 x 轴交点的横坐标,三者指的是同一批数;把方程问题改叙为函数问题之后,求根就可以借助图象与连续性来做。

1 · 零点与方程的根

zero · root · 图象与 x 轴交点

方程 x3+x1=0x^3 + x - 1 = 0 无求根公式,但函数 f(x)=x3+x1f(x) = x^3 + x - 1 的图象与 x 轴有且只有一个交点。判断交点个数往往比解出根容易:把方程整理成 g(x)=h(x)g(x) = h(x) 的形式,交点个数就是两条曲线的交点个数。2x+3x7=02^x + 3x - 7 = 0 改写成 2x=73x2^x = 7 - 3x 后,左侧递增而右侧递减,两条曲线至多交一次,可知原方程恰有一个实数根。

2 · 零点存在定理

定理 2.1ff 在闭区间 [a,b][a, b] 上连续,且 f(a)f(b)<0f(a) \cdot f(b) < 0,则存在 c(a,b)c \in (a, b) 使 f(c)=0f(c) = 0

定理给的是存在性,不给个数,也不给位置。f(a)f(b)<0f(a) \cdot f(b) < 0 只保证区间内至少有一个零点,实际可以有三个甚至更多;而 f(a)f(b)>0f(a) \cdot f(b) > 0 时区间内可以没有零点,也可以有两个。连续这个条件同样不能省:f(x)=1/xf(x) = 1/x[1,1][-1, 1] 上两端异号却没有零点,x=0x = 0 处的间断使定理不适用。

定理的逆命题不成立,这在扫描实现里是一处实际的漏检来源。bracketZeros 逐段比较相邻采样点的符号,步长跨过偶数个零点时那一段两端同号,整段被跳过:(x1)(x2)(x-1)(x-2)[0,3][0, 3] 上有两个零点,只切 1 段时两端都是 2,返回空数组;切到 6 段才分隔出两段。加密采样能降低漏检概率,却给不出「已找全」的保证——要那种保证得另配单调性分析或求导。

3 · 二分法的迭代与精度

有了变号区间,求近似解就成了机械步骤:取中点 mm,算 f(m)f(m),用 mm 替换掉与它同号的那个端点,区间随之减半。kk 次迭代之后区间长度是初始长度的 2k2^{-k},这个上界与函数的形状无关,只取决于初始区间的长度。

图 3-1 · 淡蓝色带是当前仍含零点的区间,灰点是历次中点,绿点是零点真值。可切换函数并调二分次数,读数栏给出当前区间的两端与长度。

f(x)=x3+x1f(x) = x^3 + x - 1[0,1][0, 1] 上为例,实跑 bisectSteps 的结果是:4 次迭代后中点 0.6875,与真值相差 5.2×1035.2 \times 10^{-3};14 次后区间长 6.1×1056.1 \times 10^{-5},中点 0.6823120,误差 1.6×1051.6 \times 10^{-5};24 次后误差降到 3.1×1093.1 \times 10^{-9}。误差并不严格随区间长度同步下降——区间长度是确定的等比数列,而中点到真根的距离是它的一个上界,实际值在这个上界之下摆动。

二分法的收敛是线性的:每迭代一次多确定约 log1020.30\log_{10} 2 \approx 0.30 位十进制有效数字,要多拿一位需要 3 到 4 次迭代。它的价值不在速度,而在只依赖连续性与一次符号比较,对函数的可导性不作任何要求。

4 · 参考文献

  1. Zero of a function. Wikipedia. 零点、方程的根与图象交点三种说法的对应。https://en.wikipedia.org/wiki/Zero_of_a_function
  2. Intermediate value theorem. Wikipedia. 零点存在定理的一般形式与连续性条件。https://en.wikipedia.org/wiki/Intermediate_value_theorem
  3. Bisection method. Wikipedia. 二分法的迭代格式、收敛阶与误差上界。https://en.wikipedia.org/wiki/Bisection_method