5.2 行列式的性质与计算
本节位置:模块 5 · 行列式 | 前置:5.1 | 预计:40 分钟
一句话:行列式被「多线性 + 交换变号 + 单位阵为 1」三条规则唯一确定;这三条既是几何,也是 算法。
0. 场景引入
材料组凌晨收到一条单晶精修结果:一个新合成的三斜晶胞,三条晶格矢量(单位 nm)
他们要在组会上回答一个很实际的问题:这个晶胞里装得下几个分子?答案决定密度,密度又决定「掺杂 3%」的结论站不站得住。
手算体积:把三条矢量按行排成矩阵,按第一行展开,
晶胞含 个分子、分子量 136.0 g/mol 时,质量 g,密度 g/cm³。
注意体积不是「三个晶格常数相乘」:这里 碰巧也是 0.108,因为这个标准取向把矩阵变成了下三角;换一个取向,乘积会变,体积不会(§3.1)。
麻烦在精度:另一次精修把 报成 0.475(差 1%,在误差棒内),体积变成 0.1069 nm³,密度 8.45。两个数都「对」,但只能报一个。
决策:按第一次的 8.36 报,还是按第二次的 8.45 报并附误差棒?代价:报错,审稿人用另一组数复算对不上,整篇返修;重测一次单晶要占机时 8 小时。
读完本节,你应该能回答三件事:
- 为什么行列式恰好等于晶胞体积,按行展开、消元、Leibniz 公式为什么给同一个数?
- 交换两行为什么要变号?在晶体学里这个符号对应什么?
- 一个 的行列式,为什么不能「按定义」算?
1. 直觉
是有向体积的缩放倍率(5.1)。对矩阵做行操作,就是在移动平行多面体的棱,于是体积有三种基本变化:
- 剪切:把一行加上另一行的倍数,底面和高都不变 → 体积不变;
- 拉伸:把一行乘 ,体积也乘 ;
- 交换:同一个平行多面体,棱的顺序反了 → 有向体积变号。
💡 一句话直觉:行列式就是这三条几何规则的算术化;所有计算公式都是它们的推论。
1.1 它在现实世界里对应什么
晶体学的整条定量链路都挂在这个数上:三条晶格矢量张成的平行六面体体积,就是晶胞体积。
| 数学对象 | 晶体学里的对应物 |
|---|---|
| 矩阵的行 | 三条晶格矢量 |
| 晶胞体积,密度公式的分母 | |
| 交换两行 | 换晶轴顺序(右手系变左手系),体积不变、符号反 |
| 某行加另一行的 倍 | 换一个等价晶胞取向:晶胞变歪,体积不变 |
| 三条矢量共面,晶胞塌成一片,密度没有定义 |
量级:硅的晶格常数 nm,立方晶胞体积 nm³;一个晶胞含 8 个原子、摩尔质量 28.09 g/mol,密度是 g/cm³,与手册值一致。这个数只由一个 行列式决定。
这个对应在哪里失效:晶胞体积是平行六面体的体积,不是原子实际占的体积,堆积率要另算。温度与压力会改变晶格常数, 也跟着变。行列式还依赖单位:长度用 Å 而不是 nm,数值要乘 ,只有「是否为 0」和符号不变。
2. 定义
2.1 三条公理
把 矩阵的行记为 。行列式是满足以下三条的函数:
- 多线性(multilinear):固定其它行, 对某一行线性;
- 交错(alternating):交换两行,值变号(等价地,两行相同则为 0);
- 归一:。
注意「多线性」不是对整个矩阵线性:。
2.2 余子式与按行展开
删掉 所在的第 行、第 列,剩下 的行列式叫余子式(minor) ;带符号的 叫代数余子式(cofactor)。沿第 行展开:
逐项读法:这一行的每个元素,乘以「删掉它所在行列后的行列式」,符号按 的棋盘交替。
2.3 Leibniz 公式与等价性
Leibniz 用排列的奇偶性写出的展开式:
读法:每一行挑一个不同列的元素相乘,共有 种挑法; 记录「第 行挑了第 列」, 是排列的奇偶性( 或 )。
公理、余子式展开、Leibniz 公式给出同一个数。理由在 §3:把每一行按标准基展开,只有「每行取不同列」的项存活,系数正好是 。
3. 为什么这样定义
唯一性:假设 满足三条公理。把第 1 行写成标准基的线性组合,用多线性拆开;再拆第 2 行……最终只剩 行各取一个不同标准基向量的项。若有两行取到同一个基向量,该行重复,由交错性该项为 0。存活的项恰好对应一个排列 ,系数是 ,于是 就是 Leibniz 公式。
所以三条公理唯一确定了有向体积(行列式性质的系统整理见 Horn & Johnson 第 0 章)。乘法定理 也由此而来:先做 把体积乘 ,再做 乘 ,总共乘 。从计算角度看,公理直接给出消元算法:用行变换把矩阵变成三角阵。
3.1 反事实:展开时漏掉 会坏在哪
手写按行展开时,最常见的 bug 是把符号全写成 :
第 0 节那个晶胞矩阵的第一行只有 非零,另外两个系数是 0,所以 碰巧还是 0.108——这正是符号错误能躲过测试的原因。换一个一般的 :
因为 、,三行共面,晶胞体积必须是 0,密度公式的分母也是 0。而
一个体积为零、物理上不存在的晶胞,被判成 nm³。 负号还会让你在密度公式里得到负质量。
再看 : 的正确行列式是 ,漏符号得到 ——符号反了,大小也差 5 倍。
坏在交错性(alternating):交换两行应当只变号、大小不变;而 把上面这个 的前两行交换后得到 ,连大小都变了。丢掉这一条, 就不再是体积,也不再能判断可逆。
4. 性质与推导
4.1 行变换三规则
| 操作 | 如何变 | 原因 |
|---|---|---|
| 交换两行 | 乘 | 定向翻转 |
| 某行乘 | 乘 | 体积按比例缩放 |
| 某行加另一行的 倍 | 不变 | 剪切保体积 |
| 两行相同或成比例 | 变为 0 | 降维 |
对列做同样的操作,结论一样(因为 )。
4.2 行交换为什么变号
二维中,把两行看成向量 ,有向面积就是二维叉积:
叉积反对称:交换两个参数,值变号。几何上,平行四边形的形状没变,但从 转到 的方向反了,定向翻转。 维中,交换两行等于左乘置换矩阵 ,而 ,所以 。
由此还能推出「两行相同则 」:交换这两行矩阵不变,但值要变号,故 ,只能为 0。
4.3 三角阵与消元
上三角阵沿第一列展开(只有 非零)反复进行,得 。一般矩阵用带行交换的高斯消元化成 ,记录交换次数 :
复杂度 。若某一步主元(pivot)为 0 且下方没有非零元素,则 。
4.4 常用推论
,但 ;;;(每行都被乘了 )。按任意一行或列展开都成立,选零多的那行最省事。
5. 例子
5.1 按行展开:一个完整的
取 ,沿第一行。三个余子式:
代入 。换一列验证:沿第二列,、、,于是 ,一致。
5.2 消元法:同一个矩阵
用 (倍加,不改变 )得 。按第一列展开,。
再消一步 ,对角元为 ,乘积也是 22。两种方法结果相同,但消元只需 。
5.3 三角阵与乘法定理
的 。
取 ()、()。则 ,。
5.4 场景:判断协方差矩阵是否接近奇异
一个 的协方差矩阵,元素量级 , 可能是 :直接算会下溢成 0,和真正的奇异分不清。实际做法不是「算 看是否为 0」,而是看 LU 的主元、最小奇异值或条件数。
5.5 场景闭环: 的行列式,从输入到决策
输入:把第 0 节的晶胞模型扩成 100 个自由度的形变矩阵,得到一个 的矩阵(也可以是流模型里 的 Jacobian)。双精度,占 KB,能塞进二级缓存。
计算:三条路线的时间差不是几倍,是天文数字。
| 方法 | 运算量 | 单核 1 GFLOP/s 下 |
|---|---|---|
| Leibniz 公式 | 项 | 秒 |
| 余子式递归展开 | 同一量级 | 同上 |
| 带主元 LU | 次乘加 | ms |
按每秒一亿项算, 项要 秒;宇宙年龄约 秒,还差 倍。这不是「慢一点」,是永远算不完。 记一个熟悉的锚点: 项,每秒一亿项也要 770 年——20 维就已经不可行。
输出:选 LU,输出 ;要密度或似然就再取对数,。一次分解 0.67 ms,一天 86 400 秒能算约 次,足够放进训练循环。
成本:0.67 ms 与 80 KB 内存。同样的矩阵若用 Leibniz,花多少钱都算不完——这就是 与 的真实含义。
失败条件:
- 近奇异:三斜晶胞接近共面时主元可能小到 , 下溢成 0,密度分母为 0。兜底:看主元比值或条件数,不要只问「 是否为 0」。
- 不选主元:主元为 0 时消元直接除零。兜底:部分选主元,并记录交换次数 的符号。
- 忘记绝对值: 为负时密度为负。兜底:体积、密度入口统一取 ,并断言为正。
6. 常见误区
-
误区:。 纠正:取 、,左边 ,右边 。 是多线性的,不是可加的。
-
误区:。 纠正:每一行都被乘了 , 矩阵要乘 。例如 。
-
误区:消元时「把某行乘 」也不改变 。 纠正:只有「某行加另一行的倍数」不变;乘 会让 乘 ,交换会让它变号。手算时要记录这两类操作。
-
误区:Leibniz 公式里 是「列 对应行 」也无所谓。 纠正: 是「第 行取的列号」。索引写反会改变符号;按行展开的 也来自同一套排列符号。
7. 概念网络
- 前置:5.1 行列式几何 —— 是体积缩放因子,负号是定向。
- 后续:5.3 逆与 Cramer 法则 —— 用余子式构造伴随矩阵。
- 后续:5.4 行列式与 Jacobian —— 非线性版本的体积缩放。
- 关联:1.7 叉积 —— 二维行列式就是二维叉积。
- 关联:6.2 特征多项式 —— 的根是特征值。
- 关联:3.5 高斯消元与 LU —— 消元过程同时给出 与解方程。
8. 通往大模型: 而不是
出现位置:归一化流的训练目标、多元高斯密度、以及任何「判断大矩阵是否可逆」的代码。
形状:, 常是 512、1024 甚至更大。 是一个标量,但它的大小随 指数变化。
为什么需要:流模型要算 ()。若先算 再取对数:、每维缩放 时,,float64 直接下溢为 0, 得到 ;若每维缩放 ,则上溢为 inf。
正确做法是 LU 分解后对对角元取对数求和:
NumPy 的 np.linalg.slogdet 返回 (sign, logabsdet),正是这个思路。、对角全为 时,它给出 sign=1.0、logabsdet≈-2302.585,而 np.linalg.det 返回 0.0。
可检验结论:用 det 判断可逆性在数值上不可靠;det 小不等于病态( 的 ,条件数为 1)。工程上判断「是否接近奇异」要看条件数或最小奇异值,算似然要用 slogdet。
算错时下游看到什么:用 det 判断可逆,、元素量级 的协方差矩阵很可能下溢成 0,被判成奇异,下游的 Cholesky 分解或采样会直接抛错、返回 NaN;若符号弄反, 在实数域没有定义,loss 一次前向就变 NaN。
9. 练习
- 概念:判断正误并说明理由:(a) ;(b) ;(c) ;(d) 交换两行变号;(e) 某行加另一行的倍数不变;(f) 。
- 计算:用按行展开求 ,再用行变换验算。
- 计算:,求 、、、。
- 计算:用消元求 ,注意记录行交换带来的符号。
- 开放:为什么数值软件用 LU 消元而不是 Leibniz 公式或余子式展开?从复杂度和浮点误差两个角度回答。
参考答案
- (a) 错, 时左边 0、右边 2;(b) 对;(c) 错,应为 ;(d) 对,定向翻转;(e) 对,剪切保体积;(f) 对,转置不改变行列式。
- 沿第一行:。行变换: 得 ,。
- ;;;。
- 交换 得 , 乘 。再 得 ,其 。原矩阵 。
- Leibniz 有 项, 已不可行;余子式展开递归也是指数级。LU 是 ,且带主元选取,误差约为 量级;代价是可能丢失「精确为 0」的判断,需要配合秩/奇异值检查。
10. 一页速记
- 三条公理:多线性、交换变号、;它们唯一确定行列式。
- 物理意义 / 现实对应: 是晶胞体积——密度公式的分母;符号记录晶轴取向(右手或左手)。
- 行变换:交换变号、某行乘 乘 、倍加不变;两行成比例则 。
- 三角阵 ;消元后 ,。
- 按行展开 ;Leibniz 有 项。
- ,,。
- 大矩阵算似然用 (
slogdet/ LU 对角元),别直接连乘。
11. 参考文献与致谢
这一页的知识不是凭空来的。下面列出本页直接借用的原始工作与权威整理;正文中的人名、定理名已链接到对应条目。链接优先指向 DOI、arXiv 或可长期访问的原文存档。
- Knobloch(Eberhard Knobloch, 2001):Déterminants et élimination chez Leibniz。依据 Leibniz 1693 年写给 l’Hôpital 的信,还原了他用排列的奇偶性写出 项带符号和的过程——本页第 2.3 节的 Leibniz 公式即源于此。Revue d’histoire des sciences
- Horn & Johnson(Roger A. Horn & Charles R. Johnson, 2012):Matrix Analysis(2nd ed.)。第 0 章系统整理了余子式展开、乘积定理以及行列式的多线性与交错性,对应本页第 2、3 节。Cambridge University Press
- Golub & Van Loan(Gene H. Golub & Charles F. Van Loan, 2012):Matrix Computations(4th ed.)。用带主元的高斯消元把 化成 ,并说明大矩阵为何要在对数域累加 ;本页第 4.3 节与第 8 节的算法依据。Johns Hopkins University Press
下一篇 → 5.3 逆、Cramer 法则与伴随矩阵
随堂测 · 5 题
源文件:05-行列式/02-行列式的性质与计算.md