行列式:面积、体积与可逆性
上一章里,我们把矩阵看成了一台变换机器。它接过一个向量,把它旋转、拉伸、剪切、反射,或者压到更低的维度。现在换一个问题:如果把一整块区域交给这台机器,它会变成多大?
最省事的测试对象是单位正方形。它的面积是 1,两条边正好是标准基向量。矩阵把这两条边送到自己的两列,于是正方形变成一个平行四边形。这个新图形的面积,直接告诉我们矩阵把所有面积放大或缩小了多少倍。
负责记录这件事的数就是行列式,记作 detA。不过它比普通面积多保留了一点信息:正负号还会告诉我们,变换有没有把空间的朝向翻过来。
先把本章最重要的画面放在心里:∣detA∣ 是面积或体积的缩放倍数;detA 的正负记录方向;detA=0 表示空间被压扁,某些不同输入从此无法区分。
把单位正方形交给矩阵
矩阵的两列就是两条新边
设
A=[acbd]
单位正方形由
e1=[10],e
这两条边张成。矩阵作用以后,边变成
Ae1=[ac],A
这正是 A 的第一列和第二列。正方形内部任意一点都能写成
x=se1+te2,0≤s,t≤1
线性变换不会破坏这种组合:
Ax=sAe1+tAe2
所以四条直边仍然是直边,整块正方形恰好变成由 Ae1、Ae2 张成的平行四边形。行列式的绝对值就是它的面积:
变换后面积=∣detA∣
既然原图面积是 1,这里的面积也就是缩放倍数。若 ∣detA∣=5,一块面积为 7 的区域会变成面积为 35 的区域;若 ∣detA∣=,它就只剩原来的四分之一。
为什么不只对单位正方形成立?可以先把由许多小方格拼出的图形逐块变换,每一小格都按同一比例缩放,总面积当然也按同一比例缩放。对曲边区域,把网格取得越来越细,结论仍然保持。线性变换用的是全空间统一的一套规则,不会走到某个角落突然换倍率。
你可以在实验台里先试三类矩阵:面积放大的矩阵、只有剪切的矩阵,以及把两列调成共线的矩阵。观察图形形状会怎样变,同时盯住 detA 和 ∣detA∣ 的区别。
面积为什么带绝对值
普通面积不会是负数,但行列式可能是负数。负号记录的不是“负面积”,而是有顺序的两条边把朝向翻转了。
在平面上,我们把 (e1,e2) 的顺序定为正方向:从 e1 转到 是逆时针。矩阵变换后,按同样顺序看 :
- detA>0:顺序仍是正方向,朝向保持。
- detA<0:顺序变成反方向,朝向翻转。
- detA=0:两条边共线,已经围不出面积,谈不上朝向。

