5.1 行列式:体积的缩放因子
本节位置:模块 5 · 行列式 | 前置:3.3 矩阵乘法 | 预计:30 分钟
一句话:行列式是线性变换对「有向体积」的缩放倍率;绝对值管大小,符号管定向。
0. 场景引入
凌晨两点,手游项目的美术在导出角色资产。为了「左右手通用」,他把 1.80 m 高的角色整体乘上 scale=(-1, 1, 1):只翻转左右,看上去什么都没变。角色的绑定盒是 1.80 m × 0.55 m × 0.32 m,体积 0.3168 m³;物理组按 1000 kg/m³ 算质量,得到 317 kg。
同一批里还有一个 2.40 m 的 Boss,美术把它放大 1.5 倍。体积、质量都跟着放大 倍:同样的击退力,位移只有原来的 ,手感立刻「变重」。
两件事其实是同一个数学对象:那个负缩放矩阵的行列式是 ,放大矩阵的行列式是 。引擎里所有「体积 × 密度」「体积 × 浮力」的代码都默认缩放因子为正;一旦接进一个 的矩阵,法线朝向、背面剔除、凸包体积会同时出错。
决策:放行负缩放(美术省 2 天返工),还是强制改用 180° 旋转加镜像 UV(多花 2 天,但所有工具的 假设都成立)?
代价:放行后第一次真机测试,角色有一半面片被剔除、看上去透明;布娃娃求解器拿到负质量后直接发散,角色被打飞时冲出地图。
读完本节,你应该能回答三件事:
- 一个缩放/镜像变换的 是多少,负号在引擎里具体对应什么操作?
- 为什么 和「压扁」是同一件事,为什么 大不等于矩阵「大」?
- 概率密度换元时,为什么必须除以 ,而不是乘以 ?
1. 直觉
1.1 单位方格去哪了
二维中, 的两列就是 、 的像。所以 把单位正方形映成由两列张成的平行四边形,它的有向面积就是 。
页首的图就是这一步:面积从 1 变成 。
1.2 符号从哪来
面积非负,但 可正可负。负号记录的是定向(orientation):
- : 到 仍是逆时针,定向保持;
- :顺序反过来,定向翻转(像照镜子); 时两条边共线,面积 0。
💡 一句话直觉: 是「把单位体积放大几倍、有没有翻面」的完整记录。
类比边界:这里的「体积」是 维欧氏体积。换一种范数或换一组非标准基,数值会变;但「是否为 0」不变。
1.3 它在现实世界里对应什么
在 3D 资产管线里,行列式可以写成一句工具文档:「这个变换把 1 m³ 变成多大的平行六面体,以及有没有照镜子。」
| 数学对象 | 资产管线里的对应物 |
|---|---|
| 体积缩放倍率,带定向 | |
| 质量、浮力、碰撞体体积的乘数 | |
| 是否镜像:法线朝里还是朝外 | |
| 所有顶点被压到同一平面,导入器应拒绝 |
量级:一个 变换 ,——1 m² 的贴图被放大到 3.7 m²。三维里 的 ,1 m³ 的碰撞盒变 3.375 m³,质量从 317 kg 变 1069 kg。行列式就是体积的汇率:乘一次就知道换到新空间要乘几。
这个对应在哪里失效:它假设变换是线性的、刚性的。带蒙皮的角色是逐点非线性的,每根骨骼的局部 各不相同,单个 只是近似。另外 依赖单位——把长度单位从 m 换成 cm, 要乘 ,只有「是否为 0」和符号不变。
2. 定义
2.1 二阶行列式
对 ,定义 :主对角线乘积减副对角线乘积。它也是两列 、 的二维叉积。
2.2 三阶与 阶
对 矩阵,沿第一行展开:
三个 行列式分别是删掉该元素所在行、列后的「余子式(minor)」,符号按 交替。 阶用同样的递归方式定义,完整规则见 5.2。
2.3 几何定义
设 可测, 为 矩阵,则 。也就是说: 把每个区域的体积统一放大 倍。线性变换在每个点处的局部缩放相同,所以整体也相同。
把 的 个列向量看成平行多面体的 条棱,其有向体积就是 ,普通体积是 。有向体积的严格定义见 Spivak。
3. 为什么这样定义
我们想要一个数,同时回答:体积放大了几倍?空间有没有被压扁?定向有没有翻转?
范数做不到: 大不代表体积大,也不告诉你是否奇异。秩只告诉你「压扁了没有」,不告诉你「放大几倍」。
行列式是满足下面三条的最简函数,而且被这三条唯一确定:
- 对每一行(或每一列)线性;
- 两行相同则值为 0(等价于交换两行变号);
- 。
这三条正是「有向体积」必须满足的:单位立方体体积为 1,棱向量翻倍则体积翻倍,两条棱重合则体积为 0。这三条也是 Horn & Johnson 第 0 章讨论行列式的起点;5.2 会从这里推出全部计算规则。
3.1 反事实:把「对角线乘积」当行列式会坏在哪
一个很省事的定义是 。它对对角阵、三角阵都正确,很容易通过单元测试。取 90° 旋转
旋转把单位正方形转成单位正方形,面积仍是 1,而且 确实存在。按 的判据,这个可逆变换会被判成「把平面压扁了」。
再看奇异矩阵 :两列共线,,平面被压成一条直线;而 ,它被判成可逆。于是你会为一个没有唯一解的方程算出一组坐标。
更根本的是, 不满足定义里的任何一条好性质:它不满足多线性(把第一行写成两行之和,乘积不会相应拆开),也不满足「两行相同则为 0」。所以它既不能当体积,也不能当可逆性判据——只是在对角阵上碰巧正确。
4. 性质与推导
4.1 的面积公式从哪来
设两列 、。平行四边形面积 = 底 × 高,于是
所以 。取绝对值是因为面积非负; 的符号被丢掉了。
4.2 几种基本变换的
| 变换 | 矩阵 | 几何效果 | |
|---|---|---|---|
| 旋转(rotation) | 1 | 保面积、保定向 | |
| 关于 轴反射(reflection) | 保面积、翻定向 | ||
| 缩放(scaling) | 面积乘 | ||
| 剪切(shear) | 1 | 保面积、形状变斜 | |
| 投影到 轴 | 0 | 压成一条线 |
旋转的 :。剪切保面积,是因为它把正方形推成同底等高的平行四边形。
4.3 就是降维
的列线性相关 。几何上,至少有一个方向被压没了, 维体积变成 0。这也是 5.3 中「 可逆」的来源。
5. 例子
5.1 手算:一个 矩阵
取 ,则 。
单位正方形的四个顶点 、、、 被映到 、、、。按顺序围成平行四边形,用鞋带公式:
所以 。也可以直接算两列的二维叉积:。
5.2 手算:三种变换
- 剪切 :。单位正方形变成顶点 的平行四边形,底 1、高 1,面积仍为 1。
- 缩放 :,面积变 6 倍。
- 反射 :。面积不变,但 、,逆时针变顺时针。
奇异矩阵 :。两列共线,单位正方形被压到直线 上,面积 0。
5.3 场景:数据云的面积
个点均匀落在单位圆盘(面积 )。经线性层 变换后,点云落在椭圆里,面积是 。
若原密度是 (圆盘内),则数据空间密度是 。不除以 3,密度积分为 3,就不是概率分布。5.4 会把它推广到非线性的 。
5.4 场景闭环:一次资产导入的体积检查
输入:一个 12 万个三角形的角色,绑定盒 1.80 m × 0.55 m × 0.32 m,体积 0.3168 m³;导入变换 (镜像再放大)。矩阵只有 9 个数。
计算:用 §2.2 的三阶展开,9 次乘法、6 次加减:,。碰撞体体积 m³,按 1000 kg/m³ 得 1069 kg。
输出:导入器写下两条元数据——,所以翻转法线、修正切空间手性;质量用 ,1069 kg。渲染和物理各取一个数,谁都不用猜另一个。
成本:一次 行列式 9 次乘法、6 次加减,纳秒级;贵的是判定之后的重算——12 万个三角形的法线重算约 次叉积,单核几毫秒。用 9 次乘法拦住一次「全模型法线翻错」的返工,是这条管线里性价比最高的一步。
失败条件:
- 用了对角线乘积: 是对角阵,这次碰巧算对。换成带旋转的绑定矩阵(对角元出现 0、而矩阵仍可逆),对角线乘积会把可逆变换判成奇异,模型被拒绝导入。兜底:单元测试里放一个 90° 旋转。
- 漏掉绝对值:质量变成 kg,求解器把角色往下拽。兜底:质量入口断言 。
- 非均匀缩放加蒙皮:每根骨骼矩阵的局部 不同,单个常数只是近似。兜底:逐骨骼取 ,并在蒙皮前做体积归一化。
6. 常见误区
-
误区: 就是面积。 纠正: 是面积缩放倍率,而且带符号。单位正方形变换后的面积是 ,不是 。
-
误区: 大说明矩阵「大」或「病态」。 纠正: 依赖尺度。 的 ,条件数(condition number)却是 ; 的 ,条件数是 1。
-
误区: 说明矩阵元素都很小。 纠正: 元素不小,,因为两列共线。 的本质是降维。
7. 概念网络
- 前置:3.3 矩阵乘法 —— 矩阵首先是映射, 描述它如何改变体积。
- 后续:5.2 行列式的性质与计算 —— 从三条公理推出高效算法。
- 后续:5.3 逆、Cramer 法则与伴随矩阵 —— 是可逆的判据。
- 后续:5.4 行列式与 Jacobian —— 非线性映射的局部体积缩放。
- 关联:1.3 点积 —— 4.1 的面积推导用到点积。
- 关联:1.7 叉积 —— 二维叉积就是 行列式。
- 关联:6.2 特征多项式 —— 等于特征值之积,迹等于特征值之和。
8. 通往大模型:概率密度为什么要乘
出现位置:变量替换(change of variables)与归一化流(normalizing flow,Rezende & Mohamed)。当 可逆时,密度不能简单搬移,而要按体积变化修正:
形状:,,Jacobian , 是一个标量。 时就是第 5.3 节那个 3; 时它可能小到 。
为什么需要:生成模型要在数据空间算似然,而似然对「体积怎么被拉伸」极其敏感。少了这个因子,密度积分不等于 1,最大似然目标就是错的。
数值坑:直接算 再取对数,在 大时几乎必然上溢或下溢。 在 float64 里直接变成 0, 得到 。正确做法是用 np.linalg.slogdet,或对 LU 分解的对角元取对数再求和:。
算错时下游看到什么:密度不再归一化—— 会等于 或 ,而不是 1。在 flow 里,训练目标会稳定地偏好某一类体积缩放,评估时 NLL 和真实样本质量对不上。更直接的是数值故障: 下溢成 0, 得到 ,一次前向就让 loss 变成 NaN。
可检验结论:若 ,潜空间单位正方形(概率质量 )映射到面积 6 的长方形,数据密度应为潜密度的 ;对密度积分应回到 1。跑 lab05 的随机面积比实验可验证。
9. 练习
- 概念: 时, 对基向量做了什么?为什么说它「翻转了定向」?
- 计算:。求 、单位正方形像的面积,以及点 的像。
- 计算:,求 和单位立方体像的体积;再判断 是否奇异。
- 场景:。单位圆盘经 后面积是多少?定向翻转了吗?
- 开放:已知 ,能否断定 是旋转?举一个反例,并说明还需要什么信息才能刻画 。
参考答案
- 两列的顺序从「逆时针」变成「顺时针」,例如 变成 。有向面积由正变负;普通面积取绝对值,仍为正。
- ;面积 11;像 。
- ,单位立方体像的体积 6; 的第二行是第一行的 2 倍,三行线性相关,,奇异。
- ,面积变为 ;,定向不变( 是旋转 再拉伸 2 倍)。
- 不能。剪切 的 ,保面积但不是旋转。还需要 且 (或奇异值全为 1 且行列式为正)。
10. 一页速记
- 是有向体积的缩放倍率:体积乘 ,定向看符号。
- 物理意义 / 现实对应: 是体积的汇率;1 m³ 的模型过 后是 m³,符号告诉你有没有照镜子。
- :,等于两列的二维叉积。
- 列线性相关 降维 不可逆。
- 旋转 ,反射 ,缩放 的 ,剪切 。
- 变量替换除以 ;高维用 ,别直接连乘。
11. 参考文献与致谢
这一页的知识不是凭空来的。下面列出本页直接借用的原始工作与权威整理;正文中的人名、定理名已链接到对应条目。链接优先指向 DOI、arXiv 或可长期访问的原文存档。
- Horn & Johnson(Roger A. Horn & Charles R. Johnson, 2012):Matrix Analysis(2nd ed.)。第 0 章系统整理了行列式的多线性与交错性、 不可逆以及 ,是本页第 3 节与第 4.3 节所用结论的标准出处。Cambridge University Press
- Spivak(Michael Spivak, 1965):Calculus on Manifolds。用 定义平行多面体的有向体积,把「绝对值管大小、符号管定向」写成可证明的命题;本页第 1.2 节与第 2.3 节的几何语言据此展开。CRC Press 重印
- Rezende & Mohamed(Danilo Jimenez Rezende & Shakir Mohamed, 2015):Variational Inference with Normalizing Flows。归一化流用 把密度搬到数据空间,本页第 8 节那条密度公式就出自这里。arXiv:1505.05770
下一篇 → 5.2 行列式的性质与计算
随堂测 · 4 题
源文件:05-行列式/01-行列式几何.md