课程/M03/高斯消元、初等矩阵与 LU 分解
M03 · 矩阵与线性映射核心约 40 分钟

3.5 高斯消元、初等矩阵与 LU 分解

本节位置:模块 3 · 矩阵与线性映射 | 前置:3.4 | 预计:40 分钟

一句话:高斯消元用三种行变换把矩阵化成三角,LU 分解则把这三步「录下来」存成一个下三角矩阵,供以后反复使用。

0. 场景引入

结构设计院,一栋 60 米高的钢框架要做抗震验算。简化成层模型后自由度是 480 个(80 个节点 × 6 个自由度),刚度矩阵 ,对称正定。

规范要求做包络设计:恒载与活载并成一个组合,加上 8 个方向的风、3 条地震波,一共 12 个荷载工况。每个工况对应一个右端项 ,都要解一次

只跟结构本身有关,12 个工况共用它。

决定:是对每个 从头消元 12 次,还是把 分解一次()、后面只做 12 次三角求解?

代价: 时,一次消元约 FLOPs,12 次就是 ;分解一次加 12 次回代是 ,省 11 倍。这个模型再加密到 (精细壳单元),一次分解本身就是 FLOPs 量级——重复 12 次直接不可行。

比慢更可怕的是漏算:12 个工况少算一个,某根柱的配筋就不足,地震时是倒塌。

问题:消元的过程为什么能「存下来」?主元为 0、或者只是很小时,为什么必须换行?

读完本节,你应该能回答三件事:

  1. 三种行变换为什么都不改变解集,却可能改变行列式;
  2. 里 存的到底是什么,为什么它恰好是各步的乘数;
  3. 为什么实际实现都是 ,不选主元会坏在哪。

1. 直觉

1.1 消元与存档

高斯消元(Gaussian elimination)就是「用一行去减另一行的倍数」,制造零,让矩阵变成阶梯形:主元逐行右移,主元下方全为零。每一步都是一次初等行变换(elementary row operation),而每一种行变换都能写成一个**初等矩阵(elementary matrix)**左乘。消元的过程就是一串初等矩阵连乘。

「高斯消元」这个名字来自 Gauss 1809:他在《Theoria motus》里系统地用逐次消去法解观测方程。

LU 分解把结论记下来:, 记录「每一步减了谁的第几倍」, 是消元后的上三角。解方程时先解 (前代),再解 (回代),都只要 。

💡 一句话直觉:消元是「做」,LU 是「把做法存档」;存档一次,换右端项时不用重做。

类比边界:这个存档只对同一个 、不同的 有用。若 本身在变(如训练中每步都更新权重),LU 的复用价值就消失了。

1.2 现实对应:拆机器时录下的顺序

消元像拆一台机器:你先拧下 4 号螺栓(消掉第 1 列的下面几项),再拧 7 号,再拧 12 号。每一步都让结构「松一点」,最后机器散成一堆零件(上三角)。

LU 是把拆解顺序录成视频: 记录「每一步拧的是哪颗螺栓、拧了几圈」, 是拆完后的零件堆。下次拆同型号的机器,照视频做就行,不用重新摸索。

在结构分析里,这台「机器」就是 :它编码了「哪个节点和哪个节点通过一根梁相连、这根梁有多硬」。 记录的是「用哪个节点去消哪个节点的约束」, 是消完之后彼此独立的自由度。

这个类比在哪里失效:视频只对同型号机器有效。结构一改(换一根梁的截面、加一层楼), 就变了,视频作废,必须重新分解。这也是为什么优化设计里「改一个参数就重算一次」代价很高——每次都要重新录一遍视频。

1.3 量级直觉

消元的代价是 ,三角求解只有 。两者之比是 : 时约 160 倍, 时约 33 万倍。

这个比值就是「分解一次、复用多少次才划算」的临界点:右端项只有 1 个时,直接消元和 LU 一样贵;有 个时,复用大约省 倍——直到 赶上 ,即 。

2. 定义

2.1 增广矩阵与三种行变换

把 写成增广矩阵(augmented matrix) 。允许三种行变换:

  1. 交换两行:;
  2. 数乘一行:,;
  3. 倍加:,。

三种变换都不改变方程组的解集。

2.2 初等矩阵

对单位阵做一次行变换得到的矩阵叫初等矩阵。左乘初等矩阵 等于对 做对应的行变换。例如:

左乘 ,就是把 的第 2 行减去第 1 行的 2 倍。 初等矩阵都可逆,逆矩阵就是把倍数变号:

的第 项是

2.3 行阶梯形与简化行阶梯形

  • 行阶梯形(row echelon form, REF):非零行在上;每行首个非零元(主元 pivot)所在列严格右于上一行;主元下方全为 0。
  • 简化行阶梯形(reduced row echelon form, RREF):在 REF 基础上,主元全为 1,且主元所在列的其它元素全为 0。

RREF 唯一,消元路径不唯一。

2.4 LU 分解

若方阵 可写成

