ALIOTH · 三分钟看懂
从方程到矩阵
一台求解器的入口,以及它的边界
−∇·(
κ
∇
u
) =
f
u
温度场(未知)
κ
材料的导热系数
f
热源
变系数热传导方程
−∇·(κ∇u) = f
5 × 5 =
25
个未知数
连续的
u
(x, y)
↓ 只看格点
u
1
,
u
2
, … ,
u
25
真实仿真里,是一百万个。
4
u
0
−
u
左
−
u
右
−
u
上
−
u
下
= h²
f
0
一条关系,只连
5
个未知数
A
x
=
f
A:25 × 25,邻居关系
x:25 个未知数
f:热源与边界
每行只有
≈ 5
个非零元
一百万未知数
≈ 五百万非零元,而不是一万亿
稀疏,让百万阶矩阵
存得下、算得动。
解
x
回到网格上,就是温度场
1e0
1e-4
1e-8
目标
28 次迭代,残差 < 1e-8
迭代次数 →
对称正定 · 稀疏
同一类矩阵
多重网格 · 共轭梯度
✓ 解 + 回执
此前的热传导:线性
−∇·(
κ
∇
u
) =
f
系数
κ
是已知的材料参数,直接装配
✓
流体的对流项:非线性
(
u
·∇
)
u
同一个未知数,出现两次
“系数”是
u
本身:要装配,得先知道答案
✗
装配
A
,需要先知道系数
u
解出
u
,需要先有矩阵
A
循环依赖:鸡生蛋,蛋生鸡
① 先猜一个解
x
0
瞎猜也行,比如全零
② 冻结:用猜测算出系数
u
暂时当已知,装配出
A
k
A
k
x
=
f
③ 解线性方程:前面的老手艺全用得上
④ 得到更好的猜测
解冻,回到 ②,再转一圈
残差一圈圈缩小
1e0
→
1e-2
→
1e-5
→
1e-8
每圈解一张线性矩阵,几圈到几十圈收敛
对称:作用是相互的
a
ij
= a
ji
两点之间一条导热路径,两头共用
正定:能量地形是一只碗
往低处滚
碗底 = 解,且只有一个
任何状态的能量都为正,弯曲方向处处向上
热、结构、电路是耗散系统,离散后天然长成这样
共轭梯度 = 顺碗壁下滚;多重网格 = 粗碗里找方向,细碗里精修
高频波动(Helmholtz)
−Δ
u
− k²
u
=
f
波不耗散:
−k²
从刚度里往外减,减过了头
有的方向向上
有的方向向下
碗塌成马鞍:“往低处滚”失去方向
对流占优的输运
风向 →
上游推得动下游,下游推不动上游
a
ij
≠ a
ji
镜像被打破
GMRES · 专用预条件器
不靠碗也能走的迭代法:另一套手艺,另一个战场
一般矩阵:低能模态孤立可数
粗网格逐个网住 ✓
cfd2:低能谱连成一片
粗空间装不下 ✗
回退:经典迭代,慢而必达
fallback_used: true converged: true
输入:一张稀疏矩阵
玉衡
读代数特征,一次前向,数十毫秒
同时吐出两样组件
① 逐点平滑权重
每个格点,一个数
松弛因子,从旋钮
变成一张场
② 层间插值算子
粗化策略交给网络:粗点 = 细邻居的加权和
③
共
轭
梯
度
收
尾
两样组件一起上场:收敛与精度,由数值框架背书
科学计算的话
AI 的话
严格说,是 U-Net 长得像多重网格:多重网格 1977 年就出生了。
−∇·(κ∇
u
) =
f
方程
离散
A
x
=
f
矩阵
求解器
★ 由 AI 现场生成
解 x
+ 可查验的回执
吃得下的走流水线,吃不下的有手法兜底。
◀
⏸
▶