课程/M05/行列式的性质与计算
M05 · 行列式核心约 40 分钟

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 小时。

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

  1. 为什么行列式恰好等于晶胞体积,按行展开、消元、Leibniz 公式为什么给同一个数?
  2. 交换两行为什么要变号?在晶体学里这个符号对应什么?
  3. 一个 的行列式,为什么不能「按定义」算?

1. 直觉

是有向体积的缩放倍率(5.1)。对矩阵做行操作,就是在移动平行多面体的棱,于是体积有三种基本变化:

  • 剪切:把一行加上另一行的倍数,底面和高都不变 → 体积不变;
  • 拉伸:把一行乘 ,体积也乘 ;
  • 交换:同一个平行多面体,棱的顺序反了 → 有向体积变号。

💡 一句话直觉:行列式就是这三条几何规则的算术化;所有计算公式都是它们的推论。

1.1 它在现实世界里对应什么

晶体学的整条定量链路都挂在这个数上:三条晶格矢量张成的平行六面体体积,就是晶胞体积。

数学对象晶体学里的对应物
矩阵的行三条晶格矢量
晶胞体积,密度公式的分母
交换两行换晶轴顺序(右手系变左手系),体积不变、符号反
某行加另一行的 倍换一个等价晶胞取向:晶胞变歪,体积不变
三条矢量共面,晶胞塌成一片,密度没有定义

量级:硅的晶格常数 nm,立方晶胞体积 nm³;一个晶胞含 8 个原子、摩尔质量 28.09 g/mol,密度是 g/cm³,与手册值一致。这个数只由一个 行列式决定。

这个对应在哪里失效:晶胞体积是平行六面体的体积,不是原子实际占的体积,堆积率要另算。温度与压力会改变晶格常数, 也跟着变。行列式还依赖单位:长度用 Å 而不是 nm,数值要乘 ,只有「是否为 0」和符号不变。

2. 定义

2.1 三条公理

把 矩阵的行记为 。行列式是满足以下三条的函数:

  1. 多线性(multilinear):固定其它行, 对某一行线性;
  2. 交错(alternating):交换两行,值变号(等价地,两行相同则为 0);
  3. 归一:。

注意「多线性」不是对整个矩阵线性:。

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. 常见误区

  1. 误区:。 纠正:取 、,左边 ,右边 。 是多线性的,不是可加的。

  2. 误区:。 纠正:每一行都被乘了 , 矩阵要乘 。例如 。

  3. 误区:消元时「把某行乘 」也不改变 。 纠正:只有「某行加另一行的倍数」不变;乘 会让 乘 ,交换会让它变号。手算时要记录这两类操作。

  4. 误区:Leibniz 公式里 是「列 对应行 」也无所谓。 纠正: 是「第 行取的列号」。索引写反会改变符号;按行展开的 也来自同一套排列符号。

7. 概念网络

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. 练习

  1. 概念:判断正误并说明理由:(a) ;(b) ;(c) ;(d) 交换两行变号;(e) 某行加另一行的倍数不变;(f) 。
  2. 计算:用按行展开求 ,再用行变换验算。
  3. 计算:,求 、、、。
  4. 计算:用消元求 ,注意记录行交换带来的符号。
  5. 开放:为什么数值软件用 LU 消元而不是 Leibniz 公式或余子式展开?从复杂度和浮点误差两个角度回答。
参考答案
  1. (a) 错, 时左边 0、右边 2;(b) 对;(c) 错,应为 ;(d) 对,定向翻转;(e) 对,剪切保体积;(f) 对,转置不改变行列式。
  2. 沿第一行:。行变换: 得 ,。
  3. ;;;。
  4. 交换 得 , 乘 。再 得 ,其 。原矩阵 。
  5. 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 法则与伴随矩阵

返回 M05 导览去练习场

随堂测 · 5 题

数值难度 2第 1 / 5 题
,按第一行展开求 。

源文件:05-行列式/02-行列式的性质与计算.md

输入关键词开始搜索