其中 是单位下三角(对角线为 1,下三角为消元乘数), 是上三角,则称其为 LU 分解(LU decomposition)。若消元过程需要交换行,则写成

是置换矩阵(permutation matrix),每行每列恰有一个 1。

3. 为什么这样定义

为什么不直接求 ?因为求逆是 ,而且显式逆的数值误差通常比直接消元更大。LU 把一次 的消元与每次 的三角求解分开: 个右端项的总代价是 ,而逐个求逆再乘是 。

为什么需要 ?如果主元位置是 0(或非常小),消元会除以 0 或放大误差。部分主元法(partial pivoting) 每次选当前列绝对值最大的行交换上来,这就是 的来历。把消元写成三角分解、并分析它如何放大舍入误差,最早的系统工作是 Turing 1948。

为什么 存的是乘数而不是矩阵乘积?因为消元的每一步都是「单位阵 + 一个乘数」,它们的逆只是把乘数变号;把逆按顺序乘起来,恰好得到一个单位下三角,对角线下方就是各步乘数。这就是「存档」的全部内容。

3.1 反事实:如果定义成「不许换行的 」

写起来干净,于是有人规定:LU 分解不允许出现 。取一个不算极端的例子:

精确解:,所以

不换行,用 4 位有效数字算:

  • 乘数 ;
  • 。这个 在 4 位有效数字里被「吃掉」,得 ;
  • 前代:;
  • 回代:,。

得 ,真值 。相对误差 100%——不是「精度差一点」,是整个答案没了。

换行之后(部分主元法,交换两行):,,回代得 ,相对误差 ,正好是 4 位有效数字的极限。

结论: 这个定义在两个地方不够用——主元为 0 时直接除零,主元很小但非 0 时精度悄悄崩掉。所以工程上的定义是 : 不是装饰,它是「先把最大的主元换上来」这个动作的代数记录。部分主元法保证所有乘数满足 ,一旦算出来超过 1,就说明该换行了。

4. 性质与推导

4.1 行变换不改变解集

设 是初等矩阵,则 (两边左乘 )。反过来,因为 可逆,。所以解集完全不变。

4.2 从消元到 LU

对 做消元,相当于左乘一串初等矩阵:

移项得 。记 。每个 是单位下三角,单位下三角对乘法封闭,所以 也是单位下三角,且其第 项就是消去 时用的乘数。于是 。

4.3 复杂度

  • 消元:第 步要更新约 个元素,总计约 次乘加(每次乘加 2 FLOPs),即约 FLOPs。
  • 前代 + 回代:每个右端项约 次乘加,即 FLOPs。
  • 显式求逆:约 FLOPs。

所以 时,一次 LU 约 FLOPs,而每个右端项只要约 FLOPs。这套 的计数与 的标准表述见 Golub & Van Loan 第 3 章。

4.4 行列式与逆

由 ,。(交换次数的奇偶), 是对角线乘积。所以 。求逆则可以逐列解 ,复用同一个 LU。

5. 例子

5.1 手算: 消元与 LU

取

消元: 得 ; 得 ;再 得 。于是

验证 的第三行:,正是 的第三行。

前代 :;;。

回代 :;;。

所以 。验证:。

行列式:,与直接展开一致。

5.2 手算:需要换行的

取 ,首个主元为 0。交换第 1、2 行,,。消元: 得 ; 得 。因此

验证第三行:,等于 的第三行。,而 ,所以 。

5.3 场景闭环:12 个工况、480 个自由度

输入: 对称正定,fp64 每元素 8 字节,整块占 MB;12 个右端项各 KB。按节点编号优化后带宽约 60,非零元约 个——是稀疏的。

计算:因为 对称正定,实际用 Cholesky()而不是 LU,代价约 FLOPs,正好是 LU 的一半。12 次三角求解是 FLOPs。合计约 。

输出:12 组位移 ,进而算杆件内力、画应力云图,再按规范做包络——每个构件取 12 个工况里最不利的组合,得到配筋量。

成本: FLOPs 在单核 5 GFLOP/s 下约 8 ms。但稀疏 Cholesky 的瓶颈不是 FLOPs,而是填充(fill-in):分解过程中原本为零的位置会变成非零,非零元从 涨到 量级,内存和访存都涨 3 倍以上。这就是工程上要花力气做节点编号重排(AMD、RCM)的原因——把非零元尽量挤到对角线附近,减少填充。

失败条件与兜底:

  • 该换行时没换: 对称正定时 Cholesky 天然稳定,可以不选主元;但一旦模型里有接触、索、支座沉降, 变成不定的,Cholesky 会开根号出负数,直接崩。兜底:检测到非正主元就退回带主元的 LU。
  • 病态:薄壳、或者钢与橡胶垫并存导致刚度差 倍时, 能到 ,位移解的有效位数掉到 6 位以下。兜底:用双精度、并对自由度做尺度化(每个自由度除以其典型量级)再分解。
  • 模型误差远大于数值误差:比起 ,更大的误差来源是「梁的边界条件假设错了」。数值上解得很准,物理上是错的。兜底:做收敛性检查(网格加密一倍,看应力是否稳定),并与实测或规范简化公式对照。

