3. 有限差分逼近

有限差分方法的核心思想,是用网格节点上的函数值组合来近似导数。要真正用好它,必须同时回答三个问题:用哪几个点、按什么公式组合、误差有多大。本节围绕一阶导数与二阶导数的向前、向后、中心差分格式展开,并通过泰勒展开给出截断误差的定量表达,最后说明如何用数值实验验证精度阶数。

一、统一约定与泰勒展开基础

设函数 u(x) 在区间上足够光滑,取均匀网格 xi = x0 + iΔx,记 ui = u(xi),步长 h = Δx > 0。全文约定:向前差分沿 +x 方向取点,向后差分沿 −x 方向取点,中心差分关于 xi 对称取点。所有误差分析均以节点 xi 处的精确导数为参照。

泰勒展开是推导一切差分格式的统一工具:

u(x_i + h) = u_i + h·u'_i + h²/2·u''_i + h³/6·u'''_i + h⁴/24·u''''_i + O(h⁵)
u(x_i − h) = u_i − h·u'_i + h²/2·u''_i − h³/6·u'''_i + h⁴/24·u''''_i + O(h⁵)

把这两个式子做加、减、移项,就能系统性地得到下面所有格式,而不必死记硬背。

二、一阶导数的三种差分格式

向前差分(一阶精度)。由 u(xi+h) 的展开式移项得

u'_i ≈ (u_{i+1} − u_i) / h,   截断误差 = −h/2·u''_i + O(h²)

误差主项与 h 成正比,故为一阶精度,记作 O(h)。它只需当前点和右邻点,适合在右边界处使用(因为边界外没有节点)。

向后差分(一阶精度)。由 u(xi−h) 的展开式移项得

u'_i ≈ (u_i − u_{i−1}) / h,   截断误差 = +h/2·u''_i + O(h²)

同样是一阶精度,但误差主项符号与向前差分相反。它只需当前点和左邻点,适合在左边界处使用。

中心差分(二阶精度)。将两式相减,ui 与 u''i 项抵消:

u'_i ≈ (u_{i+1} − u_{i−1}) / (2h),   截断误差 = −h²/6·u'''_i + O(h⁴)

误差主项为 O(h²),是二阶精度。注意它跳过了 ui 本身,只用到左右两个邻点,因此在内部节点上通常优先选用。代价是不能直接用于边界,且对高频振荡(奇偶失联)较敏感。

三、二阶导数的三种差分格式

中心差分(二阶精度,最常用)。将两式相加,u'i 项抵消:

u''_i ≈ (u_{i+1} − 2u_i + u_{i−1}) / h²,   截断误差 = −h²/12·u''''_i + O(h⁴)

这是泊松方程、热传导方程离散的基石,模板为 [1, −2, 1]/h²。

向前与向后二阶差分(一阶精度)。用三个相邻点构造:

向前: u''_i ≈ (u_{i+2} − 2u_{i+1} + u_i) / h²,   误差 = −h·u'''_i + O(h²)
向后: u''_i ≈ (u_i − 2u_{i−1} + u_{i−2}) / h²,   误差 = +h·u'''_i + O(h²)

它们只用于边界附近(例如需要保持三点模板一致性时),精度比中心格式低一阶。

四、格式对比与选用原则

导数格式差分表达式截断误差主项精度阶典型用途
一阶向前(ui+1−ui)/h−h/2·u''1右边界、迎风格式
一阶向后(ui−ui−1)/h+h/2·u''1左边界、迎风格式
一阶中心(ui+1−ui−1)/(2h)−h²/6·u'''2内部节点
二阶中心(ui+1−2ui+ui−1)/h²−h²/12·u''''2内部节点、椭圆型方程
二阶向前/向后三点单侧模板∓h·u'''1边界附近

选用原则可归纳为:内部节点优先中心格式(同阶精度下模板更紧凑、误差更小);边界节点只能用单侧格式,此时要么接受一阶精度,要么用高阶单侧模板补偿;对流主导问题中,中心差分可能产生非物理振荡,需改用迎风(向前/向后)格式以换取稳定性。

差分模板与截断误差:节点取点方式对比 x(i−2) x(i−1) x(i) x(i+1) x(i+2) 一阶·向前 误差 −h/2·u'' → O(h) 一阶·向后 误差 +h/2·u'' → O(h) 一阶·中心 误差 −h²/6·u''' → O(h²) 二阶·中心 误差 −h²/12·u'''' → O(h²)

五、精度阶数的数值验证方法

理论阶数必须能被数值实验证实,否则说明实现有误(如步长写错、索引越界、边界处理不一致)。验证流程如下:

  1. 选一个解析导数已知的测试函数,例如 u(x) = sin(x),在 x0 = 1.0 处 u′ = cos(1) ≈ 0.540302,u″ = −sin(1) ≈ −0.841471。
  2. 取一系列逐步减半的步长,如 h = 0.1, 0.05, 0.025, 0.0125。
  3. 计算每个步长下的绝对误差 e(h) = |差分值 − 解析值|。
  4. 用相邻两次误差之比估计阶数:p ≈ log₂(e(h)/e(h/2))。若 p 稳定趋近 1 或 2,则与理论一致。

以中心差分近似 u′(1) 为例,一组示例性计算结果如下(数值由公式直接计算,用于说明趋势):

h中心差分值绝对误差 e(h)误差比 e(h)/e(h/2)估计阶 p
0.10.5398814.21×10⁻⁴——
0.050.5401971.05×10⁻⁴4.002.00
0.0250.5402762.63×10⁻⁵4.002.00
0.01250.5402966.58×10⁻⁶4.002.00

误差每减半步长缩小约 4 倍,估计阶 p ≈ 2,与 O(h²) 的理论结论吻合。若改用向前差分做同样实验,误差比应趋近 2、估计阶趋近 1。这种“减半步长看误差比”的做法,是检验差分程序正确性最直接的手段。

注意:当 h 继续减小到约 10⁻⁸ 量级时,舍入误差开始主导,误差不再按理论阶下降,甚至反弹。验证阶数应选择误差处于“截断误差主导区”的步长范围,通常取 h 在 10⁻²~10⁻⁴ 之间较稳妥。

六、实践中的两个关键细节

其一,边界处理要与内部格式匹配。若内部用二阶中心格式而边界用一阶单侧格式,整体精度会被边界拉低到一阶。常见补救是引入虚拟节点(ghost node),利用边界条件反推出 u−1,从而在边界也使用中心模板,保持全局二阶精度。

其二,误差主项系数决定实际误差大小。同为二阶格式,一阶导数中心差分的误差系数是 1/6,二阶导数中心差分是 1/12,二者相差一倍;而向前、向后一阶导数的系数是 1/2。在相同步长下,系数越小误差越小,这也是中心格式在内部节点更受青睐的定量依据。

小结:记住三条主线——向前/向后差分是一阶精度、中心差分是二阶精度;一阶导数中心格式跳过当前点、二阶导数中心格式包含当前点;精度阶数必须通过“步长减半、误差比取对数”的数值实验来验证,而不是仅凭公式断言。