高阶差分算子
约 2163 字大约 7 分钟
2026-04-14
Taylor 算子
高阶算子的核心思想:通过引入更宽模板(更长的算子长度),利用更多邻域节点的函数值加权组合来逼近导数,使截断误差降至 O(hp)(p>2),从而在相同网格步长下获得更高精度,或在相同精度下放宽空间采样准则。
设函数 f(x) 在 x 处充分光滑,其在相邻节点 x+jΔx 处的 Taylor 展开为:
f(x+jΔx)=n=0∑∞n!(jΔx)nf(n)(x)
构造线性组合逼近 m 阶导数:
f(m)(x)≈(Δx)m1j=−L∑Rwj(m)f(x+jΔx)
其中 wj(m) 为待定权重系数,L、R 分别为左侧与右侧模板长度。将展开式代入并比较同阶导数项系数,可建立关于 wj(m) 的线性方程组。
双侧算子
考虑模板 {x−2h,x−h,x+h,x+2h},设逼近形式:
af(x−2h)+bf(x−h)+cf(x+h)+df(x+2h)≈f(m)(x)
将各点 Taylor 展开至四阶并求和,按 f,f′,f′′,f′′′,f(4) 分组整理,要求:
- f 项系数为 0(m>0 时)或 1(m=0 插值时)
- f(m) 项系数为 (Δx)m
- 其余低阶项系数为 0
插值(m=0)方程组:
⎩⎨⎧a+b+c+d=1−2a−b+c+2d=04a+b+c+4d=0−8a−b+c+8d=0⇒abcd=1/6−2/32/3−1/6
一阶导数(m=1)方程组:
⎩⎨⎧a+b+c+d=0−2a−b+c+2d=1/Δx4a+b+c+4d=0−8a−b+c+8d=0⇒abcd=Δx11/12−2/32/3−1/12
二阶导数(m=2)需 5 点模板 {x−2h,x−h,x,x+h,x+2h},类似推导得:
f′′(x)≈12(Δx)21[−fi−2+16fi−1−30fi+16fi+1−fi+2]+O(h4)
单侧算子
在计算域边界处,无法使用双侧模板,需构造单侧差分格式。以右侧边界为例,模板 {x,x+h,x+2h,x+3h} 逼近一阶导数:
方程组:
⎩⎨⎧a+b+c+d=00a+1b+2c+3d=1/Δx0a+1b+4c+9d=00a+1b+8c+27d=0⇒abcd=Δx1−11/63−3/21/3
单侧算子特性:
- 权重系数绝对值随模板长度增加而迅速增大,易引入数值振荡
- 精度阶数受限于模板长度,p 点单侧模板最高可达 O(hp−1)
- 实际应用中常采用"内侧高阶 + 边界低阶"的混合策略,或引入虚拟节点延拓
权重系数通用表达式(Fornberg, 1996)
对 2p 阶精度的双侧中心差分算子,一阶导数权重系数为:
wj(1)=⎩⎨⎧0,j⋅(p−j)!(p+j)!(−1)j+1(p!)2,j=0j=±1,±2,…,±p
该闭式表达便于编程实现任意阶数算子自动生成。
时间域高阶外推
空间精度提升后,时间离散误差可能成为主导。本节介绍三类时间高阶外推方法。
高阶 Taylor 外推(以声波方程为例)
考虑二维声波方程:
∂t2∂2P=c2(∂x2∂2P+∂z2∂2P)
在时间层 tn 处对 P(tn+Δt) 作 Taylor 展开:
Pn+1=Pn+ΔtP˙n+2!(Δt)2P¨n+3!(Δt)3P...n+⋯
关键观察:波动方程中时间奇阶导数可由空间导数递推表示:
P¨=c2∇2P,P...=c2∇2P˙,P(4)=c4∇4P,…
因此高阶时间外推格式可写为:
Pn+1=2Pn−Pn−1+k=1∑N(2k)!2(Δt)2kc2k∇2kPn
实现要点:
- 仅需存储两个时间层数据,内存开销低
- 空间高阶导数 ∇2kP 可通过重复应用空间差分算子计算
- 稳定性条件随阶数提高而更严格,需联合优化 Δt 与 h
预估 - 校正法(Predictor-Corrector)
以一阶方程 ∂T/∂t=f(T,t) 为例,修正的 Euler 方法包含两步:
预估步(显式 Euler):
T∗=Tn+Δt⋅f(Tn,tn)
校正步(隐式 Euler 线性化):
Tn+1=Tn+2Δt[f(Tn,tn)+f(T∗,tn+1)]
特性分析:
- 截断误差 O(Δt2),精度高于纯显式/隐式 Euler
- 稳定性区域与显式 Euler 相同,但数值耗散更小
- 每步需两次函数评估,计算成本约为显式的 2 倍
Runge-Kutta 方法
龙格-库塔(Runge-Kutta, R-K)方法是一类通过计算多个中间斜率并进行线性组合来构造高阶时间外推格式的显式积分方法。其核心思想是:在不直接计算微分方程右端函数高阶偏导数的前提下,通过对 f(T,t) 在不同中间点上的多次求值,使离散格式的 Taylor 展开与精确解的 Taylor 展开在尽可能高的阶数上匹配,从而提升时间积分精度。R-K 方法可视为通过多次斜率计算实现的“高级预估-校正”过程,完全显式,无需求解隐式方程组。
二阶 Runge-Kutta 方法
构造原理与系数匹配
考虑一阶常微分方程初值问题 dtdT=f(T,t)。设更新格式为两斜率线性组合:
Tj+1=Tj+ak1+bk2
其中 k1=f(Tj,tj)Δt,k2=f(Tj+αk1,tj+βΔt)Δt。将 k2 在 (Tj,tj) 处作二元 Taylor 展开至一阶,并与精确解 T(tj+1)=Tj+Δtf+2(Δt)2(ft+ffT)+O(Δt3) 对比同阶项系数,可得待定系数需满足的方程组:
a+b=1,bα=21,bβ=21
该方程组存在无穷多组解。采用一组经典解:a=0,b=1,α=21,β=21,得到二阶 R-K 格式(中点格式):
k1k2Tj+1=f(Tj,tj)Δt=f(Tj+21k1,tj+21Δt)Δt=Tj+k2
数值特性
- 精度:局部截断误差 O(Δt3),全局误差 O(Δt2),显著优于一阶显式 Euler 格式。
- 稳定性:绝对稳定区域为复平面上满足 1+z+2z2≤1 的区域(z=λΔt),实轴稳定区间为 [−2,0]。对衰减型问题要求 Δt≤2/∣λ∣。
- 物理意义:利用起点斜率预估中点状态,再以中点斜率推进整步长。在波场模拟中表现出优于简单 Euler 格式的相位保持特性,数值耗散较低。
四阶 Runge-Kutta 方法(经典格式)
为进一步提升精度并扩大稳定区域,引入四个中间斜率 k1,k2,k3,k4,通过加权平均构造四阶格式。其标准形式为:
k1k2k3k4Tj+1=f(Tj,tj)Δt=f(Tj+21k1,tj+21Δt)Δt=f(Tj+21k2,tj+21Δt)Δt=f(Tj+k3,tj+Δt)Δt=Tj+61(k1+2k2+2k3+k4)
算法实现步骤
- 计算起点斜率 k1:基于当前层 (Tj,tj) 的右端函数值。
- 第一次中点预估 k2:利用 k1/2 推进半步长,计算中点斜率。
- 第二次中点修正 k3:利用 k2/2 重新推进半步长,修正中点斜率,提高中点状态估计的可靠性。
- 终点预估 k4:利用 k3 推进全步长,计算终点斜率。
- 加权更新:以 1:2:2:1 的权重组合四个斜率,得到下一层解。该权重分配等效于 Simpson 积分公式,保证了四阶代数精度。
数值特性
- 精度:局部截断误差 O(Δt5),全局误差 O(Δt4)。无需显式计算高阶偏导数即可实现高阶精度,编程实现直观。
- 稳定性:绝对稳定区域显著扩大,实轴稳定区间约为 [−2.785,0]。允许在刚性较弱或中等刚性问题中采用更大时间步长,误差累积速度远低于低阶格式。
- 计算成本:每时间步需 4 次右端函数评估,内存开销极低(仅需存储当前层状态),易于与显式空间差分格式耦合。