一根导热杆对应一条完整计算链
考虑长度 L=1m 的细杆,杆端维持零温差。令
u(x,t) 表示相对环境的温差,单位为开尔文,热扩散率取
κ=0.1m2/s。模型为
ut=κuxx+s(x,t),0<x<L,
u(0,t)=u(L,t)=0.
为了让每层计算都能独立核验,选取制造解
u∗(x,t)=e−t/τsinLπxK,τ=1s.
把它代回方程,所需源项为
s(x,t)=(L2κπ2−τ1)e−t/τsinLπxK/s.
制造解不是用解析答案替代数值计算,而是人为选择一个满足边界的数据,再反推源项。程序仍需完成插值、离散和线性求解;已知解则提供与代码路径不同的误差参照。若只把离散解再次代入同一段离散代码,最多证明程序内部自洽,不能证明它逼近原偏微分方程。
科学计算的误差账本
一项可复核的计算至少区分五类误差:
- 连续模型对真实系统的简化产生建模误差;
- 参数和传感器读数的有限精度产生数据误差;
- 插值、求积以及时空网格产生离散误差;
- 线性或非线性迭代未完全收敛产生代数误差;
- 浮点运算产生舍入误差。
不同误差需要不同证据。残差主要检查代数方程是否解好,网格加密检查离散变化,重复测量或区间参数处理数据不确定性,独立物理实验才检验模型本身。
条件数先判断数据是否允许精确答案
对标量输出 g(a),局部相对条件数为
condg(a)=g(a)ag′(a),
前提是 a 和 g(a) 都非零。它描述输入的微小相对扰动可能怎样放大到输出,与具体算法无关。算法稳定性则描述实现是否额外放大误差。良态问题仍可由不稳定算法算坏;病态问题即使用稳定算法,也不能凭空恢复输入中不存在的有效数字。
本例源项系数
c(κ)=L2κπ2−τ1
是两个接近量的差。它的绝对值很小,对 κ 的相对误差较敏感。单位也不能在相减时省略:两项都必须具有
s−1 的单位。
例 1:接近抵消的源项系数
取 L=1m、τ=1s、
κ=0.1m2/s,则
c=0.1π2−1≈−0.0130395599s−1. 相对条件数为
cκπ2/L2≈75.6897. 若 κ 增加 0.1% 到 0.1001m2/s,则
cnew≈−0.0120525995s−1, 其相对变化约为 −7.569%,与线性条件数预测一致。若
κ 只有三位可靠数字,报告很多位的 c 没有物理意义。制造解核验时必须用未舍入的同一组参数生成 s 与参照解;若把源项系数先粗略舍入,测得的将同时包含数据不一致和离散误差。
浮点实现还应避免无必要的中间舍入,按量纲合理缩放变量。对大型问题,缩放可改善矩阵行列的数值范围,却不会改变连续问题真实的参数敏感性。条件数是“答案最多能有多准”的警告,稳定算法负责尽量接近这个上限。
传感节点、插值与总量求积
在 t=0,假设传感器位于
xj=jL/4,记录的无噪声温差为
[u0,u1,u2,u3,u4]=[0,22,1,22,0]K.
从离散数据生成初始网格值时,需要说明使用全局多项式、分段线性函数还是样条。插值回答节点之间的温度怎样重构;求积回答某个积分量怎样估计。复合梯形公式恰好等于分段线性插值函数的积分,而 Simpson 公式来自分段二次近似。两种数值相近不表示它们使用同一个连续重构。
例 2:由五个传感器估计总温差
定义总温差指标
Q(0)=∫0Lu(x,0)dx, 单位为 Km。令 h=L/4=0.25m。复合梯形公式给出
QT=h(2u0+u1+u2+u3+2u4)≈0.6035533906Km. 复合 Simpson 公式给出
QS=3h(u0+4u1+2u2+4u3+u4)≈0.6380711875Km. 制造解的精确积分是
Q∗(0)=∫01sin(πx)dx=π2≈0.6366197724Km. 梯形误差约为 −0.0330663818Km,Simpson 误差约为
0.0014514151Km。这里能计算误差是因为有制造解;真实测量通常只能用加密传感器、不同求积阶数和噪声模型估计不确定性。高阶求积不会自动消除测量偏差,也不能恢复采样点之外未被观测的高频结构。
隐式时间步中的矩阵、条件数与残差
在空间网格上用中心差分,在时间上用后向 Euler。令
r=(Δx)2κΔt.
内部向量 Un+1 满足
AUn+1=Un+ΔtSn+1+b∂n+1,
其中 A 的主对角为 1+2r,相邻对角为 −r,
b∂ 收集边界贡献。零边界时该项为零。矩阵对称正定,可用三对角直接法;网格更大或维数更高时,可使用带预条件的共轭梯度法。选用迭代法时必须同时报告停止准则和最终残差。
线性残差定义为
ρ=b−AU.
小残差说明 U 接近离散线性系统的解,但真实代数误差还受
A−1 放大:
∥U−U∥2≤∥A−1∥2∥ρ∥2.
残差再小也没有检查连续模型与离散网格之间的误差。
例 3:一个后向 Euler 步的谱与残差核验
取 Δx=0.25m、Δt=0.1s,则
r=0.16。三个内部节点对应
A=1.32−0.160−0.161.32−0.160−0.161.32. 该矩阵的特征值为
λk=1+4rsin28kπ,k=1,2,3. 最小、最大特征值约为 1.0937258300 与
1.5462741700,故
κ2(A)≈1.413767626,系统良态。
初始网格是第一离散正弦模态,源项也与该模态平行。右端的模态振幅为
1+0.1(0.1π2−1)e−0.1≈0.9988201318. 除以第一特征值,得到新振幅
a1≈0.9132271584. 因此内部向量约为
U1=[0.645749,0.913227,0.645749]TK. 用六位小数回代,残差二范数约为
2.50×10−7K。这说明舍入后的向量很好地满足离散系统。精确制造解在 t=0.1 的振幅是
e−0.1≈0.9048374180,与数值振幅相差约
0.0083897404;这部分主要是时间和空间离散误差,不能靠把线性求解器容差降得更低来消除。
网格加密要同时控制时间与空间尺度
后向 Euler 与中心差分的典型全局误差形式为
E(Δt,Δx)=CtΔt+Cx(Δx)2+高阶项.
若只减小 Δx 而固定较大的 Δt,误差最终会停在时间误差平台;若只减小时间步,空间误差会主导。为了观察空间二阶趋势,可令
Δt 与 (Δx)2 同比例缩小,使两项都按网格宽度的平方下降。
例 4:制造解下的网格加密表
改用无量纲坐标 ξ=x/L、θ=t/τ,扩散参数为
D=κτ/L2=0.1。取 N 个等长空间区间,
Δξ=1/N,并令
Δθ=(Δξ)2,计算到 θ=0.25。在每个网格上用后向 Euler、中心差分和精确源项。由于解始终是第一正弦模态,最大节点误差可直接由振幅比较得到:
| N | Δξ | Δθ | 最大节点误差 |
|---|
| 4 | 0.25 | 0.0625 | 1.5137147×10−2 |
| 8 | 0.125 | 0.015625 | 3.9413170×10−3 |
| 16 | 0.0625 | 0.00390625 | 9.9574238×10−4 |
| 32 | 0.03125 | 0.0009765625 | 2.4959643×10−4 |
相邻误差比约为 3.84、3.96、3.99。由
pobs=log2Eh/2Eh 得到的观察阶趋近 2。这与
O(Δθ+(Δξ)2) 以及
Δθ=(Δξ)2 一致。若表中误差不降、阶数乱跳或只在很细网格上突然上升,应检查边界索引、源项时刻、线性容差和舍入误差,而不是直接删去异常行。
独立实现怎样避免共同错误
同一算法复制两份通常会复制同一个符号或索引错误。有效的独立核验应改变表示或算法路径。本例可以建立三条互补证据:
- 主实现使用三对角 Thomas 算法逐步求解;
- 独立实现把网格向量投影到离散正弦基,对每个模态用标量递推;
- 制造解在连续方程层面给出网格点参照,并检查观察收敛阶。
第一、第二条在舍入量级内一致,说明线性代数和边界装配相符;它们共同逼近第三条,才说明离散格式正在收敛到连续问题。还应做极限测试:令源项和初值为零,结果必须保持零;令扩散率为零,空间耦合应消失;减小时间步时,后向 Euler 结果应趋向同一半离散解。
复现实验应保存参数单位、传感器数据、网格、时间步、边界处理、求解器容差、软件精度和输出指标。随机性若存在还应保存种子。只保存最终图像会丢失判断误差来源所需的信息。
练习:复核导热计算链
练习 1:推导制造解源项
- 所属知识
- 模型与量纲
- 难度
- 3/5
对
u∗(x,t)=e−t/τsin(πx/L)K,推导使其满足
ut=κuxx+s 的 s(x,t),并核对单位。
查看提示
分别计算
ut 与
uxx,再由
s=ut−κuxx 得到源项。
查看解答
有
ut=−τ1u∗,uxx=−L2π2u∗. 因此
s=ut−κuxx=(L2κπ2−τ1)u∗. κ/L2 与 1/τ 的单位均为
s−1,再乘温差得到 K/s,与
ut 的单位一致。
练习 2:粗传感网格上的梯形积分
- 所属知识
- 插值与求积
- 难度
- 3/5
只保留 x=0,1/2,1 三个传感器,数据为 [0,1,0]。用复合梯形公式估计
∫01u(x,0)dx,并与 2/π 比较。
查看提示
两个子区间的节点为 0、1/2、1,端点权重为二分之一。
查看解答
步长为 h=1/2,所以
QT=21(20+1+20)=0.5. 精确值约为 0.6366197724,误差约为
−0.1366197724。该结果也是连接三个节点的分段线性三角形面积;它反映粗采样与低阶重构的合并影响。
练习 3:由残差给出代数误差界
- 所属知识
- 线性求解
- 难度
- 4/5
例 3 的矩阵最小特征值为 1.09372583。若某次求解的残差二范数为
10−6,给出代数误差二范数的上界。
查看提示
对对称正定矩阵,二范数下 ‖
A−1‖
2=1/λmin。
查看解答
由
∥U−U∥2≤∥A−1∥2∥ρ∥2=λmin(A)∥ρ∥2, 得到
∥U−U∥2≤1.0937258310−6≈9.143×10−7. 这个界只针对离散线性系统的代数解,不包括约为 10−3 或更大的网格误差。
练习 4:计算观察收敛阶
- 所属知识
- 网格加密
- 难度
- 3/5
某两级网格的最大误差分别为
Eh=3.9413170×10−3 与
Eh/2=9.9574238×10−4。计算观察阶并解释结果。
查看提示
使用
p=log2(Eh/Eh/2)。
查看解答
pobs=log2(9.9574238×10−43.9413170×10−3)≈1.985. 它接近 2,支持在当前网格区间内误差按
O(h2) 下降。两级网格只能给局部迹象;还应检查更多层级是否保持同一趋势。
练习 5:设计不共享线性求解器的核验
- 所属知识
- 独立实现
- 难度
- 4/5
主程序用 Thomas 算法求每个后向 Euler 步。为本章零边界问题设计一条独立核验路线,并列出至少三个应比较的量。
查看提示
改变表示:把三对角坐标更新改成离散正弦模态递推。
查看解答
独立程序可使用离散正弦变换:先把初值和每步源项投影到正弦模态;对第 k 个模态除以
1+4rsin22Nkπ; 再作逆变换恢复节点值。它不调用 Thomas 算法,也不按相同顺序装配三对角消元。至少比较:每步节点最大差、两种方法各自的线性残差、与制造解的最大误差;还可比较总温差求积和网格加密后的观察阶。若两实现一致却都不向制造解收敛,应检查共同的离散公式、边界或源项,而不是认定答案正确。
资料与后续实践
课程 · 2012Introduction to Numerical Analysis
Laurent Demanet
用于核对 M10 各类算法的误差阶、稳定性条件、停止准则和可复算例题。
打开官方来源
MIT OpenCourseWare 的 Introduction to Numerical Analysis 系统覆盖条件数、线性方程、插值、求积与微分方程数值方法,可用于按模块复算本章计算链。
课程 · 2006Linear Partial Differential Equations
Matthew Hancock
用于核对经典线性偏微分方程的初边值条件、分离变量解和物理解释。
打开官方来源
MIT OpenCourseWare 18.303 从线性偏微分方程、边界条件和 Fourier 模态解释扩散问题,为制造解、离散正弦核验和连续定性性质提供参照。
科学计算的可信度来自多条相互独立的证据:条件数说明输入允许的精度,稳定算法控制额外误差,残差确认离散方程被解好,网格加密检验离散收敛,独立表示与制造解排查共同实现错误。任何单项指标都不能替代完整证据链。