上一篇用二分法把根限制在逐渐缩小的区间中,又用不动点迭代讨论了迭代映射与收敛速度。本篇进一步利用函数在当前点附近的线性近似:先求出一个容易计算的线性模型的零点,再将它作为新的近似值。
这一思路导出 Newton 法。用割线代替切线可以免去导数计算;把标量导数换成 Jacobian 矩阵,则可以处理非线性方程组。它们通常能在根附近快速收敛,但初值、根的重数和每一步线性问题的可解性都必须单独检查。
标量部分统一考虑实方程 f(x)=0,记目标根为 α,迭代误差为 en=xn−α。除专门说明浮点实现的地方外,收敛定理均在精确算术下讨论。
1. Newton 法:用切线构造下一步
1.1 切线公式与迭代映射
在 xn 附近,使用一阶 Taylor 模型
f(x)≈f(xn)+f′(xn)(x−xn).
若 f′(xn)=0,令右端等于零,得到 Newton 迭代
xn+1=xn−f′(xn)f(xn).
从几何上看,xn+1 是曲线在 (xn,f(xn)) 处的切线与横轴的交点。切线只描述局部形状,其交点可能远离 xn,也可能落到函数定义域之外。
Newton 法也是不动点迭代,其迭代函数为
N(x)=x−f′(x)f(x).
这里 N 只在分母非零且函数有定义的地方使用;不能因为 f 本身有定义,就认为 Newton 步也有定义。
1.2 算法步骤
给定函数及其导数、初值 x0、容差和最大迭代次数。
- 计算 f(xn),先判断是否已满足停止要求。
- 计算 f′(xn);若导数为零,或相对于问题尺度过小而使校正不可靠,则报告失败或启用保护策略。
- 求校正量 sn=−f(xn)/f′(xn),形成试探点 xn+sn。
- 检查试探点的定义域和数值有效性;接受后计算新的残差,并同时检查步长、残差及迭代次数。
浮点计算中的“函数值恰好为零”表示计算结果为零,仍可能受舍入或下溢影响。一般的停止条件也不自动等价于获得了严格误差界,相关区别见第 6 节。
1.3 例:平方根
对 f(x)=x2−a,其中 a>0,Newton 法变为
xn+1=21(xn+xna).
选取正初值时,迭代始终为正。从 a=2、x0=1 出发,前三步是
x1=23,x2=1217,x3=408577.
令 α=a,可直接得到误差关系
en+1=2xnen2.
当 xn 已接近正根时,分母接近 2α>0,新误差与旧误差的平方成正比。这正是二次收敛的典型形式。
2. 单根附近的局部收敛
2.1 局部二次收敛定理
定理(Newton 法在单根附近的收敛)
设 f 在 α 的某个开邻域内二阶连续可微,并且
f(α)=0,f′(α)=0.
则存在 δ>0,使得当 ∣x0−α∣<δ 时,Newton 迭代或者有限步到达根,或者各步均有定义、留在该邻域内并收敛到 α。此外,在足够小的邻域内存在常数 C,使
∣en+1∣≤C∣en∣2.
对于不在有限步终止的序列,还有
n→∞limen2en+1=2f′(α)f′′(α).
若 f′′(α)=0,其收敛阶恰为 2,渐近误差常数是右端的绝对值。若 f′′(α)=0,上述假设仍保证至少二次的误差估计,但不能只凭这一点就断言恰为三次收敛;更高阶结论需要进一步的光滑性和非退化条件。
2.2 误差界中的常数从哪里来
若在包含 α 和当前点的区间内
∣f′(x)∣≥m1>0,∣f′′(x)∣≤M2,
则 Taylor 展开给出一步估计
∣en+1∣≤2m1M2∣en∣2.
要反复使用这个估计,还必须保证迭代点一直留在上述区间中。局部定理通过把初始邻域取得足够小来实现这一点;它并没有承诺任意初值都能进入这个邻域。
从不动点角度看,在导数非零的邻域中
N′(x)=[f′(x)]2f(x)f′′(x),N′(α)=0.
因此单根处的一阶误差项消失。Newton 法快速收敛的原因是迭代映射的这种局部结构,而不是“使用导数”本身就能保证收敛。
3. 重根与修正 Newton 法
3.1 普通 Newton 法为什么变慢
定义(重数)
若在 α 的邻域内可以写成
f(x)=(x−α)mg(x),g(α)=0,
其中 m 为正整数,则称 α 为 m 重根。本节假设 g 二阶连续可微。
当 m≥2 时,f′(α)=0,上一节的单根定理不再适用。不过,在足够靠近根且尚未到根的点上,Newton 法仍有定义,并满足
en+1=(1−m1)en+O(en2).
所以普通 Newton 法在重根附近通常只有线性收敛,收敛因子为 1−1/m。重数越大,这个因子越接近 1,同样的误差缩减需要更多步。
3.2 已知重数时的修正
若准确知道重数 m,使用
xn+1=xn−mf′(xn)f(xn).
在上述局部假设下,修正迭代消去线性误差项,并满足
en+1=mg(α)g′(α)en2+o(en2).
因此恢复至少二次收敛;若该二次项系数非零,则恰为二次收敛。到达根后应立即停止,不能继续代入此时呈 0/0 形式的商。
若把重数误设为 r,一阶误差因子会变成 1−r/m。当 0<r<2m 时局部导数的绝对值小于 1;当 r>2m 时局部排斥。边界 r=2m 需要进一步分析。随意增大修正倍数并不能保证更快收敛。
3.3 实验:残差很小,误差仍可能明显
实验采用
f(x)=(x−1)m(x+1),α=1,
从 x0>1 出发比较两种迭代。这里的目标根已知,能够直接计算真实误差;一般求根问题未必具备这一条件。
取 m=3 时,两种方法有精确的一步误差关系
en+1Newton=en4xn+23xn+1,en+1modified=4xn+2en2.
前一个比值趋于 2/3,后一个二次误差常数趋于 1/6。同时,根附近 ∣f(x)∣ 与 ∣x−1∣m 同阶:较大的重数会让残差比真实误差小得多。实验因此使用已知根的误差作为停止指标,避免误把小残差当作同样小的位置误差。
4. 割线法:用两个函数值代替导数
4.1 构造与算法
用差商近似当前导数,得到 割线法
xn+1=xn−f(xn)f(xn)−f(xn−1)xn−xn−1.
它用经过 (xn−1,f(xn−1)) 和 (xn,f(xn)) 的直线与横轴的交点,作为下一个近似值。
- 给定两个不同初值 x0,x1,计算并保存两个函数值。
- 若当前点已满足停止条件,则结束;否则检查差商的分母是否可靠。
- 用割线公式生成新点,检查定义域并计算一次新的函数值。
- 丢弃最旧的数据,继续使用最新两个点。
缓存旧函数值后,每个后续更新只需一次新的函数求值。两个初值不要求异号;算法也不维护夹根区间,所以它与二分法、按符号保留端点的假位法不同。
4.2 局部收敛阶
设 f 在单根 α 附近二阶连续可微,且 f′(α)=0。两个不同初值充分靠近根时,割线法具有局部收敛性;若迭代没有有限步到根,在通常的非退化情形 f′′(α)=0 下,渐近误差关系为
en+1=(2f′(α)f′′(α)+o(1))enen−1.
其收敛阶为
p=21+5≈1.618.
这一指数满足 p2=p+1:当相邻误差服从同一渐近幂次规律时,两项误差乘积对应的指数是 1+1/p。这是超线性收敛,但一般达不到 Newton 法的二次阶。
若 f′′(α)=0,或者根不是单根,就不能直接套用上述“恰为黄金分割阶”的结论。若两个函数值相等而尚未到根,割线公式没有定义。
4.3 实验:同一方程上的切线与割线
选择 x2−2 可以比较两种方法接近单根时的步数;选择 x3−2x+2 并令 Newton 初值为 0,可以看到一个并不收敛的周期。切换方法时,请留意割线法的两次初始函数求值也计入成本。
图中虚线表示最近一次使用的线性模型,圆点表示它与横轴的交点。图形会根据当前数据自动缩放,表格中的数值和停止原因应与图形一起阅读。函数求值次数记录算法所需的求值,不包含绘图采样。
5. Steffensen 法:重启的 Aitken 加速
5.1 迭代公式
对等价的不动点方程 x=φ(x),从当前点 xn 计算
yn=φ(xn),zn=φ(yn),
再定义
xn+1=xn−zn−2yn+xn(yn−xn)2.
这称为 Steffensen 迭代。它把上一篇的 Aitken Δ2 变换作为新的迭代步骤:每轮从加速后的点重新计算两个不动点步,而不是只对原来的整条序列作后处理。
若 yn=xn,已得到不动点,应先停止;否则还需检查分母以及试探点的定义域。分母涉及相近数相减,浮点计算中可能出现明显的相消。
5.2 收敛条件与计算代价
一个常用的充分条件是:φ 在不动点 α 附近二阶连续可微,且
φ(α)=α,∣φ′(α)∣<1.
则充分接近 α 的初值产生的 Steffensen 迭代局部至少二次收敛,有限步到达不动点的情况视为已经结束。这个结论依赖局部条件,并不意味着加速公式可以补救任意一个不收敛的迭代。
例如,取 φ(x)=cosx、x0=1,第一次加速得到
x1≈0.7280103614676171,
目标不动点约为 0.7390851332151606。加速后的点一般不是原始序列的下一项,也不一定保持原始序列的单调方向。
Steffensen 法每轮使用两次 φ 求值,不直接使用导数。若 φ 的一次求值本身就很昂贵,二次收敛并不自动意味着总体运行时间更短;比较成本时应把“迭代一次”换成实际函数计算量。
6. 失效现象、阻尼与区间保护
6.1 三类典型困难
初值导致循环。 对
f(x)=x3−2x+2,
Newton 法从 x0=0 出发严格满足 0↦1↦0,形成二周期。两个点处导数都不为零,但迭代并不趋于根。此方程的实根约为 −1.7692923542386314。
导数或差商失效。 对 f(x)=x3−1,在 x0=0 处函数值非零而导数为零,Newton 步无法形成。导数仅仅“很小”时,也可能产生极大的校正;判断是否过小应考虑函数、变量和舍入误差的尺度,不能对所有问题统一使用一个绝对阈值。
试探点离开定义域。 对 f(x)=logx,Newton 公式为 xn+1=xn(1−logxn)。若取 x0>e,下一点为负,实对数就无法继续计算。根存在且为单根,也不能排除这种失败。
6.2 残差与步长的停止准则
实际算法常同时检查
∣xn+1−xn∣≤τx(1+∣xn+1∣),∣f(xn+1)∣≤τf,
其中 τx 和 τf 应按变量、函数的尺度选取。还应设置最大迭代次数,并区分“满足容差”“停滞”“数值无效”和“达到上限”。
小步长可能来自浮点停滞或过度阻尼;小残差也可能来自重根或函数的尺度变化。两项都小是常用的实用判据,但一般仍不是严格的误差认证。
若已知 α 与 x 位于同一区间,且该区间上 ∣f′∣≥m1>0,才可以由中值定理推出
∣x−α∣≤m1∣f(x)∣.
对于重根,包含根的区间上不可能满足这样的正下界。
6.3 阻尼 Newton 法与回溯
先求完整 Newton 方向 sn=−f(xn)/f′(xn),再取
xn+1=xn+λnsn,0<λn≤1.
这称为 阻尼 Newton 法。一种选择步长的方式是对残差平方函数
Ψ(x)=21f(x)2
使用回溯。只要当前 f′(xn)=0,就有
Ψ′(xn)sn=−f(xn)2.
因而在非根处这是一个下降方向。取 0<c<1/2、0<β<1,从 λ=1 开始;若试探点不在定义域内,或不满足
Ψ(xn+λsn)≤Ψ(xn)−cλf(xn)2,
就将 λ 乘以 β 后重试。在当前点位于开定义域内、函数连续可微等通常条件下,足够短的步长可以满足下降要求。
下降要求本身不保证最终找到根:残差平方函数可能在非零残差处有驻点,序列也需要有界性等额外条件。实现中还要设置回溯上限和最小可分辨步长。
若在单根附近始终使用固定的 0<λ<1,迭代映射在根处的导数为 1−λ,通常只剩线性收敛。要恢复完整 Newton 法的局部二次速度,需要最终接受完整步长;在光滑单根附近,上述回溯规则与 c<1/2 允许这种行为。
6.4 保留夹根区间的保护策略
若已知 f 在 [a,b] 上连续且 f(a)f(b)<0,可以同时维护夹根区间,并把 Newton 候选点与二分回退结合起来。
一个容易给出收缩保证的规则是固定 0<θ<1/2,只接受落在
[a+θ(b−a), b−θ(b−a)]
中的有效 Newton 候选点,否则改用区间中点。计算候选点函数值后,按符号保留异号的半边;若候选点恰为根,则结束。
在精确算术和可靠符号判断下,每次更新都保持夹根性质,且新区间宽度不超过原宽度的 1−θ 倍。这给出区间收缩与收敛保证。
仅要求候选点在区间内部,不能直接推出上述统一收缩比例。另一方面,严格的中央区间规则可能反复拒绝靠近端点的 Newton 步,所以也不能无条件宣称这个简单混合算法仍保持二次收敛。全局保护与局部速度需要在具体策略中分别分析。
7. 非线性方程组的 Newton 法
7.1 Jacobian 与线性模型
考虑 d 个方程、d 个未知量:
F(x)=0,F=(F1,…,Fd)T,x∈Rd.
定义(Jacobian 矩阵)
若各分量可微,则 F 的 Jacobian 矩阵为
JF(x)=(∂xj∂Fi(x))i,j=1d.
在当前点的线性模型是
F(xn+s)≈F(xn)+JF(xn)s.
令这个模型为零,得到 Newton 步的实际计算形式:
JF(xn)sn=−F(xn),xn+1=xn+sn.
每一步需要解一个线性方程组。形式上可以写成 xn+1=xn−JF(xn)−1F(xn),但实现通常使用矩阵分解求解校正量,不显式形成逆矩阵。
7.2 局部收敛条件
定理(方程组 Newton 法的局部二次收敛)
设 F 在根 α 的开邻域内连续可微,JF 在该邻域内 Lipschitz 连续,并且
F(α)=0,JF(α) 可逆.
则从充分接近 α 的初值出发,精确求解每一步线性方程组的 Newton 法局部至少二次收敛。
更具体地,在足够小的凸邻域内,固定一个向量范数及其诱导矩阵范数。若
∥JF(x)−1∥≤B,∥JF(x)−JF(y)∥≤L∥x−y∥,
则对留在该邻域的迭代有
∥xn+1−α∥≤2BL∥xn−α∥2.
可逆性保证局部校正可解,逆矩阵范数则影响误差放大。接近奇异的 Jacobian 会使校正对函数值和舍入误差更敏感。若线性方程组只近似求解,求解误差还会进入下一步误差,必须控制其大小才能保持二次速度。
7.3 例:圆与直线的交点
考虑
F(x,y)=(x2+y2−1x−y),JF(x,y)=(2x12y−1).
两个根为
α±=(±21, ±21),
其中两个坐标取相同符号。选取 x0=(1,1/2)T,第一次校正解
(211−1)(sxsy)=(−1/4−1/2).
结果为 s0=(−1/4,1/4)T,因此 x1=(3/4,3/4)T。第二个方程本来就是线性的,所以一次精确 Newton 校正后就满足 x=y;第一个方程则还需继续迭代。
实验同时画出单位圆、直线 x=y 和最近一步的轨迹。圆对应方程的线性化是在旧点建立的一阶近似约束;当旧点不在圆上时,它并不是在旧点“与圆相切”的直线。
这个例子中 detJF(x,y)=−2(x+y)。当 x+y=0 时 Jacobian 奇异,不能使用普通 Newton 更新。即使离开这条直线,初值不同也可能收敛到不同交点。
7.4 方程组中的阻尼与成本
方程组同样可以采用 xn+1=xn+λnsn。对欧氏残差平方
Ψ(x)=21∥F(x)∥22,
精确 Newton 方向满足
∇Ψ(xn)Tsn=F(xn)TJF(xn)sn=−∥F(xn)∥22.
因此可以沿用回溯下降思想。实际实现还需注意各方程和变量的尺度,避免某个量纲较大的分量主导停止判据。
一次迭代的主要成本包括函数向量求值、Jacobian 构造和线性求解。一般稠密 d×d 矩阵的分解成本为 O(d3);稀疏结构或特殊矩阵结构可能显著改变成本。后续数值线性代数篇章将讨论这些线性子问题的求解与稳定性。
8. 方法对照与常见误区
8.1 标量方法对照
下表的求值数指初始化之后每次更新的主要计算量,不含绘图、额外停止检查和回溯试探。收敛阶指相应条件下的局部渐近行为。
| 方法 | 初始信息 | 每步主要计算 | 收敛速度与条件 | 需要特别注意 |
|---|
| 二分法 | 连续函数的异号区间 | 1 次新函数求值 | 夹根区间宽度每步减半 | 偶数重根可能无法靠变号隔离 |
| 不动点迭代 | 迭代映射与一个初值 | 1 次映射求值 | 压缩条件下收敛;非零局部导数时通常线性 | 映射的选择和不变区间 |
| Newton 法 | 函数、导数与一个初值 | 1 次函数及 1 次导数求值 | 光滑单根附近至少二次 | 初值、导数可靠性和定义域 |
| 重数修正 Newton 法 | 上述信息及正确重数 | 与普通 Newton 法相同 | 重根附近恢复至少二次 | 重数错误会改变局部收敛性质 |
| 割线法 | 函数与两个不同初值 | 缓存后 1 次新函数求值 | 光滑单根且二阶导数非零时通常为黄金分割阶 | 小分母;不保留夹根区间 |
| Steffensen 法 | 不动点映射与一个初值 | 2 次映射求值 | 光滑局部压缩条件下至少二次 | 差分相消与加速点的定义域 |
二分法的宽度减半是直接可用的区间结论,不应因此断言其中点实际误差每一步恰好减半。Newton 法的收敛阶更高,也不能单凭阶数断言其总耗时一定低于割线法。
8.2 常见误区
- “Newton 法总是二次收敛。” 单根、局部光滑性和足够好的初值都是条件;普通 Newton 法在重根处一般只线性收敛。
- “每一步导数非零,就会收敛。” 非零导数只让该步公式有定义,二周期反例已经否定了这一推论。
- “割线法有两个初值,所以会夹住根。” 割线法保留最近两个点,并不按函数符号保留端点。
- “阻尼越小越安全,也越精确。” 过小步长可能造成缓慢收敛或停滞,固定阻尼还可能损失二次速度。
- “残差很小就说明根的位置很准。” 必须考虑导数下界或 Jacobian 的可逆性与尺度,重根尤其容易产生误判。
- “方程组 Newton 法就是求 Jacobian 的逆。” 逆矩阵表达便于理论书写,实际计算的核心是稳定地求解线性方程组。
9. 本篇要点
- Newton 法从当前点的线性模型出发;在光滑单根附近,一阶误差项消失,得到至少二次收敛。
- 重根使普通 Newton 法退化为线性收敛;已知正确重数时可以修正迭代,消去线性项。
- 割线法与 Steffensen 法免去显式导数计算,但各有初始化、求值成本和分母可靠性问题。
- 阻尼与区间保护用额外规则控制试探步;收敛保证、停止认证和局部速度应分别说明。
- 非线性方程组的 Newton 法在每一步求解 Jacobian 线性系统,其可解性和稳定性直接影响迭代结果。
下一篇转向线性方程组的直接解法,整理消元、主元选择与矩阵分解,为非线性迭代中的线性子问题提供计算工具。
参考资料
- Richard L. Burden、J. Douglas Faires、Annette M. Burden:《Numerical Analysis》,第 10 版,Cengage Learning,非线性方程的数值解相关章节。
- Tobin A. Driscoll、Richard J. Braun:《Fundamentals of Numerical Computation》,Newton 法、割线法及非线性方程组相关章节。
- National Institute of Standards and Technology:《Digital Library of Mathematical Functions》,第 3.8 节“Nonlinear Equations”。