6. 常见误区

  1. 误区:行变换会改变方程组的解。 纠正:三种行变换都是可逆的,解集不变;但数乘一行会把行列式乘 ,交换两行会变号——行列式变了,解没变。

  2. 误区:LU 分解总是不用换行。 纠正:主元为 0 时必须换行;主元很小(即使非 0)也应换行以控制误差,所以实际实现都是 。

  3. 误区: 的对角线也存乘数。 纠正: 是单位下三角,对角线全是 1;乘数在对角线下方。

7. 概念网络

8. 通往大模型:求解器藏在哪一层

出现位置:Transformer 的前向没有显式消元,但训练与分析的许多环节会解线性系统:二阶优化(Newton/K-FAC)、高斯过程回归、线性探针、概率校准、以及某些归一化流。

形状与运算:二阶方法要解 , 是 Hessian 近似。 时一次 LU 约 FLOPs,显存要存 M 个浮点数;这就是全量二阶方法在 LLM 上不可行的原因。实际做法是用对角/低秩近似(如 K-FAC 的分块),把 拆成小块分别做 Cholesky/LU。

为什么需要:LU/Cholesky 把「解方程」与「分解」分离。若同一个 要解多个右端项(多个 batch 的梯度),分解一次即可;若 每步都变,就只能用共轭梯度等迭代法(第 10.4 节)。可检验结论:用 NumPy 对随机 矩阵计时 lu_factor 与 solve,LU 时间约与 成正比,每个额外右端项只与 成正比; 从 1024 增到 2048,前者约 8 倍,后者约 4 倍。

如果这一步算错,用户会看到什么现象:主元没选好,应力云图会出现棋盘格状跳变或负应力——工程师第一反应是「结构有问题」,实际是舍入噪声被放大。LU 复用搞错( 改了却还用旧的 ),位移会系统性偏大或偏小,配筋量跟着偏,这类错误最危险:它不报错,只安静地给出一个「看起来合理」的答案。训练侧的同构现象是二阶优化里用了一个过期的曲率近似,loss 不炸,但收敛停滞,调参的人会误以为是学习率问题。

9. 练习

  1. 概念:为什么行变换不改变解集,却可能改变行列式?各举一种变换说明。
  2. 计算:对 做 LU 分解(不需换行),并解 。
  3. 计算:接上题,用 的对角线求 ,并与直接展开对比。
  4. 计算:,写出 、、,验证 。
  5. 开放:如果 每 10 步才更新一次,而每步有 1000 个右端项,LU 复用能省多少?请用 与 的量级估算。
参考答案
  1. 交换两行:解集不变,行列式变号;数乘一行 :解集不变,行列式乘 。倍加一行:解集与行列式都不变。
  2. 得 ;再用第 2 行消第 3 行,乘数为 ,得 。所以 ,。前代得 ;回代得 ,,。验证 。
  3. 。直接展开:,一致。
  4. ,,,。
  5. 一次 LU 约 ,每个右端项约 :重复消元需 ,复用只需 。 较大时约省 倍; 每 10 步更新也仍然划算。

10. 一页速记

  • 三种行变换:交换、数乘、倍加;都不改变解集,但可能改变行列式。
  • 物理意义 / 现实对应:消元是「逐个消掉约束」,LU 是把消约束的顺序存档;结构分析里 是刚度, 是约束的消除顺序, 是解耦后的自由度。
  • 初等矩阵左乘 = 行变换;它们都可逆。
  • REF/RREF:主元阶梯;RREF 唯一。
  • (或 ): 单位下三角存乘数, 上三角。
  • 消元 ,三角求解每个右端项 ;。

11. 参考文献与致谢

这一页的知识不是凭空来的。下面列出本页直接借用的原始工作与权威整理;正文中的人名、定理名已链接到对应条目。链接优先指向 DOI、arXiv 或可长期访问的原文存档。

  • 高斯(Carl Friedrich Gauss, 1809):Theoria Motus Corporum Coelestium in Sectionibus Conicis Solem Ambientium(1809 原著,Cambridge 2011 影印)。系统使用逐次消去法解观测方程,本页 §2.1 的三种行变换是它的现代形式。Cambridge University Press
  • 图灵(Alan M. Turing, 1948):Rounding-off Errors in Matrix Processes。把消元写成三角分解(,必要时换行)并分析舍入误差,本页「LU + 主元选择」的起点。Quart. J. Mech. Appl. Math.
  • Golub & Van Loan(2013):Matrix Computations(第 4 版)。第 3 章给出 、部分主元法与 FLOPs 的标准表述,本页 §4.3 的计数以它为准。Johns Hopkins University Press

下一篇 → 3.6 转置、对称与分块矩阵

返回 M03 导览去练习场

随堂测 · 5 题

数值难度 1第 1 / 5 题
设 , 是多少?

源文件:03-矩阵与线性映射/05-高斯消元与LU.md

输入关键词开始搜索