2. 非线性方程的基本概念与数学基础

在进入任何数值算法之前,必须先弄清楚“我们在求什么”以及“凭什么说它一定有解”。非线性方程求根看似只是把 f(x)=0 解出来,但根的存在性、根的重数、函数的连续与可微性质,直接决定了算法能否收敛、收敛到哪个根、以及收敛速度有多快。本节围绕根的定义、重根、连续性、可微性、介值定理与零点存在性展开,为后续二分法、牛顿法、割线法等建立统一的数学语言。

一、根的定义与方程的标准形式

设函数 f: D ⊆ ℝ → ℝ,若存在 x* ∈ D 使得 f(x*) = 0,则称 x* 为方程 f(x)=0 的根,也称 f 的零点。求根问题与求零点问题完全等价,因此后文不加区分地使用这两个说法。实际建模中,方程往往以 g(x)=h(x) 的形式出现,需要先整理成标准形式 f(x)=g(x)−h(x)=0,再讨论根。这一步看似简单,却直接影响后续判断:例如把 x²=2 整理为 f(x)=x²−2,其根为 ±√2;若整理为 f(x)=2−x²,根不变但函数符号整体翻转,会影响某些算法中区间端点符号的判断方向,因此约定统一采用“左端减右端”的整理方式,并在全文保持一致。

需要强调的是,数值方法求出的通常是近似根 x̃,满足 |f(x̃)| ≤ ε₁ 或 |x̃−x*| ≤ ε₂。这两个判据并不等价:前者是残差判据,后者是误差判据。当函数在根附近很平坦时,残差很小并不代表误差很小,这一点在重根情形下尤为突出。

二、重根与根的重数

若 f 在 x* 附近足够光滑,且可写成 f(x) = (x−x*)^m · φ(x),其中 φ(x*) ≠ 0,m 为正整数,则称 x* 为 f 的 m 重根。m=1 时称为单根,m≥2 时称为重根。重数刻画了函数在根处“贴近横轴”的程度:单根处函数图像以非零斜率穿过横轴;偶重根处函数图像与横轴相切且不变号;奇重根(m≥3)处相切但变号。

重根对数值方法影响极大。以牛顿法为例,其迭代式为 xk+1 = xk − f(xk)/f′(xk)。对单根,牛顿法在根附近呈平方收敛;对 m 重根,若仍直接使用该式,收敛速度退化为线性,收敛因子约为 (m−1)/m。例如 f(x)=(x−1)²,根 x*=1 为二重根,取 x₀=2 迭代,序列为 2, 1.5, 1.25, 1.125, …,每步误差约减半,收敛明显变慢。工程上常用的补救办法是改用修正牛顿法 xk+1 = xk − m·f(xk)/f′(xk),其中 m 为已知或估计的重数;或在无法预知重数时,用 f(x)/f′(x) 构造新函数转化为单根问题。

判断重数的实用手段:若 f(x*)=0 且 f′(x*)=0,则至少是二重根;继续检查高阶导数,首个不为零的导数阶数即为重数。数值上可通过观察 f 与 f′ 是否在同一点附近同时接近零来初步识别。

三、连续性与可微性

连续性保证函数图像“不断裂”,是介值定理成立的前提;可微性保证函数有局部线性近似,是牛顿法、割线法等导数型方法的理论基础。具体来说,若 f 在 [a,b] 上连续,则 f 在该区间上取到最大值与最小值,且能取到二者之间的所有值;若进一步 f 在 (a,b) 内可导,则可用导数刻画单调性与极值,从而判断根的个数与分布。

需要注意,连续但不可微的函数依然可以有根,只是不能直接使用依赖导数的方法。例如 f(x)=|x|−1 在 x=±1 处有根,但在 x=0 处不可微;f(x)=x^(1/3) 在 x=0 处连续但导数趋于无穷。这类情形下,二分法仍然可靠,而牛顿法可能因导数不存在或过大而失效。因此选择算法前,应先确认函数在目标区间上的光滑程度。

四、介值定理与零点存在性

介值定理是零点存在性最常用的判据:若 f 在闭区间 [a,b] 上连续,且 f(a)·f(b) < 0,则存在 x* ∈ (a,b) 使 f(x*)=0。该定理只保证“至少一个根”,不保证唯一。若要保证唯一,还需附加单调性条件,例如 f 在 [a,b] 上连续、f(a)·f(b)<0 且 f′ 在 (a,b) 内恒正或恒负,则根唯一。

实际使用中,端点符号判断要防止两类错误:一是区间内存在偶数个根导致 f(a)·f(b)>0,此时介值定理不适用,但根可能确实存在;二是函数在区间内有间断点,符号变化不能推出根的存在。因此扫描区间时应采用较细的步长,先定位符号变化的子区间,再对每个子区间单独判断。

根的存在性、变号与重根对比 单根:f(a)·f(b) < 0,变号 x f(x) x* a, f(a)<0 b, f(b)>0 连续 + 端点异号 ⇒ 至少一个根 二重根:相切且不变号 x f(x) x*(m=2) f(a)>0 f(b)>0 端点同号,介值定理不适用,但根存在 重根处 f(x*)=0 且 f′(x*)=0,牛顿法收敛退化为线性

五、把数学条件落到算法选择上

上述概念并非纯理论,它们直接对应算法选型。若只知道 f 连续且能找到一个端点异号的区间,二分法最稳妥,它只依赖介值定理,收敛速度线性但绝不发散;若 f 在区间上可微且 f′ 容易计算、在根附近不为零,牛顿法可取得平方收敛;若导数难以获得,可用割线法以差商替代导数,收敛阶约为 1.618;若已知根为重根,则应使用修正牛顿法或先做重根剥离。反过来,若扫描发现某区间端点同号却怀疑有根,应缩小步长继续细分,而不是直接断定无根。

以一个教学示例说明完整判断流程(以下数值为示例设定,用于演示方法,非实测结果):考察 f(x)=x³−2x²+x = x(x−1)²,在区间 [−0.5, 2] 上扫描。取步长 0.5,计算得 f(−0.5)=−1.875,f(0)=0,f(0.5)=0.125,f(1)=0,f(1.5)=0.375,f(2)=2。可见 x=0 为单根(f 在 0 两侧变号),x=1 为二重根(f 在 1 两侧同号,且 f(1)=f′(1)=0)。若对 [0.5, 1.5] 直接使用二分法,因两端同号会失败;正确做法是先识别 x=1 为重根,改用修正牛顿法(m=2),或对 g(x)=f(x)/f′(x) 使用标准牛顿法。这个例子说明:根的存在性判断与重数识别,是算法能否成功的前置条件。

常见误区:把“残差 |f(x̃)| 很小”直接当作“近似根很准”。在重根附近 f 很平坦,残差小但误差可能仍然很大。工程上应同时检查残差、相邻迭代点距离以及 f′ 的量级,三者结合判断。

小结本节的核心逻辑:根的定义给出目标,重数刻画根的“性质”,连续性与可微性决定可用工具,介值定理提供存在性判据,单调性补充唯一性。把这五点串起来,才能在面对具体方程时回答三个问题——有没有根、有几个根、该用哪种方法去求。