2. PDE数值方法误差来源剖析

在收敛性验证中,最容易犯的错误是把“网格加密后结果变化变小”直接等同于“方法收敛”。实际上,数值解与真解之间的偏差由多个环节叠加而成,不同误差项随网格尺度 h、时间步长 Δt、迭代容差 tol 的变化速率完全不同。若不拆开来源,收敛阶的测量结果可能被某一项污染,甚至出现“越加密越不准”的假象。本节以有限差分(FDM)、有限元(FEM)、有限体积(FVM)三类方法为对象,逐一拆解截断误差、离散误差、迭代误差与舍入误差的产生环节,并说明它们在收敛性验证中的角色。

四类误差的产生环节

截断误差来自对连续算子的近似。以二阶中心差分逼近一维泊松方程 -u''=f 为例,由泰勒展开有

u''(x_i) = [u(x_{i+1}) - 2u(x_i) + u(x_{i-1})]/h² - (h²/12)u⁗(ξ)

截断误差 τ_i = -(h²/12)u⁗(ξ) = O(h²)

它只与格式本身和真解的光滑性有关,与网格数量、求解方式无关。有限元的截断误差体现在形函数空间对真解的逼近能力上,其先验估计通常写作 ‖u-u_h‖ ≤ C h^p |u|_{H^{p+1}};有限体积的截断误差则来自界面通量的重构精度,例如一阶迎风重构为 O(h),MUSCL 二阶重构为 O(h²)。截断误差决定了方法的理论收敛阶,是收敛性验证中要对照的“标尺”。

离散误差是离散方程精确解与连续真解之差,即 e_h = u_h - u。它由截断误差经离散算子逆传播而来,量级通常与截断误差同阶,但常数受网格质量、单元畸变、系数跳变影响。有限元中若网格存在大长宽比单元,或有限体积中界面法向与网格连线不共线,离散误差常数会显著放大,导致实测阶数低于理论阶数。收敛性验证真正测量的是离散误差的衰减率,因此必须保证其它误差项足够小。

迭代误差出现在离散方程组求解阶段。无论是 FDM 的稀疏线性系统、FEM 的刚度方程 Ku=f,还是 FVM 隐式格式形成的非线性系统,迭代求解都会留下残差。若以相对残差 ‖r_k‖/‖r_0‖ ≤ tol 作为停机准则,迭代误差大致与 tol 同量级。危险在于:当网格加密使离散误差降到 10⁻⁶ 量级,而迭代容差仍取 10⁻⁴,实测误差将被迭代误差主导,收敛阶曲线出现平台甚至抖动。

舍入误差源于浮点运算的有限字长,量级约为 ε·κ(A),其中 ε≈2.2×10⁻¹⁶(双精度),κ(A) 为离散矩阵条件数。FDM 与 FEM 的刚度矩阵条件数通常按 O(h⁻²) 增长,FVM 在强非正交网格上更差。当 h 小到一定程度,舍入误差会超过离散误差,误差曲线触底反弹——这正是收敛性验证中“网格不能无限加密”的根本原因。

PDE数值方法误差来源与传播链 有限差分 FDM 泰勒展开近似导数算子 有限元 FEM 形函数空间逼近弱解 有限体积 FVM 界面通量重构与守恒 ① 截断误差 τ FDM: O(h²) 中心差分 | FEM: O(h^p) 形函数阶 | FVM: O(h) 一阶迎风 / O(h²) MUSCL 决定理论收敛阶,与网格数量、求解方式无关 ② 离散误差 e_h = u_h − u 截断误差经离散算子逆传播;受网格质量、单元畸变、系数跳变放大 收敛性验证真正测量的对象,需保证其它误差项足够小 ③ 迭代误差 线性/非线性求解残差,量级 ≈ 停机容差 tol;网格加密后可能主导实测误差 需随 h 减小同步收紧 tol,否则收敛阶曲线出现平台 ④ 舍入误差 ≈ ε·κ(A),ε≈2.2×10⁻¹⁶;κ(A) 随 h⁻² 增长,FVM 强非正交网格更差 误差曲线触底反弹的根源,限制网格加密下限

各类误差在收敛性验证中的角色

把四类误差放到同一条误差-网格尺度曲线上,角色分工就清楚了。截断误差提供理论斜率,是判断实测阶数是否合理的参照;离散误差是待测量,其对数斜率即观测收敛阶;迭代误差是噪声底,必须压到离散误差以下至少一个数量级;舍入误差是物理下限,决定网格加密的终止点。

以二维泊松方程为例,设真解取 u=sin(πx)sin(πy),右端项 f=2π²sin(πx)sin(πy),区域为单位正方形,采用五点差分格式。取 h=1/8,1/16,1/32,1/64 四套网格,用共轭梯度法求解,停机准则设为 ‖r_k‖₂/‖r_0‖₂ ≤ 10⁻¹²。计算离散 L² 误差后做对数拟合,若得到斜率约 -2.0,与 O(h²) 理论一致,说明离散误差主导、迭代误差已被压住。若把容差放宽到 10⁻⁴,在 h=1/64 时离散误差约 10⁻⁴ 量级,两者相当,拟合斜率会明显偏离 -2。这一对比正是收敛性验证中“先控噪声、再测斜率”的操作依据。

有限元的情形类似,但需注意 L² 范数与 H¹ 半范数的收敛阶不同:对 P1 单元,L² 为 O(h²),H¹ 为 O(h)。验证时应明确所测范数,否则会把范数差异误判为方法失效。有限体积在结构网格上对光滑解可获二阶精度,但在非结构网格上,若界面重构未做梯度修正,实测阶数常降至一阶附近,此时应先排查重构格式而非怀疑收敛性结论。

收敛性验证的实用顺序:先固定 tol 做一次粗网格试算,估计离散误差量级;再把 tol 设为该量级的 10⁻² 以下;最后在至少三套网格上测量斜率。若斜率随网格加密持续下降,优先怀疑迭代容差未同步收紧或舍入误差触底。

误差预算的实操判断

工程中可用一个简单的误差预算表来定位主导项。对每套网格记录离散误差估计 e_h、迭代残差 r、条件数估计 κ,并计算 ε·κ。若 r 与 e_h 同量级,说明迭代误差污染;若 ε·κ 接近 e_h,说明已接近舍入下限,继续加密无意义。下表给出示例量级(数值为教学假设,非实测):

网格 h离散误差 e_h迭代残差 rε·κ 估计判断
1/16≈4×10⁻³1×10⁻¹²≈10⁻¹²离散主导,可测阶
1/32≈1×10⁻³1×10⁻¹²≈4×10⁻¹²离散主导,可测阶
1/64≈2.5×10⁻⁴1×10⁻⁴≈1.6×10⁻¹¹迭代污染,需收紧 tol
1/128≈6×10⁻⁵1×10⁻⁶≈6×10⁻¹¹接近舍入底,谨慎解读

需要强调,截断误差与离散误差并非独立的两项,前者是后者的来源,后者是前者的可观测表现。收敛性验证中真正要控制的是迭代误差与舍入误差这两个“非格式误差”,使观测斜率忠实反映格式的理论阶。对 FDM、FEM、FVM 而言,这一原则一致,差别只在截断误差的具体表达式、离散误差的常数放大机制以及条件数的增长方式。把四类误差分开估计、分别控制,收敛性验证的结论才具备可复现性和说服力。