课程/M05/行列式:体积的缩放因子
M05 · 行列式核心约 30 分钟
单位正方形被矩阵映射为面积 3 的平行四边形
单位正方形经过 A 变成平行四边形;面积从 1 变为 |det A|=3。

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. 一个缩放/镜像变换的 是多少,负号在引擎里具体对应什么操作?
  2. 为什么 和「压扁」是同一件事,为什么 大不等于矩阵「大」?
  3. 概率密度换元时,为什么必须除以 ,而不是乘以 ?

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

  1. 误区: 就是面积。 纠正: 是面积缩放倍率,而且带符号。单位正方形变换后的面积是 ,不是 。

  2. 误区: 大说明矩阵「大」或「病态」。 纠正: 依赖尺度。 的 ,条件数(condition number)却是 ; 的 ,条件数是 1。

  3. 误区: 说明矩阵元素都很小。 纠正: 元素不小,,因为两列共线。 的本质是降维。

7. 概念网络

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

  1. 概念: 时, 对基向量做了什么?为什么说它「翻转了定向」?
  2. 计算:。求 、单位正方形像的面积,以及点 的像。
  3. 计算:,求 和单位立方体像的体积;再判断 是否奇异。
  4. 场景:。单位圆盘经 后面积是多少?定向翻转了吗?
  5. 开放:已知 ,能否断定 是旋转?举一个反例,并说明还需要什么信息才能刻画 。
参考答案
  1. 两列的顺序从「逆时针」变成「顺时针」,例如 变成 。有向面积由正变负;普通面积取绝对值,仍为正。
  2. ;面积 11;像 。
  3. ,单位立方体像的体积 6; 的第二行是第一行的 2 倍,三行线性相关,,奇异。
  4. ,面积变为 ;,定向不变( 是旋转 再拉伸 2 倍)。
  5. 不能。剪切 的 ,保面积但不是旋转。还需要 且 (或奇异值全为 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 行列式的性质与计算

返回 M05 导览去练习场

随堂测 · 4 题

数值难度 1第 1 / 4 题
,求 。

源文件:05-行列式/01-行列式几何.md

输入关键词开始搜索