寻找方程 f(x)=0 的根是数值分析的基本问题。由于解析解往往难以获得,我们通常构造迭代序列 {xk},使其收敛于实根 x∗。
基于连续函数的介值定理。若 f(a)⋅f(b)<0,则在 (a,b) 内至少存在一个根。
- 算法:每次取中点 c=(a+b)/2,根据 f(c) 的符号缩小区间。
- 评价:收敛速度慢(线性收敛),但非常稳健,常用于为更高级的算法提供初始值。
- 误差估计:第 n 步后的区间长度为 (b−a)/2n。
将 f(x)=0 改写为等价形式 x=ϕ(x)。从 x0 出发,令 xk+1=ϕ(xk)。
定理:若 ϕ(x) 在 [a,b] 上满足:
- ϕ(x)∈[a,b] 对于所有 x∈[a,b];
- ∣ϕ′(x)∣≤L<1 (压缩常数);
则迭代格式 xk+1=ϕ(xk) 对任意初始值 x0∈[a,b] 均收敛。
若 ϕ′(x∗)=ϕ′′(x∗)=⋯=ϕ(p−1)(x∗)=0 且 ϕ(p)(x∗)=0,则该迭代法具有 p 阶收敛。
Newton 法是利用 f(x) 的一阶泰勒展开构造的迭代格式:
xk+1=xk−f′(xk)f(xk)
xk+1 是曲线 y=f(x) 在点 (xk,f(xk)) 处切线与 x 轴交点的横坐标。
定理:若 x∗ 是 f(x)=0 的单根(即 f′(x∗)=0),且 f′′(x) 连续,则 Newton 法在 x∗ 附近是平方收敛的(p=2)。
若 x∗ 是 m 重根(m>1),Newton 法将退化为线性收敛。此时可采用改进格式:
xk+1=xk−mf′(xk)f(xk)
以恢复平方收敛。
Newton 法需要计算导数,这在某些情况下较为困难。弦截法利用前两步的斜率代替导数:
xk+1=xk−f(xk)−f(xk−1)f(xk)(xk−xk−1)
收敛阶为 21+5≈1.618(超线性收敛)。
例 1:分析迭代格式 xk+1=xk+2 求解 x2−x−2=0 正根的收敛性。
解析:
- 该方程的正根为 x∗=2。
- 迭代函数 ϕ(x)=x+2。
- 计算导数:ϕ′(x)=2x+21。
- 在 x∗=2 处,ϕ′(2)=241=1/4。
- 因为 ∣ϕ′(2)∣<1,由压缩映射原理知,该迭代格式局部收敛,且为线性收敛。
例 2:利用 Newton 法求 C 的迭代格式。
设 f(x)=x2−C=0。
f′(x)=2x。
代入 Newton 公式:
xk+1=xk−2xkxk2−C=21(xk+xkC)
这就是著名的巴比伦算法,具有平方收敛特性。
前往 数值分析专题练习库 挑战 Aitken 加速法与重根判别题目。