The purpose of computing is insight, not numbers.计算的目的是洞察,而不是数字。(Richard Hamming)
- 工业软件每解一次方程组,都要先挑求解器。挑错了,一秒能解完的题会拖上几十秒,甚至解不出来。今天这件事靠老师傅的手感,我们管它叫工业软件界的“炼丹”。
- 天玑是求解器的“查询优化器”。它先让矩阵试跑几十步,再给每个求解器报一个成功概率;代码按期望代价排出先后,失败就自动换下一个。
- 在 SuiteSparse 的 117 个真实矩阵上,天玑判断得比通用决策模型 Jev 准,Brier 分数低 38%。在另一批 46 个能解出来的真实矩阵上,按它排的顺序求解,总耗时不到固定默认顺序的四成,试跑的时间也算在里面。
同一道题,一秒还是四十六秒
先看一道真题。SuiteSparse 矩阵库里有一个陀螺仪的刚度矩阵,叫 gyro_k,一万七千多个未知数。按固定的默认顺序,先上代数多重网格。它磨了 46 秒,残差几乎没动,宣告失败。换成直接法,1.1 秒解完。
这样的事在工业软件里很常见。有限元、流体、电路仿真,算到最后都是在解稀疏线性方程组。不可压流动里,光是压力方程就常常吃掉六到九成的计算时间[17]。在 CFD 软件的求解设置里,压力方程那一段通常只有几行,用什么求解器,配什么预条件器,光滑器选哪个。以开源的 OpenFOAM 为例,就是 system/fvSolution 文件里 p 的那一段。这几行填得好不好,决定了算得快慢,有时还决定了算不算得出来。
这几行怎么填,多数团队靠老师傅。老师傅的经验很值钱,却写不进文档。换一套网格、换一种材料,他也得重新试。人一走,经验也跟着走了。配方在人手里,火候全凭感觉,这就是我们说的“炼丹”。每一家用仿真的单位都在为它交学费,交的是工程师的时间,还有集群的机时。
Jev 读文字,天玑先摸矩阵
9 月 15 日,TypeSafe 发布了决策模型 Jev[1]。它的用法和聊天机器人不同。交给它一份状态和几道带类型的问题,是非题、选择题或分档题,它一次算完,直接返回每道题的概率,一个字也不写。TypeSafe 把它叫作 System One 模型,借的是“快思考”的说法。天玑也是快判断,但它是读过求解器日志的那种快。
这个接口很适合求解器决策。先试哪个求解器,本来就该看概率:有多大把握成功,失败了要赔多少时间。可 Jev 是通用模型,没见过求解器。给它一段矩阵的文字描述和几项统计量,它只能凭常识猜。
天玑留下了 Jev 的接口,换掉了内核,又补上两样东西。一样是探针,判断之前先让矩阵试跑几十步。另一样是一座数据工厂,拿求解器真跑出来的结果当训练标签。模型结构沿用社区开源的 Open-Jev-9B[2][3],底座是 Qwen3.5-9B[6]。
先跑一小段,再下判断
编译器有一招叫 profile-guided optimization。先把程序跑一小段,看热点在哪,再决定怎么优化。天玑的探针做的是同一件事。
探针分三步。第一步,用最便宜的 Jacobi 预条件跑 20 步共轭梯度,看残差降得多快,顺手估出条件数,还能发现矩阵是不是不定。第二步,把多重网格的层级搭起来试跑 15 步,看它推不推得动残差,粗网格能不能罩住最难消的那部分误差。第三步,把最难消的误差单独拎出来,看它能不能用常向量这样的简单模式解释。
回到陀螺仪那道题。探针看到,多重网格每一步只能把残差降到原来的 0.98,粗网格只罩住了 22% 的慢误差。这等于提前知道多重网格会卡住。天玑于是把直接法排在第一位,算上 4.3 秒探针,5.4 秒解完。默认顺序花了 47 秒。
探针不是免费的。大矩阵上,它可能要几十秒。这笔账后面会算清楚。
答案跑一遍就知道
大模型这两年在数学和代码上进步很快,一个常被提到的原因是答案能自动核对。数学题对一下答案,代码跑一遍测试,对错立判。这类训练信号叫可验证奖励。
求解器决策天生就是这样的题。某个求解器能不能在预算内解出来,要多少步,花几秒,跑一遍就知道,不用任何人标注。数据能有多少,只看算力有多少。
我们据此搭了一座数据工厂(图 1)。一边用 13 族生成器出题,覆盖扩散、线弹性、对流扩散、Helmholtz、薄壁壳等问题,共 4,087 道,最大的有 79 万未知数。一边从 SuiteSparse 收来 544 个真实矩阵,一部分进训练,其余留作考题。每道题都用 5 个求解器配置在同一预算下真跑一遍,成败、步数和耗时记下来,就是标签。
图里还有一条回流的虚线。天玑每在真实环境里指挥一次求解,结果就是一条新标签,可以直接拿回来继续训练。老师傅的经验留不住,这份经验能留下来。对做产品的人来说,这就是数据飞轮:用得越多,攒下的标签越多。
图 1 天玑的数据工厂与一次在线决策。上一行离线生成题目、真跑求解器菜单,把运行结果写成标签,把特征、探针和文字描述写成状态。下一行是一次决策:代码先算特征、跑探针,天玑给出每个带类型问题的概率,代码按期望代价排出求解顺序并执行。执行结果回流为新的训练样本。
求解器的查询优化器
数据库收到一条 SQL,并不照字面直接执行。查询优化器先看表的统计信息,再用代价模型比较几种执行计划,挑预计最省的那个。天玑站的就是这个位置。探针读数相当于统计信息。天玑给出每个求解器的成功概率,代码再按期望代价排出尝试顺序。
期望代价把两件事放在一起算:成功的把握有多大,失败了要赔多少时间。一个很有把握但很慢的求解器,可能会排在一个把握一般但很快的后面,因为后者值得先试一下。代码把 5 个配置的 120 种先后顺序全算一遍,取期望代价最小的那条。
失败了就自动换下一个,也就是工程里常说的 fallback。模型只报概率,排序和执行都由代码负责。每次求解都核验真实残差,所以就算天玑全猜错,最坏也只是把菜单挨个试一遍,不会交出一个错的解。
接进现有软件,改动也不大。天玑以插件的形式挂在已有求解器前面,核心就是下面十几行。features、probe、build_state、best_order 是我们脚本里的函数,phecda 是天玑的一次前向,输入输出与 Jev 的 /v1/systemone 同形。放到 CFD 软件里,天玑要填的就是求解设置里压力方程那几行:solver、preconditioner、smoother。天玑 PlayGround 演示的正是这个过程。
from scipy.sparse.linalg import cg, splu; import pyamg amg = lambda A: pyamg.smoothed_aggregation_solver(A).aspreconditioner() MENU = {"amg_cg": lambda A, b: cg(A, b, rtol=1e-8, maxiter=500, M=amg(A)), "direct_lu": lambda A, b: (splu(A.tocsc()).solve(b), 0)} # 其余配置、PETSc 同理 def solve_sparse(A, b, description=""): f = features(A) # 数字特征 r = probe(A, f["block_size_detected"], f["asym_rel"]) # 探针 p = phecda(build_state(f, description, r), QUESTIONS) # 天玑:概率 for name in best_order(p, f): # 期望代价排序 x, info = MENU[name](A, b) if info == 0 and norm(b - A @ x) <= 1e-8 * norm(b): # 核验真残差 return x, {"engine": name, "probe_s": r["time_s"]} raise RuntimeError("菜单里的配置都失败了") # 否则退到下一个
成绩单
先说判断准不准。我们用 Brier 分数来量:说九成会成的事,最好真有九成成了。它同时奖励判得对和报得实,越低越好。
我们的考卷是 SuiteSparse 里 117 个对称正定矩阵。在考卷上,天玑的 Brier 分数是 0.089,读同一份状态的 Jev 是 0.143,低了 38%,差值的 95% 置信区间不跨 0。再换一批 68 个真实矩阵,它们同样来自 SuiteSparse,但和考卷不在同一个 group(可以理解为不同的来源),以非对称和不定矩阵为主。天玑依然领先,0.105 对 0.135(图 2)。
天玑还有一个长处:一个模型回答所有问题。问题写在输入里,换个问法不用重新训练。训练时从没出现过的两个求解器配置,BiCGSTAB 和 AMG 预条件的 GMRES,天玑在真实矩阵上也判得比 Jev 准(0.047 对 0.077,0.049 对 0.082)。为每个问题单独训练的梯度提升树,在它训过的问题上和天玑打成平手,这两道新题它却根本答不了。
再说省不省时间。后面这 68 个真实矩阵里,有 46 个至少有一个配置能在预算内解出来。我们按各方法排出的顺序依次真跑,失败的尝试按实际耗时算,探针的时间也算进去(图 3)。天玑一共花了 841 秒,其中探针 370 秒。固定默认顺序花了 2,260 秒,是天玑的 2.7 倍。默认顺序先试多重网格,而这批矩阵大多不对称或不定,多重网格很少成功,每失败一次就白等一段。
这个 2.7 倍有明确的范围,只在这 46 个矩阵上成立。换到考卷那 117 个对称正定矩阵上,账就没这么好看,探针本身也还没回本。这些不好看的数字,都放在文末的折叠区里。
下一步:给大模型一双摸矩阵的手
多模态模型给大模型装上了眼睛。天玑想给它装上一双能摸矩阵的手。今天的天玑,还是先把探针读数写成数字和文字,再交给语言模型去读。我们更想做的,是把矩阵本身当成一种模态,让模型直接读它的结构和谱。
在智算星座里,天璇 OmniArch[15]端到端地预测解场,玉衡 Alioth[16]生成求解器组件,天玑负责判断该交给谁、失败了退到哪里。
接下来我们会把数据生成器、求解器菜单和全部标签开源,并放出天玑的 LoRA 权重。
给较真的读者:我们还没做好的事、完整表格和方法细节
我们还没做好的事
下面这些,是天玑现在还做得不好的地方。每一条都有数字。
- 探针还没回本。在正文那 46 个真实矩阵上,不带探针的天玑只要 447 秒,比带探针的 841 秒还快;不带探针的逻辑回归也只要 464 秒。探针让判断变准了,自己的开销却还没挣回来。SuiteSparse 考卷的 63 道可解题上更明显:带探针的天玑要 3,579 秒,其中探针 1,177 秒,比固定默认顺序的 2,858 秒还慢;最快的是不带探针的逻辑回归,1,535 秒;事后最优是 943 秒。考卷上探针的中位耗时是 24 秒,大矩阵上的多重网格试跑常常用满 60 秒上限。同一个矩阵如果要反复求解,比如多个右端项或多个时间步,探针只需做一次,开销会被摊薄。这一点我们还没有实测。
- 梯度提升树不服。在它训练过的问题上,逐题训练的梯度提升树(GBDT)和天玑不分胜负。考卷上天玑略好(0.089 对 0.104),其他 group 的真实矩阵上 GBDT 略好(0.094 对 0.105),两处差值的置信区间都跨 0。“哪个配置最快”这道选择题,GBDT 明显更好,考卷上 Brier 分数 0.427 对 0.530。
- 没见过的问题,不是都能答。训练里从没问过内存。问“直接法会不会超出内存”,天玑在真实矩阵上的 Brier 分数是 0.330,比按基率猜的 0.054 还差。它把“内存超限”和“直接法失败”当成了一回事,两者的概率在考卷上相关系数达 0.88,超时的题也被判成了内存超限。合成测试集上,五项新问题和新配置里有三项输给 Jev。
- 只给文字,天玑就懵了。把状态里的数字全部拿掉、只留一段文字描述,天玑在真实矩阵上的 Brier 分数是 0.266,比 Jev 的 0.230 还差,两者离按基率猜都不远。文字描述到底有没有用,目前还拿不出证据。
- 天玑也会看走眼。PlayGround 里的曲轴段矩阵 crankseg_1 就是一例。天玑先后押了两种多重网格,各自撞上 120 秒上限,最后才换到直接法,一共 381 秒。Jev 读同一份状态,一上来就选了直接法,141 秒。固定默认顺序也只要 222 秒。
- 温度只在 35 个矩阵上拟合。校准用的这批真实矩阵以非对称为主,和考卷分布不同。温度缩放让“最快”选择题变差了,也让 GBDT 的收敛 Brier 变差了(见表 1 注)。
- 还没进过真正的 CFD 软件。PlayGround 是示意界面,矩阵来自 SuiteSparse 和我们的合成题,求解由 SciPy 与 PyAMG 执行。天玑还没有接进 OpenFOAM 或任何商业软件做过实测。
- 其他小账。接近 120 秒上限的标签会受机器负载影响。样本量有限,考卷上不少结论的置信区间偏宽。训练按时间预算停在计划 735 步中的第 662 步。
实验怎么做的
测试集。SuiteSparse 考卷是 117 个对称正定矩阵,规模最大 156 万未知数;其中 58 个所在的 group 有别的矩阵进入了训练,59 个没有。其他 group 的真实测试集有 68 个矩阵,以非对称和对称不定为主。合成测试集是 274 道留出的合成题。
对照方法。(1)Jev 零样本:用公开 API 读取与天玑完全相同的状态和问题(版本 jev-1.13.0)。(2)梯度提升树(GBDT)与(3)逻辑回归(LR):以数字特征和探针的数值结果为输入,每个问题单独训练一个模型,训练数据与天玑相同。(4)基率:按训练集频率给概率。每种方法都有带探针和不带探针两个版本;天玑、GBDT 与 LR 都在真实矩阵校准集上做温度缩放[10]。
指标。Brier 分数[8]是预测概率与实际结果之差的平方均值,越低越好。AUC 衡量排序能力。ECE 衡量校准,即各分箱里预测概率与实际频率的平均差距。正文报告五个“能否收敛”问题合并后的 Brier 分数。路由模拟在可解题上按各方法的顺序依次真跑,失败的尝试按实际耗时计入,单次上限 120 秒,带探针的方法计入探针耗时。
完整成绩单
| 数据集 | 方法 | 收敛 Brier ↓ | 收敛 AUC ↑ | 收敛 ECE ↓ | 最快 Brier ↓ | 最快 准确率 ↑ |
|---|---|---|---|---|---|---|
| SuiteSparse 考卷 | 天玑 | 0.089 | 0.937 | 0.045 | 0.530 | 0.718 |
| Jev 零样本 | 0.143 | 0.881 | 0.122 | 0.710 | 0.479 | |
| GBDT | 0.104 | 0.945 | 0.127 | 0.427 | 0.718 | |
| LR | 0.143 | 0.882 | 0.136 | 0.638 | 0.581 | |
| 基率 | 0.299 | 0.594 | 0.272 | 0.845 | 0.197 | |
| 真实测试(其他 group) | 天玑 | 0.105 | 0.934 | 0.076 | 0.611 | 0.574 |
| Jev 零样本 | 0.135 | 0.875 | 0.053 | 0.653 | 0.485 | |
| GBDT | 0.094 | 0.955 | 0.065 | 0.508 | 0.574 | |
| LR | 0.106 | 0.930 | 0.052 | 0.660 | 0.515 | |
| 基率 | 0.295 | 0.624 | 0.300 | 0.773 | 0.426 | |
| 合成测试 | 天玑 | 0.064 | 0.969 | 0.044 | 0.531 | 0.697 |
| Jev 零样本 | 0.209 | 0.815 | 0.231 | 0.885 | 0.336 | |
| GBDT | 0.080 | 0.955 | 0.142 | 0.375 | 0.755 | |
| LR | 0.121 | 0.931 | 0.168 | 0.655 | 0.668 | |
| 基率 | 0.191 | 0.698 | 0.086 | 0.751 | 0.321 |
| 方法 | 同 group 进过训练 (58 题) | 同 group 未进训练 (59 题) |
|---|---|---|
| 天玑,带探针 | 0.101 | 0.077 |
| Jev 零样本,带探针 | 0.140 | 0.146 |
| GBDT,带探针 | 0.117 | 0.092 |
| LR,带探针 | 0.161 | 0.126 |
| 基率 | 0.278 | 0.320 |
| 方法 | SuiteSparse 考卷 不带 → 带探针 | 真实测试(其他 group) 不带 → 带探针 | 合成测试 不带 → 带探针 |
|---|---|---|---|
| 天玑 | 0.142 → 0.089 | 0.133 → 0.105 | 0.080 → 0.064 |
| Jev 零样本 | 0.189 → 0.143 | 0.148 → 0.135 | 0.236 → 0.209 |
| GBDT | 0.133 → 0.104 | 0.097 → 0.094 | 0.062 → 0.080 |
| LR | 0.193 → 0.143 | 0.142 → 0.106 | 0.156 → 0.121 |
| 测试项 | 真实矩阵(185 题) | 合成测试(274 题) | GBDT 与 LR | ||||
|---|---|---|---|---|---|---|---|
| 天玑 | Jev | 基率 | 天玑 | Jev | 基率 | ||
| Jacobi-CG100 步内 | 0.028 | 0.041 | 0.117 | 0.153 | 0.052 | 0.103 | 无法作答:没有训练标签 |
| 直接法内存超限 | 0.330 | 0.075 | 0.054 | 0.121 | 0.025 | 0.000 | 无法作答:没有训练标签 |
| AMG 与直接法谁先成功 | 0.452 | 0.586 | 0.747 | 0.419 | 0.502 | 0.575 | 无法作答:没有训练标签 |
| BiCGSTAB能否收敛 | 0.047 | 0.077 | 0.256 | 0.096 | 0.254 | 0.249 | 无法作答:没有训练标签 |
| AMG-GMRES能否收敛 | 0.049 | 0.082 | 0.401 | 0.160 | 0.113 | 0.218 | 无法作答:没有训练标签 |
| 格式变化:一半矩阵字段缺失 | 0.162 | 0.178 | — | — | — | — | 缺失特征当缺失值:0.279 |
| 格式变化:字段顺序打乱 | 0.094 | 0.142 | — | — | — | — | 按字段名解析,不受影响:0.086 |
| 格式变化:只有文字描述 | 0.266 | 0.230 | — | — | — | — | 无法作答:没有数值特征 |
| 策略 | SuiteSparse 考卷 | 真实测试(其他 group) | 合成测试 |
|---|---|---|---|
| 事后最优 | 943 | 340 | 1,955 |
| 天玑,带探针 | 3,579 | 841 | 5,352 |
| 天玑,带探针,复用 AMG 层级 | 3,521 | 832 | 5,277 |
| 天玑,不带探针 | 3,633 | 447 | 4,099 |
| Jev,带探针 | 3,785 | 930 | 9,734 |
| Jev,不带探针 | 2,127 | 524 | 5,959 |
| GBDT,带探针 | 3,006 | 964 | 5,450 |
| GBDT,不带探针 | 2,159 | 722 | 3,613 |
| LR,带探针 | 3,827 | 1,346 | 7,263 |
| LR,不带探针 | 1,535 | 464 | 3,920 |
| 固定顺序 | 2,858 | 2,260 | 5,256 |
| 按基率排序 | 3,219 | 1,189 | 6,585 |
| 其中探针耗时 | 1,177 | 370 | 1,683 |
| 可解题数 | 63 | 46 | 263 |
方法细节
状态与问题。状态由三部分组成:代码从矩阵算出的数字特征,探针读数,以及一段自然语言描述。数字都附一句文字分档,例如“几乎没有行对角占优”。问题分三种:是非题(noul)问一个条件是否成立,选择题(choice)从若干选项中选一个,分档题(score)从有序档位中选一个。例如“AMG-CG 能否在预算内收敛”是是非题,“哪个配置最先成功”是选择题。
预算与菜单。所有配置共用一个预算:真实相对残差降到 10−8,迭代不超过 500 步,单核墙钟不超过 120 秒,额外内存不超过 6GB。菜单有五个配置:Jacobi-CG;光滑聚集 AMG[11][12]预条件的 CG(AMG-CG),近零空间只用常向量;同一 AMG 加上由矩阵自身算出的低能向量(AMG+近零空间-CG);ILU 预条件的 GMRES[14];SuperLU 直接法[13]。
探针。Jacobi 试跑做 20 步 Jacobi 预条件的共轭梯度(矩阵不像对称正定时改用 GMRES),记录每步残差的平均缩小倍数,并由共轭梯度的系数组出 Lanczos 三对角阵,估计缩放后矩阵的最大、最小特征值和条件数,出现非正特征值时报告矩阵不定。多重网格试跑建立与 AMG-CG 相同的层级,跑 15 步,记录建层级耗时、层数、残差缩小倍数,以及光滑后的误差落在粗网格空间里的比例;这个比例低,说明近零空间假设不成立,这正是结构力学矩阵上多重网格失败的常见原因。慢模态检查对随机误差做 10 次阻尼 Jacobi 光滑,统计存活比例,以及存活误差中能被常向量或富化近零空间解释的部分。探针的中位耗时在合成测试集上为 0.7 秒,在其他 group 的真实矩阵上为 2.8 秒,在考卷上为 24 秒。
模型与训练。结构沿用 Open-Jev-9B:底座 Qwen3.5-9B,加秩为 8 的 LoRA[7]和一个标量打分头。每个候选答案单独做一次前向,打分头从 Yes 与 No 两个词元的读出初始化;是非题取 sigmoid,选择题和分档题在候选之间取 softmax。损失为交叉熵加 0.1 倍 Brier 分数,两者都是严格适当评分规则[9],模型只有如实报告概率,期望损失才最小。训练分两段:先只用合成题,再把真实矩阵(重复三次以提高权重)加进来继续训练,第二段共 2,848 条样本、662 步,用两张 RTX 5090 约 55 分钟。四分之一的样本去掉探针段,让同一个模型既能读带探针的状态,也能读不带探针的状态。温度在真实矩阵校准集上按题型拟合。
期望代价。第一个配置 c 的期望代价为 pc tok(c) + (1 − pc)(tfail(c) + Erest),其中 pc 是天玑给的成功概率,tok 与 tfail 是训练集上按矩阵规模回归得到的典型成功与失败耗时,Erest 是剩余配置的最优期望代价。
数据划分。真实矩阵按 SuiteSparse 的 group 划分。考卷所在的 36 个 group 之外的矩阵全部可用。由于考卷所在的 group 几乎囊括了库里的对称正定结构矩阵,我们放宽规则,也允许考卷同 group、但不属于考卷的矩阵进入训练,只排除名字去掉末尾数字后与考卷同族的矩阵;考卷成绩因此按 group 是否进过训练分开报告(表 2)。其余真实矩阵按 group 划出训练集(324 个)、校准集(35 个)和测试集(68 个),校准集只用于温度缩放。合成题中有 103 道超过 20 万未知数。
天玑与 TypeSafe 公司及其 Jev 模型没有任何关联。文中 Jev 的数字全部来自我们用公开 API 对同一批状态和问题的实测,版本 jev-1.13.0,未做任何调参或校准;页面没有使用 TypeSafe 的标识和品牌样式。
参考文献
- TypeSafe. System One models and the Jev API documentation. docs.typesafe.ai
- Z. Cai. Open-Jev-9B: LoRA adapter and decision head for Qwen3.5-9B. 2026. huggingface.co/ZefanCai/Open-Jev-9B
- Open-Jev: open Qwen-based non-generative probability decisions. github.com/Zefan-Cai/Open-Jev
- J. R. Rice. The algorithm selection problem. Advances in Computers, 15 (1976) 65–118. doi:10.1016/S0065-2458(08)60520-3
- T. A. Davis and Y. Hu. The University of Florida sparse matrix collection. ACM TOMS, 2011. sparse.tamu.edu
- Qwen Team. Qwen3.5-9B. huggingface.co/Qwen/Qwen3.5-9B
- E. J. Hu et al. LoRA: Low-rank adaptation of large language models. ICLR, 2022. arXiv:2106.09685
- G. W. Brier. Verification of forecasts expressed in terms of probability. Monthly Weather Review, 78 (1950) 1–3.
- T. Gneiting and A. E. Raftery. Strictly proper scoring rules, prediction, and estimation. J. Amer. Statist. Assoc., 102 (2007) 359–378. doi:10.1198/016214506000001437
- C. Guo, G. Pleiss, Y. Sun, K. Q. Weinberger. On calibration of modern neural networks. ICML, 2017. arXiv:1706.04599
- N. Bell et al. PyAMG: Algebraic multigrid solvers in Python. J. Open Source Software, 2023. github.com/pyamg/pyamg
- P. Vaněk, J. Mandel, M. Brezina. Algebraic multigrid by smoothed aggregation for second and fourth order elliptic problems. Computing, 56 (1996) 179–196. doi:10.1007/BF02238511
- X. S. Li. An overview of SuperLU: algorithms, implementation, and user interface. ACM TOMS, 31 (2005) 302–325. doi:10.1145/1089014.1089017
- Y. Saad. Iterative Methods for Sparse Linear Systems. 2nd ed., SIAM, 2003. doi:10.1137/1.9780898718003
- T. Chen et al. OmniArch: Building foundation model for scientific computing. ICML, 2025. arXiv:2402.16014
- 北航 SCAL 小组. 智算玉衡 Alioth:让 AI 生成方程求解器. 2026. tianyuc.com/blog/alioth.html
- H. C. Elman, D. J. Silvester, A. J. Wathen. Finite Elements and Fast Iterative Solvers: with Applications in Incompressible Fluid Dynamics. 2nd ed., Oxford University Press, 2014. oup.com
2026 年 9 月