导读:Anderson 第 4 章用 Burgers 方程演示「同一方程、不同格式、完全不同的命运」。本篇给出两条实现路线与它们的失败方式。
显式路线:简单与苛刻的时间步
显式格式把下一时刻直接由当前值算出:$u_i^{n+1} = u_i^n - \frac{c\Delta t}{\Delta x}(u_{i+1}^n - u_i^n)$。实现只需两层循环,但稳定性被 CFL 条件锁死:$c\Delta t/\Delta x \le 1$。
练习方式:故意把 CFL 取到 1.1,观察解在几十步内振荡爆炸——这个「亲手炸掉」的经验比背十遍稳定性条件都有用。
隐式路线:三对角方程组
隐式格式把空间项写在 $n+1$ 层,得到三对角方程组,用 Thomas 算法 $O(N)$ 求解。时间步不再受 CFL 限制,代价是每步要多解一个线性系统,且时间精度仍受截断误差约束。
工程判断:波传播类问题用显式(要精度),含刚性源项或大时间尺度问题用隐式(要稳定)。
边界条件的埋伏
数值解的边界必须与物理边界匹配:入流给定、出流外推。Anderson 指出大量「格式不收敛」的案例,元凶其实是边界条件处理不当——差分格式在最靠边的网格点缺少邻居,需要单侧格式或ghost cell。
常见误区
- 显式格式炸了就怀疑代码:先检查 CFL,再检查边界。
- 隐式格式无条件稳定 ≠ 无条件精确:时间步过大时仍会得到「稳定的错误解」。
吃透自检
- 能独立写出两种格式的完整代码并复现标准算例
- 能解释 CFL 数的几何含义(波在一个时间步内走过的网格数)
- 能诊断边界条件引起的伪振荡