正负号记录方向是否翻转,绝对值记录面积大小;行列式为零时,二维面积彻底消失。
例如关于 y 轴的反射矩阵是
H=[−1001]
它把单位正方形翻到另一侧,面积仍是 1,但方向被翻转:
detH=−1,∣detH∣=1
看到负行列式时,先把“大小”和“方向”拆开读:绝对值回答图形有多大,负号回答朝向是否翻转。把 detA=−3 说成“面积是负三”是不对的;应说面积放大 3 倍,同时方向翻转。
为什么二阶公式是 ad−bc
第一次看到
det[acbd]=ad−bc
很容易把它当成一条需要硬背的规则。其实这条公式是被“有向面积应该怎样工作”逼出来的。
先列出有向面积必须做到的事
把两条有顺序的边 u,v 围出的有向面积记作 D(u,v)。它至少要满足四件很自然的事:
- 单位正方形的有向面积是 1,所以 D(e1,e2)=1。
- 两条边相同或共线时围不出面积,所以 。
现在把矩阵的两列写成标准基向量的组合:
u=[ac]=ae
沿两条边分别拆开,有向面积变成四项:
D(u,
第一项和最后一项都由两条同方向的边组成,面积为 0。中间两项一正一负:
D(u,v)=ad−bc
所以 ad−bc 并不是随手挑出的交叉乘法。ad 是正方向的贡献,bc 是反方向的贡献;相减后留下净的有向面积。
例子:同一个数同时回答三个问题
设
A=[213−1]
它把单位正方形的两条边送到 (2,1) 和 (3,−1)。计算得
detA=2⋅(−1)−3⋅1=−5
这个 −5 可以分三层读:
- 新平行四边形的普通面积是 ∣−5∣=5。
- 任意二维区域的面积都会放大 5 倍。
- 负号表示两条边的先后方向被翻转。
若只想求由 u=(2,1)、v=(3,−1) 和原点围成的三角形面积,还要除以 2,因为那只是平行四边形的一半:
三角形面积=21∣detA∣=25
从平面走到三维和更高维
单位立方体变成平行六面体
三维矩阵的三列分别是 Ae1,Ae2,Ae3。它们把单位立方体的三条边送到新的位置,围出一个平行六面体。
若
A=∣a
那么新平行六面体的体积是
体积=∣detA∣
这里仍然是绝对值负责普通体积,符号负责方向。三维里可以用右手系来理解正方向:若有顺序的三条边保持右手系,行列式为正;若变成左手系,行列式为负。
从“底面积乘高”也能看出三维行列式在做什么。先由两条边围出底面,再取第三条边在垂直于底面的方向上贡献的高度。只沿底面滑动第三条边不会改变高度,所以剪切不改变体积;把第三条边的垂直分量放大两倍,体积才会放大两倍。
若学过叉积,三列为 u,v,w 时,还可以写成
det∣u∣
右边是标量三重积。它只是同一件事的另一种写法:v×w 给出带方向的底面积,再与 u 做点积取出有方向的高度。
例子:读出三维体积
考虑
B=102
稍后我们会系统学习展开法。先给出计算结果:
detB=16
于是三列围出的平行六面体体积是 16。任意一个三维物体经 B 变换后,体积也会变成原来的 16 倍。因为行列式为正,方向保持。
n 维里仍是同一句话
四维以后很难再画图,但规则没有改变。n×n 矩阵把 n 维单位盒子的 n 条边送到自己的 n 列,∣detA∣ 是 n 维体积的缩放倍数。
这也解释了为什么本章只对方阵谈行列式。若输入和输出维数不同,矩阵会把一个维度的对象送到另一个维度,不能再用“同维单位体积缩放倍数”这一个数完整描述。
detA=0 到底丢了什么
“面积或体积变成零”听起来像一个几何结果,它背后其实是一件更严重的事:变换丢失了信息。
两列共线时,整个平面被压成一条线
看矩阵
C=[1224]
第二列是第一列的两倍。两条新边只能沿同一条直线移动,怎么组合都围不出平行四边形:
detC=1⋅4−2⋅2=0
更具体地说,非零向量
z=[2−1]
被送到了零向量:
Cz=[00]
于是对任意输入 x,都有
C(x+z)=Cx+Cz=Cx
x 和 x+z 明明是两个不同输入,输出却完全相同。只看输出时,我们再也无法判断原来是哪一个输入。这就是“不可逆”的信息版本。
三维里同样如此。若三列落在同一平面内,单位立方体会被压成一个平面图形;若三列都共线,还会继续压成一条线。只要维度掉了,三维体积就是零,行列式也就是零。
detA=0 不是“体积恰好算得比较小”,而是一个性质上的分界:列向量没有撑满整个空间,存在非零方向被送到零,多个输入挤到同一个输出,变换无法倒放。
可逆性的等价说法
对 n×n 方阵 A,下面几句话是在描述同一件事:
- A 可逆。
- 对每个 b,方程 Ax=b 都有唯一解。
- A 的列向量线性无关。
- A 的每一列都提供了新方向,秩为 n。
- A 不会把非零向量送到零向量。
若 detA=0,单位盒子仍有非零体积,空间没有掉维;消元时会找到每一列的主元,因此可以把矩阵化成单位矩阵并构造逆矩阵。若 detA=0,至少少了一个主元,也就会出现刚才那样的非零零空间向量。
二阶逆矩阵公式把这条分界直接写在分母里:
A−1=ad−bc1[
只有 ad−bc=0 时才能除。分母为零不是公式临时失灵,而是逆变换本来就不存在。
哪些规则把行列式“钉死”了
几何图像告诉我们行列式该测量什么。要把它推广到任意阶方阵,还需要把“有向体积应该怎样变化”说清楚。
归一化、交换与逐行线性
行列式有三类根本性质:
- 单位矩阵不改变体积和方向,所以 detI=1。
- 交换两行会翻转方向,所以行列式变号。
- 行列式对每一行分别是线性的:一行放大 k 倍,行列式放大 k 倍;一行拆成两个向量之和,行列式也拆成两项之和。
这里的“分别线性”很重要。固定其他行时,行列式对当前这一行线性;它并不是把整张矩阵当成一个向量来做线性函数。
例如在 n 维里,把整张矩阵乘 k,等于把 n 行都各乘一次 k:
det(kA)=kndetA
而不是一般地等于 kdetA。
两行相同时为什么一定为零
若两行完全相同,交换它们以后矩阵没有变化,但按照交换规则,行列式又必须变号。一个数既等于自己又等于自己的相反数,只能是零。
这个小结论马上解释了“倍加行不改变行列式”。把第 j 行换成 Rj+kRi,按逐行线性拆开:
det(…,Ri
第二项有两行相同,所以等于零。最后只剩原来的行列式。
这些性质不只对行成立,也对列成立。你可以按列理解几何,也可以按行做消元,最后得到的是同一个数。
公式很多时,抓住“单位体积定为 1、交换翻方向、每条边单独线性”就够了。高阶行列式的展开式、行变换规则和三角矩阵公式都能从这几件事推出。
用行变换计算行列式
二阶矩阵直接用 ad−bc 很快。阶数一大,最稳妥的办法通常是消元:把矩阵化成三角矩阵,同时给每一步做行列式记账。
前面是按列看新边,这里为什么能改行?每一种行操作都等于在矩阵左边乘一个初等矩阵,也就是对整个输出空间再做一次交换、缩放或剪切。行列式会把这一步额外变换的体积倍率如实记下来。
三种初等行变换的影响如下。
三角矩阵为什么只乘对角线
若
U=
那么
detU=u11u22⋯unn
可以把它想成逐层量体积:第一层沿一个方向给出 u11,第二层的新高度给出 u22,一直乘到第 n 层。对角线外的星号只会把边斜推,属于剪切,不改变体积。
下三角矩阵也一样。只要某个对角元素为零,对角线乘积就是零,矩阵也不可逆。
例题:消元时只记录一次变号
计算
M=012
的行列式。
左上角是零,先交换前两行:
消元时最常见的错不是算术,而是“顺手把主元行除了一下”却忘了记账。若把一行除以 k,新行列式是旧行列式的 1/k;最后必须把这个因子补回来。只做倍加行通常最省心。
余子式与按行、按列展开
消元适合一般矩阵。若某一行或某一列有很多零,按余子式展开往往更快,而且它把高阶行列式递归地拆成低一阶行列式。
余子式和代数余子式要分清
对 n×n 矩阵 A=(aij),删去第 i 行和第 j 列,剩下一个 方阵。这个小方阵的行列式记作 ,叫作 的余子式。
再配上棋盘式正负号,得到代数余子式:
Cij=(−1)i+jMij
符号从左上角的正号开始交替:
为什么要删去一行一列?因为一旦在展开中选定了 aij,它已经占用了第 i 行和第 j 列。剩下的体积贡献只能从其余行、其余列各取一个数,正好组成那个低一阶行列式。(−1)i+j 则负责记录把第 行、第 列移到展开位置时造成的方向翻转。
拉普拉斯展开公式
固定第 i 行,可以写成
detA=j=1∑naijC
固定第 j 列,也可以写成
detA=i=1∑naijCij
你可以任选一行或一列,答案都一样。计算时当然优先挑零最多的那一行或那一列,因为零对应的项可以整项省掉。
对三阶矩阵
A=adg
沿第一行展开就是
detA=a
也就是
detA=a(ei−fh)−b(di−fg)+c(dh−e
每一项都有“当前元素 × 剩余小行列式”,正负号按 +,−,+ 交替。
例题:专挑零最多的列
计算
F=205
第二列有两个零,沿第二列展开最短。只有 a22=−1 会留下:
detF=(−1)C22
因为 (−1)2+2=1,所以
C22=2
于是
detF=(−1)(−3)=3
展开法很适合三阶矩阵和稀疏矩阵,但对一般大矩阵会反复生成许多小行列式。阶数一大,消元通常更快。展开公式用来理解结构,消元用来稳定计算,两者不冲突。
连续变换为什么让行列式相乘
矩阵乘法表示动作接力。AB 表示先做 B,再做 A。如果 B 先把面积放大 ∣detB∣ 倍,A 又把得到的面积放大 倍,总倍率当然是两者相乘。
把方向也算进去,正负号同样相乘:保持后再保持仍然保持;翻转一次会反向;翻转两次又回到原方向。因此
det(AB)=detAdetB
这条公式不是矩阵元素碰巧算出来的,而是“连续动作的总体积倍率等于各步倍率相乘”的数学表达。
例子:不用真的乘矩阵
设 S 沿水平方向放大 3 倍、沿竖直方向缩到一半:
S=[3002
再设 R 是旋转 90∘ 的矩阵,H 是关于 y 轴反射的矩阵:
R=[01−10
旋转保持面积和方向,所以 detR=1;反射保持面积但翻转方向,所以 detH=−1。先做 S,再做 R,最后做 H 的总变换是 ,其行列式无需乘出矩阵就能得到:
det(HRS)=detHdetRdetS=(−1)⋅1⋅
所以总变换把面积放大 23 倍,并把方向翻转。
逆矩阵和幂也随之得到
若 A 可逆,那么
AA−1=I
两边取行列式:
detAdet(A−1)=1
因此
det(A−1)=detA1
这很符合几何直觉:原变换把体积放大 4 倍,逆变换就必须缩回到四分之一。类似地,重复做 k 次同一变换时,
det(Ak)=(detA)k
还有一个看着有点意外的结果:虽然矩阵乘法通常不交换,AB 和 BA 可能完全不同,但
det(AB)=det(BA)
因为两边都等于 detAdetB。动作顺序会改变最终形状,却不改变总体积倍率。
行列式不只是在“算一个数”
图形变换里的镜像和压扁
在二维绘图和三维建模中,detA<0 表示顶点朝向被翻转,模型可能出现镜像;detA=0 表示模型被压到低维,几何信息无法完整恢复。渲染程序若依赖顶点的顺时针或逆时针顺序,行列式的符号就会直接影响哪一面被视为正面。
变量替换里的面积因子
若把新坐标 (u,v) 通过线性关系换成旧坐标 (x,y):
[xy]=A[uv]
那么一小块 uv 区域到了 xy 平面后,面积会乘 ∣detA∣。多变量微积分里的变量替换公式正需要这个因子。对非线性变换,局部会用导数矩阵做同样的近似,行列式仍然负责局部面积或体积倍率。
体积保持不等于长度保持
剪切矩阵
Q=[1051]
满足
detQ=1
它把正方形斜推成平行四边形,面积保持不变,但许多线段的长度和角度都变了。所以 detA=1 只表示有向面积或体积保持,不表示矩阵一定是旋转,也不表示距离保持。
几个很容易踩的坑
把行列式当普通线性函数
一般来说,
det(A+B)=detA+detB
取 A=B=I2 就能看到:
det(A+B)=det(2I2)=4
但
detA+detB=1+1=2
行列式只对某一行或某一列分别线性,不对整张矩阵线性。
把 det(kA) 写成 kdetA
若 A 是 n×n 矩阵,整张矩阵乘 k 是把每一行都乘 k,所以
det(kA)=kndetA
二维面积按长度平方缩放,三维体积按长度立方缩放,这正是同一个几何事实。
展开时不看位置符号
三阶矩阵沿第一行展开是 +,−,+,沿第二行则是 −,+,−。与其每次临时猜,不如先写出 (−1)i+j,或者在草稿边上画一个正负号棋盘。
把三阶的斜线口诀推广到高阶
三阶矩阵可以用某些斜线记忆法得到六项,但这只是三阶的速记。四阶矩阵不能照着补两列继续画。能推广到任意阶的是余子式展开、排列公式和消元,其中实际计算最常用的是消元。
看到很小的行列式就说不可逆
在精确数学里,只有 detA=0 才表示不可逆。detA=10−8 仍然不是零,矩阵在代数上可逆,只是它把体积压得非常薄,数值计算时可能对误差很敏感。“很小”和“等于零”必须分开。
做题时先选对路线
碰到行列式题,不用看到竖线就立刻展开。先看矩阵长什么样。
- 二阶矩阵:直接用 ad−bc。
- 三角矩阵或对角矩阵:直接乘主对角线。
- 某行或某列零很多:沿那一行或那一列做余子式展开。
- 一般的三阶以上矩阵:优先消元成三角矩阵,记录换行和缩放。
- 已经写成矩阵乘积或矩阵的幂:优先用乘法性,不要先把大矩阵乘出来。
- 题目问面积、体积或方向:计算后别停在数字上,要把绝对值、符号和零分别翻译成几何结论。
到这里,我们已经能用一个数判断变换有没有压扁空间。下一章会反过来找另一类特别的方向:哪些非零向量经过矩阵后,仍留在原来的直线上?如果
Av=λv
那么
(A−λI)v=0
这里出现了非零解,说明 A−λI 不可逆,于是必有
det(A−λI)=0
这正是行列式送给下一章的入口:用“何时压掉一个方向”,找出“哪些方向不会被转走”。
练习
面积与方向
- 设
A=[3−212]
求 detA,并说明它对二维面积和方向的影响。
按二阶公式计算:
detA=3⋅2−1⋅(−2)=8所以所有二维面积都变成原来的 8 倍。因为 detA>,方向保持。
- 三角形三个顶点是 P=(1,1)、Q=(5,2)、R=(2,6)。求三角形面积。
从 P 出发的两条边是
Q−P=[41],
退化与可逆性
- 对矩阵
C=[1224]
找出一个非零向量 z 使 Cz=0,并解释为什么这能证明 C 不可逆。
可以取
z=[2−1]因为
消元与记账
- 用行变换计算
M=012
的行列式,并说明每一步是否改变行列式。
先交换前两行,行列式变号。再做
R3←R3−2R1和
- 不做余子式展开,直接求上三角矩阵
T=
的行列式,并解释体积和方向。
三角矩阵的行列式等于主对角线乘积:
detT=(−2)⋅3⋅21⋅(−4)=12所以四维体积放大 倍。行列式为正,方向保持。
余子式展开
- 沿零最多的列计算
D=
的行列式。
第二列只有 a22=3 非零,沿第二列展开:
detD=3
乘法性
- 已知 detA=−2、detB=5,不计算矩阵乘积,求
det(A−1B2)
先用逆矩阵和幂的行列式:
det(A−1)=detA1=−2
判断与解释
- 判断下列说法是否正确,并说明理由。
(1)若 detA=1,那么 A 保持所有向量的长度。
(2)对同阶方阵,总有 det(AB)=det(BA)。
(3)若 detA=0,那么存在非零向量 v 使 Av=0。
(4)若 A 是 3×3 矩阵,那么 det(2A)=2detA。
(1)错误。detA=1 只保证有向体积保持。剪切矩阵就能改变长度和角度,同时保持面积。
(2)正确。因为
det(AB)=detAdetB=detBdetA=
- 已知某个非零向量 v 满足 Av=0。不计算任何行列式,判断 detA,并说明这和下一章寻找“方向不变的向量”有什么联系。
非零向量被送到零,说明 A 有非平凡零空间,因此不可逆:
detA=0下一章会研究 Av=λv。把等式移项可得
(A−λI)v
从整体缩放走向特殊方向
行列式把一个方阵的整体效果压成了一个数:面积或体积缩放多少,方向是否翻转,信息有没有因为压扁而丢失。它很擅长回答“整个空间变成了多大”,却不会告诉我们“矩阵最习惯沿哪些方向拉伸”。
要看清这些内部方向,我们得把问题从 detA 改写成 Av=λv:寻找经过变换后仍留在原直线上的非零向量。下一章会从这里得到特征值、特征向量和对角化,也会解释为什么特征方程正是从 det(A−λI)=0 里长出来的。