4. 正问题求解器设计

正问题求解器是反问题迭代框架的“内循环引擎”。在反问题中,每更新一次模型参数,都要调用正问题求解器算出一组预测数据;这个内循环可能被执行几十到几百次,因此求解器的效率、精度和鲁棒性直接决定整个反问题流程是否可行。本节围绕三个相互耦合的设计维度展开:线性/非线性求解器的选择、时间推进格式的构造,以及稳定性与收敛性的定量分析。

一、离散之后:线性与非线性求解器的分工

正问题经过空间离散后,通常得到两类系统。若控制方程本身线性(如稳态热传导、线性弹性静力学),离散后直接得到线性代数方程组 A u = b;若方程含非线性项(材料非线性、几何非线性、对流项、辐射边界),则得到非线性残差方程 R(u) = 0,需要在外层套一个非线性迭代,内层再反复求解线性化系统。

线性求解器的选择取决于矩阵结构。以二维稳态热传导为例,采用五点差分格式离散后,A 是稀疏、对称正定、带宽约为 nx 的矩阵。此时共轭梯度法(CG)配合不完全 Cholesky 预条件(IC(0))是合理起点;若问题规模达到 10^6 量级且条件数偏高,可换用代数多重网格(AMG)预条件,迭代次数往往能压到 10 次以内。对于含对流项的方程,离散矩阵失去对称性,应改用 GMRES 或 BiCGSTAB,并配合 ILU 预条件。

非线性求解器的主流选择是 Newton 类方法。以 Picard 迭代与 Newton 迭代对比:Picard 迭代把非线性系数“滞后一步”处理,每次只需组装线性系统,实现简单但收敛常为线性,对强非线性问题可能极慢甚至发散;Newton 迭代组装雅可比矩阵 J = ∂R/∂u,具有局部二次收敛性,但每次迭代成本更高,且对初值敏感。工程上常用折中方案:先用几步 Picard 迭代“暖启动”,再切换到 Newton,并配合阻尼或线搜索防止残差振荡。

判断非线性迭代是否“真的在收敛”,不能只看残差绝对值,而应同时观察残差下降率 ρ_k = ||R_k|| / ||R_{k-1}||。Newton 迭代进入二次收敛区后 ρ_k 会迅速趋近于 0;若 ρ_k 长期在 0.5~0.9 徘徊,说明当前线性化或阻尼策略不合适。

二、时间推进格式:精度、稳定性与耗散的三方权衡

瞬态正问题需要选择时间推进格式。显式格式(如前向 Euler、显式 Runge–Kutta)每步只做向量运算,无需解线性系统,但受 CFL 条件约束:Δt ≤ C·Δx / |a|(a 为特征速度或扩散系数对应的限制)。隐式格式(如后向 Euler、Crank–Nicolson、BDF2)无条件稳定,但每步需解一个线性系统。

格式选择要结合物理特性。纯扩散问题(如热传导)中,显式格式的时间步受 Δt ≤ Δx²/(2α) 限制,网格加密一倍,步长要缩小四倍,代价急剧上升,因此通常选隐式。对流主导问题中,显式格式配合小 CFL 数能较好捕捉波形,但若用中心差分加显式推进,色散误差会引起非物理振荡,此时可换用迎风格式或加入人工耗散。Crank–Nicolson 格式二阶精度且无条件稳定,但对刚性初始条件或陡峭梯度会产生长时间不衰减的振荡,实践中常采用“起始几步用后向 Euler、之后转 Crank–Nicolson”的混合策略。

下面这张图把本节三个设计维度组织成一条完整的求解器装配链:从方程类型判断出发,分别进入线性/非线性求解分支,再汇入时间推进格式选择,最终由稳定性与收敛性判据决定是否接受结果或回退调整。

正问题求解器装配链:方程类型 → 求解分支 → 时间推进 → 收敛判据 离散后方程类型判断 线性 / 非线性 · 稳态 / 瞬态 线性求解分支 对称正定 → CG + IC(0) / AMG 非对称 → GMRES / BiCGSTAB + ILU 关注:条件数、预条件质量 判据:相对残差 < 1e-8 示例:五点差分热传导 nx=512 非线性求解分支 Picard:线性收敛,实现简单 Newton:二次收敛,需雅可比 策略:Picard 暖启动 → Newton 判据:残差下降率 ρ_k 趋近 0 示例:辐射边界 T⁴ 非线性项 时间推进格式选择(瞬态问题) 显式:前向 Euler / 显式 RK — 受 CFL 约束 Δt ≤ C·Δx/|a| 隐式:后向 Euler / BDF2 — 无条件稳定,每步解线性系统 Crank–Nicolson:二阶精度,陡峭初值需混合启动策略 稳定性与收敛性联合判据 残差达标 ∧ 下降率正常 ∧ 无数值振荡 → 接受结果 不满足:回退调整 预条件 / 阻尼 / 步长

三、稳定性与收敛性:从观察到定量判据

稳定性分析分两个层面。时间格式层面,可用 von Neumann 方法对线性化模型做 Fourier 模态分析:把解写成 u_j^n = g^n e^{i k j Δx},代入格式得到放大因子 g(k),要求对所有波数 |g| ≤ 1。例如一维对流方程用显式迎风格式,可得 |g|² = 1 - 4ν(1-ν)sin²(kΔx/2),其中 ν = aΔt/Δx,由此推出 CFL 条件 0 ≤ ν ≤ 1。空间离散层面,则要检查网格 Peclet 数 Pe = |a|Δx/α,当 Pe > 2 时中心差分会产生非物理振荡,需改用迎风或加人工耗散。

收敛性分析要区分“迭代收敛”和“离散收敛”。迭代收敛看残差序列是否单调下降并达到容差;离散收敛则要做网格加密研究:取 Δx, Δx/2, Δx/4 三套网格,计算相邻两套解的差异比,若比值接近 2(一阶格式)或 4(二阶格式),说明进入渐近收敛区,可用 Richardson 外推估计离散误差。这一步在反问题中尤其重要——若正问题本身离散误差未受控,反演得到的参数误差会被误判为模型误差。

四、一个可执行的参数配置示例

以二维瞬态热传导正问题为例(ρc ∂T/∂t = ∇·(k∇T) + q,含温度相关导热系数 k(T)),给出一个可参考的求解器配置:

空间离散:五点差分,nx=ny=256,Δx=Δy=1e-3 m
时间推进:BDF2,Δt=0.5 s,总时长 60 s
非线性:Picard 迭代 3 步暖启动 → Newton,阻尼因子 0.8
线性求解:CG + IC(0),相对残差容差 1e-9,最大迭代 500
非线性收敛判据:||R_k||/||R_0|| < 1e-6 且 ρ_k < 0.1
稳定性检查:网格 Pe 数 < 2;监测点温度无高频振荡

运行后应观察三类信号:线性求解的迭代次数是否稳定在合理区间(若逐次上升,说明预条件退化);非线性残差下降率是否在 4~6 步后明显加速;监测点温度曲线是否光滑。若出现残差停滞,优先检查雅可比矩阵是否用了过时的近似、阻尼因子是否过大;若出现温度振荡,则回到空间离散检查 Pe 数或时间步长。这套“配置—观察—回退”的闭环,正是正问题求解器设计从纸面走向可用的关键。