函数的零点与二分法
使 成立的实数 称为函数 的零点。它是一个数,不是一个点,这一点在书写上常被混淆。零点、方程 的实数根、函数图象与 x 轴交点的横坐标,三者指的是同一批数;把方程问题改叙为函数问题之后,求根就可以借助图象与连续性来做。
1 · 零点与方程的根
方程 无求根公式,但函数 的图象与 x 轴有且只有一个交点。判断交点个数往往比解出根容易:把方程整理成 的形式,交点个数就是两条曲线的交点个数。 改写成 后,左侧递增而右侧递减,两条曲线至多交一次,可知原方程恰有一个实数根。
2 · 零点存在定理
定理 2.1 设 在闭区间 上连续,且 ,则存在 使 。
定理给的是存在性,不给个数,也不给位置。 只保证区间内至少有一个零点,实际可以有三个甚至更多;而 时区间内可以没有零点,也可以有两个。连续这个条件同样不能省: 在 上两端异号却没有零点, 处的间断使定理不适用。
定理的逆命题不成立,这在扫描实现里是一处实际的漏检来源。bracketZeros 逐段比较相邻采样点的符号,步长跨过偶数个零点时那一段两端同号,整段被跳过:
在
上有两个零点,只切 1 段时两端都是 2,返回空数组;切到 6 段才分隔出两段。加密采样能降低漏检概率,却给不出「已找全」的保证——要那种保证得另配单调性分析或求导。
3 · 二分法的迭代与精度
有了变号区间,求近似解就成了机械步骤:取中点 ,算 ,用 替换掉与它同号的那个端点,区间随之减半。 次迭代之后区间长度是初始长度的 ,这个上界与函数的形状无关,只取决于初始区间的长度。
以
在
上为例,实跑 bisectSteps 的结果是:4 次迭代后中点 0.6875,与真值相差
;14 次后区间长
,中点 0.6823120,误差
;24 次后误差降到
。误差并不严格随区间长度同步下降——区间长度是确定的等比数列,而中点到真根的距离是它的一个上界,实际值在这个上界之下摆动。
二分法的收敛是线性的:每迭代一次多确定约 位十进制有效数字,要多拿一位需要 3 到 4 次迭代。它的价值不在速度,而在只依赖连续性与一次符号比较,对函数的可导性不作任何要求。
4 · 参考文献
- Zero of a function. Wikipedia. 零点、方程的根与图象交点三种说法的对应。https://en.wikipedia.org/wiki/Zero_of_a_function
- Intermediate value theorem. Wikipedia. 零点存在定理的一般形式与连续性条件。https://en.wikipedia.org/wiki/Intermediate_value_theorem
- Bisection method. Wikipedia. 二分法的迭代格式、收敛阶与误差上界。https://en.wikipedia.org/wiki/Bisection_method