这一章研究一阶常微分方程初值问题
{y′(x)=f(x,y),y(a)=y0.a≤x≤b,很多微分方程无法写出解析解,但在数值模拟中仍需知道解随时间或空间的变化。因此,数值方法不再试图直接求出完整函数表达式,而是在离散节点
xn=a+nh,n=0,1,…,N,上计算近似值
yn≈y(xn).其中:
- h:步长(step size),通常有 h=(b−a)/N
- y(xn):微分方程真解在 xn 处的精确值
- yn:数值方法计算得到的近似值
本章的主线是:
连续初值问题 → 离散节点 → 递推格式 → 误差与稳定性分析。
课堂重点围绕 Euler 方法展开,并进一步介绍了梯形公式、改进 Euler 法和经典四阶 Runge-Kutta 法。
NOTE配图占位:插入手写 PPT 中“连续解曲线与等距节点 x0,x1,…,xn”的示意图,用于说明数值解只计算离散节点上的近似值。
课程范围#
教材第九章包含 Euler 方法、改进 Euler 方法、Runge-Kutta 方法、线性多步法以及相容性、收敛性和稳定性理论。课堂实际讲授范围如下:
| 教材内容 | 课堂处理 | 本笔记处理 |
|---|
| §9.1 Euler 方法 | 详细讲授 | 完整记录,是考试核心 |
| §9.2 改进 Euler 方法 | 讲授梯形公式与预测-校正形式 | 完整记录,作为了解内容 |
| §9.3 Runge-Kutta 方法 | 介绍经典四阶 RK 公式并手算一步 | 记录公式与课堂例题,教师明确说明不考 |
| §9.4 线性多步法 | 只解释“单步法 / 多步法”的概念 | 不记录 Adams、Milne、Hamming 等具体公式 |
| §9.5 相容性、收敛性与稳定性 | 只作定性说明 | 记录步长与稳定性的直观结论,不展开理论证明 |
教师在复习说明中强调:
- 第九章考试主要考 Euler 法的计算
- 可能考向前 Euler,也可能考向后 Euler
- 向后 Euler 可与 Newton 迭代结合
- 可能要求用 Taylor 展开推导 Euler 法的局部截断误差
- 四阶 Runge-Kutta 法不考
- 编程不考
初值问题的离散化#
给定初值问题
{y′(x)=f(x,y),y(a)=y0,将区间 [a,b] 等分:
xn=a+nh,h=Nb−a.初值给出
y0=y(a).之后利用递推公式依次计算
y1,y2,…,yN.数值解因此是一组离散点:
(x0,y0),(x1,y1),…,(xN,yN).如果需要得到区间内的连续近似曲线,可再对这些离散点进行插值;本章首先关心各节点上的数值。
通常假设 f(x,y) 连续,并且关于 y 满足适当的 Lipschitz 条件,从而初值问题在所考虑区间内存在唯一解。课堂没有展开这一理论条件。
数值格式的三种构造思路#
数值微分观点#
用差商近似导数:
y′(xn)≈hy(xn+1)−y(xn).再利用微分方程
y′(xn)=f(xn,y(xn)),即可构造递推格式。
数值积分观点#
将微分方程在 [xn,xn+1] 上积分:
∫xnxn+1y′(x)dx=∫xnxn+1f(x,y(x))dx.得到精确关系
y(xn+1)−y(xn)=∫xnxn+1f(x,y(x))dx.因此,只要用某种数值积分公式近似右端积分,就能得到一种常微分方程数值格式:
- 左矩形公式 → 向前 Euler 法
- 右矩形公式 → 向后 Euler 法
- 梯形公式 → 隐式梯形格式
Taylor 展开观点#
在 xn 处展开:
y(xn+h)=y(xn)+hy′(xn)+2h2y′′(xn)+⋯.利用微分方程及其导数关系,可以构造高阶方法。课堂没有单独讲 Taylor 方法,主要将 Taylor 展开用于局部截断误差分析。
向前 Euler 法#
格式推导#
在 xn 处使用向前差商:
hy(xn+1)−y(xn)≈y′(xn)=f(xn,y(xn)).将精确值换成数值近似,得到
yn+1=yn+hf(xn,yn)这就是向前 Euler 法(forward Euler method),课程中简称 Euler 法。
从数值积分角度看,它等价于用左端点矩形近似积分:
∫xnxn+1f(x,y(x))dx≈hf(xn,yn).几何意义#
在点 (xn,yn) 处,微分方程给出的斜率为
f(xn,yn).向前 Euler 法用该点的切线沿 x 方向前进一个步长 h:
yn+1=yn+h×当前斜率.它在每一步都把曲线局部近似成直线。
NOTE配图占位:插入教材图 9-1 或手写 PPT 中“从 Pn 沿当前切线推进到下一节点”的 Euler 几何示意图。
显式格式#
在
yn+1=yn+hf(xn,yn)中,右端只含已知量。已知 yn 后,通过函数求值和四则运算即可直接得到 yn+1。
这种格式称为 显式格式(explicit method)。
计算流程#
输入:f(x,y)、区间端点 a,b、初值 y0、步长 h。
y[n+1] = y[n] + h*f(x[n], y[n])
课堂程序演示分别取 h=0.2,0.1,0.05。结果显示:
- 步长越小,数值曲线通常越接近精确解
- 初值处误差为零
- 随着递推步数增加,各步误差会逐渐积累
NOTE配图占位:插入课堂程序输出的两幅图:
- h=0.2,0.1,0.05 时向前 Euler 数值解与精确解的对比图;
- 三种步长下误差随 t 变化的曲线图。
课堂例题:向前 Euler 法#
求初值问题
⎩⎨⎧dtdy=y−t2+1,y(0)=0.5,0≤t≤2.该方程的精确解为
y(t)=(t+1)2−2et.选择这个问题的原因是:它仍是一阶线性方程,精确解已知,便于直接比较数值误差。
取
h=0.2,tn=0.2n.其中
f(t,y)=y−t2+1.向前 Euler 格式为
yn+1=yn+0.2(yn−tn2+1).第一步#
y1=y0+0.2(y0−t02+1)=0.5+0.2(0.5−02+1)=0.8.因此
y(0.2)≈y1=0.8.精确值为
y(0.2)=(1.2)2−2e0.2≈0.829299.此步误差约为
y(0.2)−y1≈0.029299.第二步#
y2=y1+0.2(y1−t12+1)=0.8+0.2(0.8−0.22+1)=1.152.因此
y(0.4)≈y2=1.152.精确值为
y(0.4)=(1.4)2−2e0.4≈1.214088.误差约为
y(0.4)−y2≈0.062088.后续各步完全按照同一递推公式计算。
向后 Euler 法#
将差商看作右端点 xn+1 处导数的近似:
hy(xn+1)−y(xn)≈y′(xn+1)=f(xn+1,y(xn+1)).得到向后 Euler 法(backward Euler method):
yn+1=yn+hf(xn+1,yn+1)从数值积分角度看,它对应右矩形公式:
∫xnxn+1f(x,y(x))dx≈hf(xn+1,yn+1).隐式格式#
未知量 yn+1 同时出现在等式两边,不能直接代入计算。每前进一步,都要先解一个代数方程。
这种格式称为 隐式格式(implicit method)。
令
G(z)=z−yn−hf(xn+1,z).则 yn+1 是方程
G(z)=0的根。
当 f 关于 y 非线性时,这通常是非线性方程。
用 Newton 法求解每一步#
Newton 迭代为
z(k+1)=z(k)−G′(z(k))G(z(k)).由于
G′(z)=1−hfy(xn+1,z),所以
z(k+1)=z(k)−1−hfy(xn+1,z(k))z(k)−yn−hf(xn+1,z(k))通常取
z(0)=yn.原因是相邻两个节点距离只有 h,当解随 x 连续变化时,yn 往往已经很接近 yn+1,因此是较好的初值。
教材也可使用不动点迭代:
z(k+1)=yn+hf(xn+1,z(k)),但课堂更推荐 Newton 法:
- f 的解析表达式已知,fy 通常容易得到
- 初值 z(0)=yn 较好
- 在正常情况下通常只需少量迭代即可收敛
课堂例题:向后 Euler 第一步#
仍考虑
y′=y−t2+1,y(0)=0.5,取 h=0.2。第一步满足
y1=0.5+0.2(y1−0.22+1).整理得
0.8y1=0.692,因此
y1=0.865.这里 f 关于 y 是线性的,所以可以直接解出;一般非线性问题需用 Newton 迭代。
若写成
G(z)=z−0.5−0.2(z−0.04+1)=0.8z−0.692,则 G′(z)=0.8。从 z(0)=0.5 出发,Newton 法一步便得到精确根 z=0.865。
显式格式与隐式格式#
显式格式#
特点:
- yn+1 可由已知量直接计算
- 每一步计算简单
- 易于编程
- 步长往往受到稳定性限制
典型方法:
- 向前 Euler 法
- 改进 Euler 法
- 经典四阶 Runge-Kutta 法
隐式格式#
特点:
- yn+1 出现在待求方程中
- 每一步需要解线性或非线性方程
- 单步计算成本较高
- 稳定性通常更好,常能允许较大的步长
典型方法:
课堂强调的实际权衡是:
显式方法每一步便宜,但可能被迫使用很小的时间步长;隐式方法每一步更贵,却可能显著减少总步数。
在大规模流体计算中,每个时间层本身就可能涉及超大规模方程组,因此步长限制会直接决定总计算量。
WARNING课堂用“隐式格式更稳定、步长更自由”突出两类方法的差异。严格地说,稳定性仍取决于具体方程、具体方法和步长;本课程不展开稳定域理论,也不能把“隐式”简单理解成在任何问题上都无条件稳定。
梯形公式#
由精确积分关系
y(xn+1)−y(xn)=∫xnxn+1f(x,y(x))dx,使用梯形公式:
∫xnxn+1f(x,y(x))dx≈2h[f(xn,yn)+f(xn+1,yn+1)].得到
yn+1=yn+2h[f(xn,yn)+f(xn+1,yn+1)]它同时利用区间左右端点的斜率,精度高于 Euler 法。
由于右端仍含 yn+1,梯形公式是隐式格式,一般需用 Newton 法或不动点迭代求解。
其局部截断误差为
O(h3).NOTE配图占位:插入手写 PPT 中“用梯形面积近似 ∫xnxn+1f(x,y(x))dx”的图,并与左矩形公式对照。
改进 Euler 法#
隐式梯形公式需要求解方程。改进 Euler 法先用向前 Euler 预测终点,再用起点和预测终点处的平均斜率校正。
yn+1=yn+hf(xn,yn)yn+1=yn+2h[f(xn,yn)+f(xn+1,yn+1)]将预测式代入校正式:
yn+1=yn+2h[f(xn,yn)+f(xn+h,yn+hf(xn,yn))].所有右端量均已知,因此它是显式格式。
直观上:
- 用起点斜率做一次 Euler 预测;
- 在预测终点计算新的斜率;
- 用起点斜率与终点预测斜率的平均值重新前进。
改进 Euler 法也称为 预测-校正法。它的局部截断误差为
O(h3),与隐式梯形公式具有相同的局部精度阶,但不需要在每一步解非线性方程。
需要注意:它仍是显式方法,步长仍可能受到稳定性约束。
单步法与多步法#
单步法#
若已知 yn,便能通过某种计算得到 yn+1,称为单步法。
一般形式为
yn+1=yn+hΦ(xn,yn,h).本章课堂涉及的以下方法均是单步法:
- 向前 Euler 法
- 向后 Euler 法
- 梯形公式
- 改进 Euler 法
- 四阶 Runge-Kutta 法
四阶 Runge-Kutta 法虽然包含 K1,K2,K3,K4,这些只是当前一步内部的中间量;计算 yn+1 时仍只需要前一个节点的 yn,所以它仍是单步法。
多步法#
若计算 yn+1 必须同时使用
yn,yn−1,…,yn−k+1,则称为 k 步法。
多步法需要多个起始值,因此通常先用单步法计算前几个节点。教材 §9.4 中的 Adams、Milne、Hamming 方法属于这一类,但课堂未讲具体公式,本课程考试不要求。
局部截断误差#
考虑一般单步格式
yn+1=yn+hΦ(xn,yn,h).假设在第 n 步输入的是精确值 y(xn),只使用该格式推进一步。格式给出的结果为
y(xn)+hΦ(xn,y(xn),h).它与下一节点精确值 y(xn+1) 的差定义为局部截断误差:
Rn+1=y(xn+1)−[y(xn)+hΦ(xn,y(xn),h)]含义是:
假设此前没有任何误差,只考察该格式在当前一步新产生了多少误差。
因此,局部截断误差衡量的是格式本身的一步精度,不包含前面各步误差的累积。
不同教材可能采用相反的正负号定义;判断误差阶时不受影响。
向前 Euler 法的局部截断误差#
向前 Euler 格式为
yn+1=yn+hf(xn,yn).于是
Rn+1=y(xn+1)−y(xn)−hf(xn,y(xn))=y(xn+h)−y(xn)−hy′(xn).在 xn 处对 y(xn+h) 作 Taylor 展开:
y(xn+h)=y(xn)+hy′(xn)+2h2y′′(ξn),其中
ξn∈(xn,xn+1).代入后,前两项相消:
Rn+1=2h2y′′(ξn)=O(h2)因此:
- 向前 Euler 法的局部截断误差为 O(h2)
- 向前 Euler 法是一阶方法
这里“一阶方法”描述的是整体误差通常为 O(h),不应与局部截断误差的 O(h2) 混淆。
局部误差与整体误差#
局部截断误差#
- 假设当前节点值精确
- 只考察一步新产生的误差
- 向前 Euler:O(h2)
整体误差#
定义为
en=y(xn)−yn.它包含:
- 当前一步产生的新误差
- 前面各步误差传播和积累的结果
在适当光滑性和稳定性条件下,区间长度固定时需要约 N∼1/h 步,因此向前 Euler 的 O(h2) 局部误差累积后,整体误差通常为
O(h).Taylor 展开是本课程中估计局部截断误差的核心工具。
经典四阶 Runge-Kutta 法#
计算格式#
经典四阶 Runge-Kutta 法简称 RK4:
yn+1=yn+6h(K1+2K2+2K3+K4)其中
K1K2K3K4=f(xn,yn),=f(xn+2h,yn+2hK1),=f(xn+2h,yn+2hK2),=f(xn+h,yn+hK3).四个斜率分别对应:
- 区间起点
- 由 K1 预测的中点
- 由 K2 再次预测的中点
- 由 K3 预测的终点
最后按权重
1:2:2:1取加权平均。
RK4 的性质:
- 显式方法
- 单步法
- 每一步计算四次 f
- 局部截断误差为 O(h5)
- 整体误差通常为 O(h4)
- 在稳定性允许时,是工程计算中非常常用的方法
课堂例题:计算一步 RK4#
求
{y′=x−y,y(0)=0,取
h=0.1.计算 y(0.1) 的近似值。
这里
f(x,y)=x−y,x0=0,y0=0.计算 K1#
K1=f(0,0)=0.计算 K2#
K2=f(0.05,0+0.05K1)=f(0.05,0)=0.05.计算 K3#
K3=f(0.05,0+0.05K2)=f(0.05,0.0025)=0.0475.计算 K4#
K4=f(0.1,0+0.1K3)=f(0.1,0.00475)=0.09525.计算 y1#
y1=0+60.1(0+2×0.05+2×0.0475+0.09525)=0.0048375.因此
y(0.1)≈0.0048375.该方程精确解为
y(x)=x−1+e−x,故
y(0.1)≈0.004837418,一步 RK4 的误差约为 8.2×10−8。
课堂要求理解 RK4 公式的代入顺序,但教师明确说明本次考试不考 RK4。
步长、误差与稳定性#
步长 h 同时影响精度、稳定性和计算量。
步长减小#
通常有:
N=hb−a增大
因此,h 不能只按“越小越好”理解。
精度问题与稳定性问题#
两者的表现不同:
- 精度不足:结果仍大体跟随真解,但偏差较大
- 数值不稳定:结果可能迅速发散到极大值,或正负剧烈振荡
如果计算结果直接“爆掉”,通常已经超出单纯精度不足的范畴。
显式与隐式的实际选择#
- 显式格式能稳定计算,且精度满足要求时,通常优先使用显式格式
- 若显式格式必须取极小步长,导致总计算量过大,可考虑隐式格式
- 隐式格式每一步需要解方程,但可通过较大的步长减少总步数
本课程只要求掌握这一逻辑,不要求计算稳定域或证明稳定性定理。
方法比较#
| 方法 | 形式 | 单步 / 多步 | 每步主要工作 | 局部截断误差 | 整体阶数 |
|---|
| 向前 Euler | 显式 | 单步 | 1 次函数求值 | O(h2) | 1 阶 |
| 向后 Euler | 隐式 | 单步 | 解代数方程 | O(h2) | 1 阶 |
| 梯形公式 | 隐式 | 单步 | 解代数方程 | O(h3) | 2 阶 |
| 改进 Euler | 显式 | 单步 | 2 次函数求值 | O(h3) | 2 阶 |
| 经典 RK4 | 显式 | 单步 | 4 次函数求值 | O(h5) | 4 阶 |
记忆主线:
- 向前 Euler:用起点斜率
- 向后 Euler:用终点斜率
- 梯形公式:平均起点和真实终点斜率
- 改进 Euler:平均起点和预测终点斜率
- RK4:综合起点、两个中点和终点的四个斜率
考试与复习要求#
必须掌握#
- 初值问题的离散记号:
xn=a+nh,yn≈y(xn).
- 向前 Euler 公式:
yn+1=yn+hf(xn,yn).
- 向后 Euler 公式:
yn+1=yn+hf(xn+1,yn+1).
-
判断显式格式与隐式格式。
-
根据给定初值,手算 Euler 法连续两步。
-
将向后 Euler 写成方程,并在需要时使用 Newton 法求 yn+1。
-
说清局部截断误差的含义:
假设当前节点值精确,仅使用格式推进一步时产生的误差。
- 用 Taylor 展开推出向前 Euler 的局部截断误差:
Rn+1=2h2y′′(ξn)=O(h2).
- 区分:
- 局部截断误差 O(h2)
- Euler 方法整体一阶,整体误差通常为 O(h)
了解即可#
- 梯形公式
- 改进 Euler / 预测-校正法
- 单步法与多步法的概念
- 经典四阶 Runge-Kutta 法的计算流程
- 显式与隐式方法的稳定性差异
本课程不要求#
- RK4 考试计算
- Adams、Milne、Hamming 等线性多步公式
- 相容性、收敛性和稳定性的完整理论证明
- 稳定域计算
- 编程题