这一章研究如何用数值方法求解
f(x)=0以及多元非线性方程组
F(x)=0.核心思路可以串成一条链:
- 先找含根区间:用画图、试算或对分区间法确定根的大致位置。
- 再做局部加速:初值已经靠近根时,用 Newton 法迅速提高精度。
- 导数不方便时:用弦截法以差商近似导数。
- 遇到重根时:普通 Newton 法会退化为线性收敛,需要修正。
- 推广到多元问题:用 Jacobi 矩阵线性化,每一步解一个线性方程组。
对分区间法负责“稳妥地找”,Newton 法负责“快速地精修”。
教学范围#
根据两次课堂内容,本章实际教学范围如下。
纳入笔记#
- §8.1 对分区间法
- 收敛阶的基本概念
- §8.3 Newton 法与弦截法
- Newton 法在重根处的修正
- §8.5.1 非线性方程组的 Newton 法
- §8.5.2 最速下降法的基本思想
课堂未讲或明确跳过#
- §8.2 简单迭代法
- 不动点迭代
- 压缩映射收敛条件
- Steffensen 加速
- §8.4 抛物线法(Müller 法)
- 老师仅口头说明了“用二次插值多项式的零点产生下一近似值”的思想,随后明确跳过。
- §8.5.2 最速下降法的完整算法与线搜索细节
- §8.6 应用实例
老师明确说明:没有讲过的内容,考试不作要求。
非线性方程与根#
一般问题为
f(x)=0,其中 f(x) 为非线性函数。
大多数非线性方程没有可直接套用的求根公式,因此通常只能构造近似序列
x0,x1,x2,…使其逐步趋近真根 x∗。
课堂中的直观例子为
x−x1/3−2=0,x∈(0,5).通过试算可得:
f(3)<0,f(4)>0,所以根位于 (3,4) 内。接下来可以继续缩小区间,也可以在得到较好的初值后改用 Newton 法。
NOTE数值求根通常包含两个阶段:
- 根的隔离:确定根在哪一个小区间中;
- 根的精化:从粗略近似出发,提高有效数字。
对分区间法适合第一阶段,Newton 法适合第二阶段。
对分区间法#
含根区间#
设 f(x) 在 [a,b] 上连续,且
f(a)f(b)<0.由连续函数介值定理,至少存在一个
x∗∈(a,b)使得
f(x∗)=0.区间 [a,b] 称为一个含根区间。
若还能够由单调性、导数符号或图像判断该区间内只有一个根,则可以确定算法逼近的是该唯一根。
WARNING“区间内只有一个根”有助于确认目标根,但对分区间法维持“区间内至少有一个根”只需要连续性和端点异号。
偶重根附近函数通常不变号,因此仅靠端点异号可能找不到偶重根。
算法过程#
令
a0=a,b0=b.第 k 步取中点
ck=2ak+bk.若 f(ck)=0,则已经得到精确根。
否则根据符号选择新的含根区间:
[ak+1,bk+1]={[ak,ck],[ck,bk],f(ak)f(ck)<0,f(ck)f(bk)<0.每迭代一步,区间长度减半:
bk+1−ak+1=2bk−ak.因此得到嵌套区间
[a0,b0]⊃[a1,b1]⊃[a2,b2]⊃⋯.
[图片占位] 插入 lesson13 手写 PPT 第 217 或第 225 张幻灯片:中点判号并保留含根一半区间的示意图。
误差估计与迭代次数#
取区间中点作为近似值
xk=2ak+bk,则
∣xk−x∗∣≤2bk−ak=2k+1b−a.若要求
∣xk−x∗∣≤ε,只需满足
2k+1b−a≤ε.因此
k≥ln2ln(b−a)−lnε−1.实际迭代次数取右端的向上整数。
常用停止条件:
2bk−ak<ε.课堂中也采用了更保守的条件
bk−ak<TOL.例:求三次方程的根#
求
f(x)=x3+10x−20=0在 [1,2] 内的唯一实根,要求误差不超过
ε=21×10−4.先验证:
f(1)=−9<0,f(2)=8>0.又有
f′(x)=3x2+10>0,所以 f(x) 严格单调递增,根唯一。
迭代次数满足
k≥ln2ln(2−1)−ln(21×10−4)−1≈13.28.故取
k=14.主要迭代结果如下:
| k | ak | bk | xk=(ak+bk)/2 | f(xk) |
|---|
| 0 | 1 | 2 | 1.5000000 | -1.6250000 |
| 1 | 1.5 | 2 | 1.7500000 | 2.8593750 |
| 2 | 1.5 | 1.75 | 1.6250000 | 0.5410156 |
| 3 | 1.5 | 1.625 | 1.5625000 | -0.5603027 |
| 4 | 1.5625 | 1.625 | 1.5937500 | -0.0143127 |
| 5 | 1.59375 | 1.625 | 1.6093750 | 0.2621726 |
| 6 | 1.59375 | 1.609375 | 1.6015625 | 0.1236367 |
| 7 | 1.59375 | 1.6015625 | 1.5976563 | 0.0545894 |
| 8 | 1.59375 | 1.5976563 | 1.5957032 | 0.0201208 |
| 9 | 1.59375 | 1.5957032 | 1.5947266 | 0.0028996 |
| 10 | 1.59375 | 1.5947266 | 1.5942383 | -0.0057077 |
| 11 | 1.5942383 | 1.5947266 | 1.5944825 | -0.0014037 |
| 12 | 1.5944825 | 1.5947266 | 1.5946046 | 0.00074864 |
| 13 | 1.5944825 | 1.5946046 | 1.5945436 | -0.00032642 |
| 14 | 1.5945436 | 1.5946046 | 1.5945741 | — |
因此可取
x∗≈1.5945741.特点与局限#
优点:
- 算法简单,只需计算函数值并判断符号;
- 只要连续且初始端点异号,收敛性稳定;
- 误差上界明确,可以预先估计迭代次数;
- 不需要导数。
局限:
- 收敛较慢,每一步只把误差上界缩小一半;
- 只能直接处理实根;
- 需要先找到端点异号的区间;
- 对偶重根等不变号零点不敏感。
迭代误差与收敛阶#
设迭代序列 xk→x∗,定义误差
ek=xk−x∗.若存在常数 C>0 和 p≥1,使得
k→∞lim∣ek∣p∣ek+1∣=C,则称该迭代法具有 p 阶收敛。
线性收敛#
当
p=1,0<C<1时,称为线性收敛。
直观上,每迭代一步,误差乘以一个固定折扣:
∣ek+1∣≈C∣ek∣.对分区间法的区间误差上界每一步乘以 1/2,因此属于线性收敛。
超线性收敛#
当
p>1时,称为超线性收敛。
误差下降速度会越来越快。
二阶收敛#
当
p=2时,称为二阶收敛或平方收敛:
∣ek+1∣≈C∣ek∣2.若当前误差约为 10−2,随后可能按
10−2→10−4→10−8→10−16迅速下降。
TIP判断一个 Newton 程序是否表现正常,可以观察有效数字是否在进入收敛区后近似翻倍。若迭代十余步仍没有明显加速,应检查初值、导数、公式和停止条件。
Newton 法#
公式推导#
设 xk 已经较接近根 x∗,在 xk 处对 f(x∗) 作一阶 Taylor 展开:
0=f(x∗)≈f(xk)+f′(xk)(x∗−xk).解出 x∗ 的一阶近似:
x∗≈xk−f′(xk)f(xk).于是定义下一次迭代值
xk+1=xk−f′(xk)f(xk).Newton 法的核心来自局部线性化。
几何意义#
在点
(xk,f(xk))处作曲线 y=f(x) 的切线,其方程为
y−f(xk)=f′(xk)(x−xk).令 y=0,切线与 x 轴的交点为
xk+1=xk−f′(xk)f(xk).因此 Newton 法也称为切线法。
[图片占位] 插入 lesson13 手写 PPT 第 273 或第 297 张幻灯片,或课本图 8-3:以切线零点产生下一近似值的几何示意图。
局部收敛条件#
设 x∗ 为单根,并且:
- f(x) 在 x∗ 附近二阶连续可微;
- f′(x∗)=0;
- 初值 x0 充分靠近 x∗。
则 Newton 迭代收敛到 x∗,且至少二阶收敛。
在根附近通常有
ek+1≈2f′(x∗)f′′(x∗)ek2.这一定理给出三个重要判断:
- 根的性质重要:单根处 f′(x∗)=0;
- 初值重要:Newton 法只有局部收敛保证;
- 速度可检验:进入收敛区后应出现二阶收敛特征。
WARNING若初值离根较远,切线零点可能跑向远处,Newton 法可能发散、振荡或收敛到其他根。
较稳妥的流程是:
- 用画图、试算或对分区间法获得一至两位可靠数字;
- 再启动 Newton 法精化。
Newton 法主要用于改进精度,缺乏可靠的全局搜索能力。
停止准则#
常见停止条件有三类。
相邻迭代值之差#
绝对形式:
∣xk+1−xk∣<ε.相对形式:
max(1,∣xk+1∣)∣xk+1−xk∣<ε.方程残差#
∣f(xk+1)∣<ε.最大迭代次数#
达到预设次数仍未满足误差要求时,报告失败或发出警告。
WARNING小残差不一定意味着 xk 与真根很接近。
当根附近函数非常平坦,尤其是重根问题中,∣f(xk)∣ 可能已经很小,而 ∣xk−x∗∣ 仍然较大。因此应结合:
共同判断。
例:Newton 法求根#
求
f(x)=x3+10x−20=0的根,取
x0=1.5.有
f′(x)=3x2+10.Newton 迭代公式为
xk+1=xk−3xk2+10xk3+10xk−20.计算:
| k | xk | f(xk) |
|---|
| 0 | 1.500000000 | -1.625000000 |
| 1 | 1.597014925 | 0.043266625 |
| 2 | 1.594563749 | 2.8771×10−5 |
| 3 | 1.594562117 | 1.2744×10−11 |
| 4 | 1.594562117 | 约为 0 |
因此
x∗≈1.5945621.进入收敛区后,只需少量迭代就获得接近双精度极限的结果。
程序实现中的检查#
Newton 法每一步需要:
- 一次函数值 f(xk);
- 一次精确导数值 f′(xk);
- 一次更新。
核心更新只有
xk+1=xk−f′(xk)f(xk).实现时应检查:
-
导数是否过小
若
∣f′(xk)∣
很小,Newton 步可能异常放大。
-
误差限是否符合浮点精度
双精度计算中,将默认容差设为约 10−15 比 10−17 更合理。具体值还需结合问题尺度。
-
最大迭代次数是否合理
对正常二阶收敛的 Newton 法,通常十几步已经足够。设置 100 步可能掩盖公式错误或收敛退化。
-
是否记录迭代历史
观察 xk、f(xk) 和步长变化,有助于判断收敛阶与异常行为。
-
是否直接求了数值导数
经典 Newton 法依赖解析或精确导数。用差商替代导数后,算法性质会发生变化,更接近弦截法或拟 Newton 法。
弦截法#
弦截法也称割线法或 Secant Method。
迭代公式#
Newton 法中的导数可用两点差商近似:
f′(xk)≈xk−xk−1f(xk)−f(xk−1).代入 Newton 公式:
xk+1=xk−f(xk)f(xk)−f(xk−1)xk−xk−1.几何上,过两点
(xk−1,f(xk−1)),(xk,f(xk))作割线,取该割线与 x 轴的交点作为 xk+1。
[图片占位] 插入 lesson13 手写 PPT 第 305 或第 313 张幻灯片,或课本图 8-4:弦截法由两点割线产生下一近似值。
收敛速度与代价#
在单根附近且初值足够好时,弦截法的收敛阶为
p=21+5≈1.618.它属于超线性收敛,速度低于 Newton 法的二阶收敛,但远快于线性收敛。
优点:
- 不需要计算导数;
- 每一步通常只需新增一次函数求值;
- 仍具有超线性收敛速度。
代价与风险:
- 需要两个初值 x0,x1;
- 初值仍需接近目标根;
- 当
f(xk)−f(xk−1)
很小时,分母可能导致不稳定;
- 两点逐渐靠近时,差商中存在相消误差;
- 在有限精度计算中不能无休止迭代,应监测步长和残差,一旦精度不再改善就停止。
例:弦截法求根#
仍求
f(x)=x3+10x−20=0,取
x0=1.5,x1=2.迭代公式为
xk+1=xk−(xk3+10xk−20)−(xk−13+10xk−1−20)xk3+10xk−20(xk−xk−1).计算结果:
| k | xk | f(xk) |
|---|
| 0 | 1.5000000 | -1.6250000 |
| 1 | 2.0000000 | 8.0000000 |
| 2 | 1.5844156 | -0.1783702 |
| 3 | 1.5934795 | -0.0190786 |
| 4 | 1.5945651 | 5.256×10−5 |
| 5 | 1.5945621 | 约为 0 |
因此
x∗≈1.5945621.与 Newton 法相比,弦截法多用几步,但省去了导数计算。
重根与 Newton 法修正#
重根定义#
若 x∗ 满足
f(x∗)=f′(x∗)=⋯=f(r−1)(x∗)=0,且
f(r)(x∗)=0,则称 x∗ 为 f(x) 的 r 重根。
等价地,
f(x)=(x−x∗)rg(x),g(x∗)=0.当 r=1 时为单根。
普通 Newton 法为什么变慢#
对 r 重根使用普通 Newton 法,仍可在足够好的初值下收敛,但收敛阶降为 1,并且
k→∞limxk−x∗xk+1−x∗=rr−1.即
ek+1≈rr−1ek.例如三重根时误差约乘以
32.Newton 法原本的快速优势会明显减弱。
已知重数#
若重数 r 已知,可采用修正 Newton 公式
xk+1=xk−rf′(xk)f(xk).该修正可恢复至少二阶收敛。
未知重数#
令
μ(x)=f′(x)f(x).重根 x∗ 是 μ(x) 的单根。对 μ(x)=0 使用 Newton 法可得
xk+1=xk−[f′(xk)]2−f(xk)f′′(xk)f(xk)f′(xk).该方法不需要预先知道重数,但需要计算二阶导数。
WARNING靠近重根时,f(xk) 和 f′(xk) 都可能非常小。有限精度下,公式可能出现严重相消、除以极小数或 0/0,从而产生 NaN。程序必须设置分母检查和合理停止条件。
例:方程 x-sinx=0#
考虑
f(x)=x−sinx.有
f(0)=0,f′(x)=1−cosx,f′(0)=0,f′′(x)=sinx,f′′(0)=0,f′′′(x)=cosx,f′′′(0)=1=0.因此
x∗=0是一个三重根。
普通 Newton 公式为
xk+1=xk−1−cosxkxk−sinxk.取 x0=0.5 时,迭代值约为
0.5→0.33193→0.22088→0.14713→⋯,表现为近似按 2/3 缩小的线性收敛。
已知重数 r=3 时,修正公式为
xk+1=xk−31−cosxkxk−sinxk.同样取 x0=0.5:
0.5→−4.20418×10−3→2.47699×10−9→约0.修正后收敛速度显著提高。
非线性方程组的 Newton 法#
向量形式与 Jacobi 矩阵#
考虑 n 个未知数、n 个非线性方程:
⎩⎨⎧f1(x1,x2,…,xn)=0,f2(x1,x2,…,xn)=0,⋮fn(x1,x2,…,xn)=0.记
x=(x1,x2,…,xn)T,F(x)=(f1(x),f2(x),…,fn(x))T.方程组写为
F(x)=0.向量函数的导数为 Jacobi 矩阵:
J(x)=F′(x)=∂x1∂f1∂x1∂f2⋮∂x1∂fn∂x2∂f1∂x2∂f2⋮∂x2∂fn⋯⋯⋱⋯∂xn∂f1∂xn∂f2⋮∂xn∂fn.多元 Newton 迭代#
在当前近似 x(k) 附近作一阶 Taylor 展开:
F(x(k)+Δx(k))≈F(x(k))+J(x(k))Δx(k).要求下一点近似满足方程组:
F(x(k+1))≈0.因此令
J(x(k))Δx(k)=−F(x(k))并更新
x(k+1)=x(k)+Δx(k).WARNING公式也可形式化写成
x(k+1)=x(k)−J(x(k))−1F(x(k)).实际计算中不要显式求逆。应直接解线性方程组
J(x(k))Δx(k)=−F(x(k)).这更快,也更稳定。
[图片占位] 插入 lesson14 手写 PPT 第 241、249 或 257 张幻灯片:从向量 Newton 公式改写为线性方程组的推导。
计算步骤#
给定初值 x(0):
-
计算残差向量
F(x(k)).
-
计算 Jacobi 矩阵
J(x(k)).
-
解线性方程组
J(x(k))Δx(k)=−F(x(k)).
-
更新
x(k+1)=x(k)+Δx(k).
-
检查停止条件,例如
∥F(x(k+1))∥∞<ε
或
∥Δx(k)∥∞<ε.
只要 Jacobi 矩阵在解附近非奇异、函数足够光滑且初值充分接近,通常可以获得二阶收敛。
例:二元非线性方程组#
求方程组
{4x12+3x22=1,x13−8x23=1在
x(0)=(0.25,−0.5)T附近的根。
先写成
F(x)=[4x12+3x22−1x13−8x23−1].Jacobi 矩阵为
J(x)=[8x13x126x2−24x22].在初值处:
J(x(0))=[20.1875−3−6],F(x(0))=[00.015625].因此解
[20.1875−3−6][Δx1(0)Δx2(0)]=−[00.015625].得到
Δx1(0)=0.00409836,Δx2(0)=0.00273224.更新:
x(1)=x(0)+Δx(0)=[0.25409836−0.49726776].继续迭代可得
x∗≈(0.2540786,−0.4972512)T.
[图片占位] 插入 lesson14 手写 PPT 第 273、289 或第 297 张幻灯片:例题中 Jacobi 矩阵、Newton 方程组及第一次修正量的完整板书。
TIP这类题的作答顺序应固定:
- 写出 F(x);
- 求 J(x);
- 写一般 Newton 方程;
- 代入当前近似值;
- 解线性方程组得到 Δx;
- 用 x(k+1)=x(k)+Δx(k) 更新。
最容易漏掉的是右端的负号。
计算量与实际意义#
每次多元 Newton 迭代需要:
- 计算 n 个函数值;
- 计算 n2 个偏导数;
- 解一个 n 阶线性方程组。
因此规模较大时计算代价明显增加。
它在以下问题中很常见:
- 隐式时间离散;
- 非线性偏微分方程离散后的代数方程组;
- 非线性平衡状态计算;
- 优化问题中的 Newton 与拟 Newton 方法。
课堂提到的 BFGS 属于拟 Newton 方法。它通过迭代近似二阶信息,思想上与多元弦截条件相关,可以减少直接构造高维导数矩阵的负担。
最速下降法的基本思想#
当方程数 m 与未知数个数 n 不相等,或方程组不能精确同时满足时,可把
fi(x)=0,i=1,2,…,m转化为最小化问题。
构造目标函数
Φ(x)=i=1∑m[fi(x)]2=∥F(x)∥22.若原方程组存在精确解,则该解使
Φ(x)=0.若不存在精确解,最小化 Φ 可以获得残差平方和最小的近似解。这与最小二乘思想一致。
由链式法则:
∇Φ(x)=2J(x)TF(x).最速下降方向为
−∇Φ(x).基本更新形式为
x(k+1)=x(k)−λk∇Φ(x(k)),其中 λk>0 为步长。
严格的最速下降法需要沿下降方向做一维搜索:
λk=argλ>0minΦ(x(k)−λ∇Φ(x(k))).课堂只要求理解以下关系:
求非线性方程组
⟹ 最小化残差平方和
⟹ 可沿负梯度方向下降。
还可以对驻点方程
∇Φ(x)=0再次使用多元 Newton 法。
方法选择总结#
| 方法 | 需要的信息 | 收敛速度 | 优点 | 主要风险 | 适用阶段 |
|---|
| 对分区间法 | 函数值、端点异号 | 线性,误差上界每步减半 | 稳定、误差可控 | 慢;需含根区间 | 根的隔离、粗定位 |
| Newton 法 | f,f′,一个初值 | 单根附近二阶 | 极快 | 初值敏感;导数可能过小 | 局部精化 |
| 弦截法 | f,两个初值 | 约 1.618 阶 | 无需导数 | 差商相消;后期不稳定 | 导数难求时的局部精化 |
| 重根修正 Newton | f,f′;有时需 f′′ | 可恢复二阶 | 解决重根退化 | 需知重数或二阶导数 | 重根问题 |
| 多元 Newton 法 | F,J | 解附近通常二阶 | 多元问题中速度快 | 每步需解线性方程组 | 非线性方程组 |
| 最速下降法 | F,J 或梯度 | 通常线性、较慢 | 可处理超定或无精确解情况 | 步长选择敏感 | 获取可用初值或最小二乘解 |
推荐组合:
对分区间法粗定位⟶Newton 法精化当导数难以获得时:
粗定位⟶弦截法
考试与作答提示#
必须掌握#
- 对分区间法的区间更新、误差估计与迭代次数;
- 收敛阶的含义;
- Newton 迭代公式;
- Newton 法的几何意义和局部收敛条件;
- 弦截法公式及其与差商的关系;
- 重根导致 Newton 法退化,以及两种修正思路;
- Jacobi 矩阵;
- 多元 Newton 法每一步转化为线性方程组;
- 二元非线性方程组的一步手算。
公式要求#
老师明确要求记住 Newton 公式:
xk+1=xk−f′(xk)f(xk).其余公式侧重理解来源和正确使用。弦截法可以从“用差商替代导数”现场推出。
书写顺序#
求根计算题应尽量完整写出:
- 原函数及导数;
- 一般迭代公式;
- 本题的具体迭代公式;
- 初值代入;
- 每一步数值;
- 停止条件与最终近似解。
多元题应重点展示:
- F(x);
- J(x);
- Newton 线性方程组;
- 修正量 Δx;
- 更新后的 x(k+1)。
考查重点在于能否为具体问题选择正确算法,并把算法步骤写完整。