3. 有限差分法基础与网格设计
有限差分法的核心思想非常朴素:用离散网格点上的函数值之差,去近似连续导数。要真正用好它,关键不在于记住某个公式,而在于搞清楚三件事——差分格式是怎么构造出来的、它近似得有多准(截断误差与相容性)、以及网格步长取多大才既算得动又算得对。本节围绕一维与二维差分格式的构造展开,并把截断误差、相容性和稳定性的初步概念串起来。
一、从泰勒展开构造差分格式
设未知函数 u(x) 在网格点 xi = i·h 上取值 ui,h 为网格步长。把 u(xi±h) 在 xi 处做泰勒展开:
u(x+h) = u + h·u' + h²/2·u'' + h³/6·u''' + O(h⁴)
u(x−h) = u − h·u' + h²/2·u'' − h³/6·u''' + O(h⁴)
两式相减,偶次项抵消,得到一阶导数的中心差分:
u'(x_i) ≈ (u_{i+1} − u_{i−1}) / (2h) + O(h²)
两式相加,奇次项抵消,得到二阶导数的中心差分:
u''(x_i) ≈ (u_{i+1} − 2u_i + u_{i−1}) / h² + O(h²)
若只用 ui+1 和 ui,则得到一阶向前差分 (ui+1−ui)/h,误差为 O(h)。可见同样近似一阶导数,中心差分比单侧差分高一阶精度,代价是要用到两侧邻居,边界处需要特殊处理。这就是差分格式构造的基本逻辑:选择哪些网格点、如何线性组合,决定了格式的精度阶和适用位置。
二、二维情形与五点格式
二维泊松方程 −∇²u = f 在矩形网格 (xi, yj) 上,对 x、y 方向分别用二阶中心差分,相加得到经典的五点差分格式:
(4u_{i,j} − u_{i+1,j} − u_{i−1,j} − u_{i,j+1} − u_{i,j−1}) / h² = f_{i,j}
这里假设 x、y 方向步长相同为 h。若两方向步长分别为 hx、hy,则系数变为 2/hx²+2/hy² 与各自的 1/h² 权重。五点格式的每个未知量只与上下左右四个邻居耦合,形成稀疏带状线性系统,这正是它被广泛采用的原因。下图展示了一维三点模板与二维五点模板的网格依赖关系,以及边界点需要单侧格式的情形。
三、截断误差与相容性
把精确解代入差分方程,得到的残差就是局部截断误差。例如对 u'' 的中心差分,截断误差主项为 −h²/12·u''''(xi),故记为 O(h²)。若当 h→0 时截断误差趋于零,则称格式与微分方程相容。相容性只说明格式在极限意义下逼近原方程,是格式可用的必要条件,但不保证数值解收敛——还需要稳定性配合(Lax 等价定理:相容+稳定 ⟺ 收敛)。
工程上判断相容性很直接:写出截断误差表达式,看 h 的最高次幂是否为正。若格式设计有误(如系数配错),截断误差可能为 O(1),即无论网格多细都不收敛,这类错误必须在编码前通过推导排除。
四、网格步长选择与稳定性初步
步长 h 的选择是精度与计算量的折中。对二阶格式,误差 ∝ h²,h 减半误差降为 1/4,但二维未知量增为 4 倍、三维增为 8 倍。实际做法是先做网格收敛性检查:取 h、h/2、h/4 三套网格计算同一问题,观察误差比是否接近 4(二阶收敛),若偏离则说明格式或边界处理有问题。
对含时间的问题(如热传导 ut=αuxx),显式格式的稳定性给出硬约束。以 FTCS 格式为例:
u_i^{n+1} = u_i^n + α·Δt/h² · (u_{i+1}^n − 2u_i^n + u_{i−1}^n)
令 r = α·Δt/h²,稳定性要求 r ≤ 1/2,即 Δt ≤ h²/(2α)。这说明空间网格越细,时间步长必须按平方缩小,计算代价急剧上升——这正是隐式格式被引入的动机。二维显式格式则要求 r ≤ 1/4。下表给出一个教学示例中的参数选择参考(示例参数,非实测):
| 参数 | 取值示例 | 约束/说明 |
|---|---|---|
| 空间步长 h | 0.05 | 由精度需求与网格收敛检查确定 |
| 时间步长 Δt | 0.001 | 显式格式需满足 Δt ≤ h²/(2α) |
| 扩散系数 α | 1.0 | 示例假设值 |
| 网格比 r | 0.4 | r ≤ 0.5 满足一维稳定性 |
需要强调的是,稳定性分析给出的是必要条件或充分条件,具体取决于格式。对初学者,最实用的做法是:先用解析解或制造解(method of manufactured solutions)验证代码的空间收敛阶,再检查时间步长是否落在稳定域内,两者都通过后,数值结果才具备可信度。