Series · Linear Algebra · Chapter 4

行列式的秘密

行列式不只是繁琐的计算 -- 它度量的是变换对空间的拉伸或压缩程度。本章给出行列式的几何直觉、关键性质和实际应用。

跳出公式:行列式到底是什么

大多数教材是这么引入行列式的:

$$\det\begin{pmatrix}a & b\\ c & d\end{pmatrix} = ad - bc.$$

记住公式、套数字、算结果——课程到此结束。但这把行列式最重要的那一面藏起来了。

一句话点破:

行列式 $\det(A)$ 就是变换 $A$ 把面积(或体积)放大了多少倍。

这一个角度建立起来之后,行列式所有看似繁杂的性质都变得显然:

  • $\det(AB) = \det(A)\det(B)$:两次缩放,倍数相乘,自然成立。
  • $\det(A) = 0$:变换把空间压扁了,信息丢失。
  • $\det(A^{-1}) = 1/\det(A)$:逆变换必须把缩放原样撤销。
  • 行列式的符号:决定空间是否被翻转(像照镜子)。

本章你将看到

  • 行列式在 2D 与 3D 中的几何含义
  • 行列式的符号告诉你什么(定向)
  • $\det = 0$ 意味着什么(奇异、信息丢失)
  • 关键性质,以及它们为什么从几何上一目了然
  • 三种实际可行的计算方法
  • 应用:克拉默法则、面积/体积公式、雅可比行列式

前置内容

  • 第 2 章:线性无关
  • 第 3 章:矩阵作为线性变换

二维行列式:面积的缩放因子

从单位正方形说起

平面上最干净的参照物是单位正方形:以 $(0,0)$、$(1,0)$、$(1,1)$、$(0,1)$ 为顶点,由两个标准基向量 $\vec{e}_1 = (1,0)$ 和 $\vec{e}_2 = (0,1)$ 张成,面积恰好是 $1$。

一个 $2 \times 2$ 矩阵 $A = \begin{pmatrix}a & b\\ c & d\end{pmatrix}$ 把基向量送到自己的两列:

  • $\vec{e}_1 \;\mapsto\; (a, c)$ —— 第一列
  • $\vec{e}_2 \;\mapsto\; (b, d)$ —— 第二列

原本的单位正方形随之变成由这两列张成的平行四边形。简单地"用大矩形减去四角的三角形",可以推出:

$$\text{面积} = |ad - bc| = |\det(A)|.$$

这就是二维行列式全部的几何含义。

行列式 = 面积缩放因子:单位正方形被矩阵 $A$ 送到一个平行四边形,其面积恰好等于 $|\det A|$。

一个具体例子

$$A = \begin{pmatrix}3 & 1\\ 0 & 2\end{pmatrix}, \qquad \det(A) = 3\cdot 2 - 1\cdot 0 = 6.$$

单位正方形(面积 $1$)被送到面积 $6$ 的平行四边形。注意:平面里所有图形都被同一个倍数缩放——半径 $1$ 的圆(面积 $\pi$)变成面积 $6\pi$ 的椭圆,面积 $0.5$ 的三角形变成面积 $3$ 的三角形。矩阵不在乎你画的是什么形状,它只决定局部面积元素的倍数。

复印机的类比

把复印机设成 200%:

$$A = \begin{pmatrix}2 & 0\\ 0 & 2\end{pmatrix}, \qquad \det(A) = 4.$$

宽度变成原来的 $2$ 倍,高度也变成原来的 $2$ 倍,但面积变成原来的 $4$ 倍(不是 $2$ 倍)——这正是线性变换里那个"反直觉"的关键,而行列式直接把它告诉你。

三种行列式:1、2、0.5

为了让直觉再清楚一点,看三个不同的 $A$ 怎样作用在同一个单位正方形上:

同样的输入,三种不同的行列式:错切保持面积不变,拉伸把面积变成 2 倍,压缩把面积变成一半。

  • 错切(Shear),$\det = 1$:平行四边形倾斜了,但面积没变。想象把一摞书顶部往一边推一推——总的体积没变。
  • 拉伸,$\det = 2$:某个方向被拉长一倍,面积也跟着翻倍。
  • 压缩,$\det = 0.5$:某个方向被压扁一半,面积变成一半。

这些变换形状千差万别,但行列式抓住了它们都同意的那一个数:面积变了多少。


行列式的符号:方向(定向)

绝对值 $|\det(A)|$ 告诉你"大小",符号告诉你"方向"。

  • $\det(A) > 0$:变换保持定向。逆时针的环路出来还是逆时针。
  • $\det(A) < 0$:变换翻转定向。逆时针出来变成顺时针——这正是镜子做的事。

例子:关于 $y$ 轴的反射

$$A = \begin{pmatrix}-1 & 0\\ \phantom{-}0 & 1\end{pmatrix}, \qquad \det(A) = -1.$$
  • $|\det| = 1$:面积没变。
  • 负号刻画了"翻转":把一张写有字的透明纸举起来对着镜子看到的就是 $A$ 的效果。

反射把右手系送成左手系;行列式变为 $-1$。

手套的比喻

一只右手手套,无论你怎么旋转、拉伸、捏揉它,它永远是右手手套。但如果你把它翻面(从里往外翻),它就成了左手手套。负行列式对应的就是这种"翻面"操作;旋转和拉伸只能保持 $\det > 0$,反射才会把符号翻成负。


行列式为零:空间被压扁

如果面积缩放因子是 $0$,那么变换后的面积就是 $0$。在二维里,这只能意味着一件事:整个平面被压到一条直线上(极端情况下压成一个点)。

例子

$$A = \begin{pmatrix}1 & 2\\ 2 & 4\end{pmatrix}, \qquad \det(A) = 1\cdot 4 - 2\cdot 2 = 0.$$

注意第二列 $(2, 4)$ 恰好是第一列 $(1, 2)$ 的两倍。两个基向量被送到了同一条直线上(方向是 $(1, 2)$ 那条过原点的直线)。整个平面被挤压到这条直线上——二维世界被坍缩到了一维。

当 $\det = 0$,整个平面被压到一条更低维的子空间上。原来不同的点会被送到同一处。

为什么不可逆

把一张二维的照片压成一条线,你能把照片复原吗?不能:原本不同位置的点现在重叠在一起了,无从分辨。信息丢失了,所以 $A^{-1}$ 不存在。

由此得到线性代数里最干净的等价关系之一:

$$\det(A) = 0 \;\Longleftrightarrow\; A\text{ 不可逆(奇异)}\;\Longleftrightarrow\; A\text{ 的列向量线性相关}.$$

这也给出了一个判定线性相关的快速办法:算行列式即可。


三维行列式:体积的缩放因子

二维里说的一切都可以平移到三维。单位立方体由 $\vec{e}_1, \vec{e}_2, \vec{e}_3$ 张成,一个 $3 \times 3$ 矩阵把它送到一个倾斜的盒子——平行六面体(parallelepiped)。行列式给出这个盒子的(带符号的)体积

三维情形:$3\times 3$ 矩阵把单位立方体送到一个平行六面体;$|\det A|$ 就是它的体积。

公式

$$\det\begin{pmatrix}a & b & c\\ d & e & f\\ g & h & i\end{pmatrix} = a(ei - fh) - b(di - fg) + c(dh - eg).$$

它正好等于三个列向量的混合积

$$\det(A) = \vec{v}_1 \cdot (\vec{v}_2 \times \vec{v}_3),$$

而混合积就是平行六面体(带符号的)体积的标准表达式。

三维里的负号

三维行列式为负,意味着右手坐标系被送成了左手坐标系(例如对其中一个轴做反射)。任何"奇数次反射"都会把符号变成负。


行列式的性质——全部都是几何

把行列式看成缩放因子之后,下面这些"性质"就不再是要背的规则,而都是关于缩放的简单陈述。

乘法性:$\det(AB) = \det(A)\det(B)$

$B$ 把体积缩放 $\det(B)$ 倍,再让 $A$ 作用,又被缩放 $\det(A)$ 倍。总缩放 = 两者之积。就像复印机先按 $1.5\times$ 再按 $3\times$,总放大是 $4.5\times$。

两次变换接连作用:每次都按自己的行列式倍数把面积放大;合成的 $AB$ 自然就是两者乘积。

转置不变:$\det(A^T) = \det(A)$

把行换成列,体积缩放因子不变。从几何上看,转置后的平行六面体并不一样,但体积相等——这是个"小奇迹",初见时会觉得意外。

逆矩阵:$\det(A^{-1}) = 1/\det(A)$

$A$ 把体积放大 $k$ 倍,$A^{-1}$ 就必须把它缩小 $k$ 倍。代数上:$\det(A)\det(A^{-1}) = \det(I) = 1$。

行交换:行列式变号

交换两行,行列式乘以 $-1$。交换两个基向量等于翻转坐标系的"手性",所以符号反过来。

行倍乘:行列式跟着倍乘

把某一行乘以 $k$,行列式也乘以 $k$——你把一个基向量拉长 $k$ 倍,平行四边形的面积也就拉长 $k$ 倍。

推论:$\det(kA) = k^n \det(A)$,因为 $k$ 同时作用在 $n$ 行上。

行加法:行列式不变

把一行加上另一行的常数倍,行列式不变。

这是一个错切操作:平行四边形形状变了,面积没变。想象一摞牌被斜推一下,每张牌错开,但整摞的体积没变。

正是这一条让高斯消元法在计算行列式时如此方便:消元过程不会改变行列式(只要追踪行交换的符号变化和行倍乘即可)。

几个特殊矩阵

矩阵类型行列式
单位矩阵 $I$$1$
对角矩阵对角元素之积
三角矩阵(上或下三角)对角元素之积

三角矩阵这一条特别重要:任何矩阵都能通过行变换化成三角,化完之后行列式只剩一连串乘法。


怎么算行列式

$2 \times 2$:直接套公式

$$\det\begin{pmatrix}a & b\\ c & d\end{pmatrix} = ad - bc.$$

$3 \times 3$:Sarrus 法则

把前两列复制到矩阵右边,三条"主对角线"乘积相加,再减去三条"副对角线"乘积:

$$\det\begin{pmatrix}1 & 2 & 3\\ 4 & 5 & 6\\ 7 & 8 & 9\end{pmatrix} = (1\cdot 5\cdot 9 + 2\cdot 6\cdot 7 + 3\cdot 4\cdot 8) - (3\cdot 5\cdot 7 + 2\cdot 4\cdot 9 + 1\cdot 6\cdot 8) = 0.$$

(这里结果为 $0$,是因为相邻两行差一个常数,三行线性相关。)

注意:Sarrus 法则只适用于 $3 \times 3$。$4 \times 4$ 及以上不要硬套对角线模式,会得到错误的答案。

通用方法:余子式(Laplace)展开

对任意 $n \times n$ 矩阵,沿第 $i$ 行展开:

$$\det(A) = \sum_{j=1}^{n} (-1)^{i+j} a_{ij}\, M_{ij},$$

其中 $M_{ij}$ 是余子式——把第 $i$ 行、第 $j$ 列删除后剩下的 $(n-1) \times (n-1)$ 子矩阵的行列式。符号 $(-1)^{i+j}$ 形成棋盘格;$3 \times 3$ 矩阵第一行的符号就是 $+, -, +$。

余子式展开的图示:选定一行,每个元素乘以"删去其所在行列"后子矩阵的行列式,再按棋盘符号交替加减。

实用技巧:选含零最多的那一行(或那一列)展开——零项直接消失,工作量大幅减少。

真正能跑大矩阵的做法:高斯消元

余子式展开的复杂度是 $O(n!)$,到 $n = 10$ 左右就跑不动了。实际计算时把 $A$ 用初等行变换化成上三角(每一步对行列式的影响都是已知的),再把对角线乘起来。复杂度是 $O(n^3)$——这正是 numpy.linalg.det 内部做的事。

1
2
3
4
5
6
7
import numpy as np

A = np.array([[3, 1], [2, 4]])
print(f"det(A) = {np.linalg.det(A):.1f}")   # 10.0

B = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(f"det(B) = {np.linalg.det(B):.1f}")   # 0.0(含浮点噪声)

克拉默法则

对方阵方程 $A\vec{x} = \vec{b}$,若 $\det(A) \neq 0$:

$$x_i = \frac{\det(A_i)}{\det(A)},$$

其中 $A_i$ 是把 $A$ 的第 $i$ 列换成 $\vec{b}$ 后得到的矩阵。

例子

$$\begin{cases} 2x + y = 5 \\ 3x + 4y = 11 \end{cases}$$$$\det(A) = 8 - 3 = 5,\quad \det(A_1) = 20 - 11 = 9,\quad \det(A_2) = 22 - 15 = 7,$$

所以 $x = 9/5,\; y = 7/5$。

几何直觉:在二维里,$\det(A_1)/\det(A)$ 等于"换掉第一列后的平行四边形面积"除以"原平行四边形面积",这个比值正是 $x$。克拉默法则其实是在用面积之比解方程组。

局限:克拉默法则形式漂亮,但实际计算很慢(最优实现也要 $O(n^4)$,而高斯消元是 $O(n^3)$)。它适合理论证明、$2 \times 2$ 或 $3 \times 3$ 的符号计算,不要用它解大方程组。


应用

三角形面积

给定顶点 $(x_1, y_1)$、$(x_2, y_2)$、$(x_3, y_3)$:

$$\text{面积} = \tfrac{1}{2}\left|\det\begin{pmatrix} x_2 - x_1 & x_3 - x_1 \\ y_2 - y_1 & y_3 - y_1 \end{pmatrix}\right|.$$

本质就是"两条边张成的平行四边形面积的一半"。

叉积写成行列式

三维向量的叉积可以形式地写成:

$$\vec{a} \times \vec{b} = \det\begin{pmatrix} \vec{i} & \vec{j} & \vec{k} \\ a_1 & a_2 & a_3 \\ b_1 & b_2 & b_3 \end{pmatrix}.$$

它的模长 $\|\vec{a}\times\vec{b}\|$ 正是 $\vec{a}, \vec{b}$ 张成的平行四边形面积——一个 $2 \times 2$ 的行列式藏在里面。

雅可比行列式

多元积分换元 $(x, y) \to (u, v)$ 时,$x = x(u, v),\; y = y(u, v)$,积分要乘上一个因子:

$$\iint f(x, y)\, dx\, dy = \iint f\bigl(x(u, v),\, y(u, v)\bigr) \left|\det \frac{\partial(x, y)}{\partial(u, v)}\right| du\, dv.$$

这个 雅可比行列式 $\left|\det\frac{\partial(x,y)}{\partial(u,v)}\right|$ 就是局部面积缩放因子——它是变量替换在该点的线性近似的行列式。几何上,是把我们的"行列式 = 面积缩放"定理用到每一个无穷小的面元上。

极坐标的例子:$x = r\cos\theta,\; y = r\sin\theta$,

$$\left|\det \frac{\partial(x, y)}{\partial(r, \theta)}\right| = \det\begin{pmatrix} \cos\theta & -r\sin\theta \\ \sin\theta & \phantom{-}r\cos\theta \end{pmatrix} = r.$$

这就是 $dx\,dy = r\,dr\,d\theta$ 里那个"$r$“的来源。微积分里背了很多年,现在你能从行列式直接推出来。

行列式与方程组的解

对方阵 $A$ 上的方程 $A\vec{x} = \vec{b}$:

条件结果
$\det(A) \neq 0$唯一解
$\det(A) = 0$,齐次($\vec{b} = 0$)有非平凡解
$\det(A) = 0$,$\vec{b} \neq 0$无解 或 有无穷多解

Python:可视化行列式

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import numpy as np
import matplotlib.pyplot as plt

def show_determinant(A):
    """展示 A 怎样把单位正方形变形,并显示面积变化。"""
    square = np.array([[0, 0], [1, 0], [1, 1], [0, 1], [0, 0]]).T
    transformed = A @ square
    det = np.linalg.det(A)

    fig, axes = plt.subplots(1, 2, figsize=(12, 5))

    axes[0].fill(square[0], square[1], alpha=0.3, color="#2563eb")
    axes[0].set_title("单位正方形 (面积 = 1)")
    axes[0].set_xlim(-3, 3); axes[0].set_ylim(-3, 3)
    axes[0].set_aspect("equal"); axes[0].grid(True, alpha=0.3)

    color = "#10b981" if det > 0 else ("#f59e0b" if det < 0 else "#94a3b8")
    axes[1].fill(transformed[0], transformed[1], alpha=0.3, color=color)
    axes[1].set_title(f"变换后 (面积 = {abs(det):.2f}, det = {det:.2f})")
    axes[1].set_xlim(-3, 3); axes[1].set_ylim(-3, 3)
    axes[1].set_aspect("equal"); axes[1].grid(True, alpha=0.3)

    plt.tight_layout()
    plt.show()

show_determinant(np.array([[2, 0], [0, 1.5]]))   # 拉伸,   det = 3
show_determinant(np.array([[1, 0.5], [0, 1]]))    # 错切,   det = 1
show_determinant(np.array([[-1, 0], [0, 1]]))     # 反射,   det = -1

试着自己再换几个矩阵,特别是把 $\det = 0$ 的情况画一遍——你会亲眼看到平行四边形坍缩成一条线。


本章小结

思维模型

下次看到行列式,不要想"我得算这个数”,而要想:

“这个变换把空间的大小和方向改变成什么样了?”

  • $|\det(A)|$ —— 面积/体积放大了多少倍
  • $\det > 0$ —— 定向保持
  • $\det < 0$ —— 定向翻转(镜像)
  • $\det = 0$ —— 空间被压扁,信息丢失,矩阵不可逆

关键性质一览

性质公式直觉
乘法性$\det(AB) = \det(A)\det(B)$缩放相乘
转置不变$\det(A^T) = \det(A)$行和列地位等价
逆矩阵$\det(A^{-1}) = 1/\det(A)$撤销缩放
整体倍乘$\det(kA) = k^n \det(A)$$k$ 同时作用在 $n$ 个方向

下一章预告

第 5 章:线性方程组与列空间。 我们把前面所有的工具——矩阵、变换、行列式——汇聚起来,回答 $A\vec{x} = \vec{b}$ 何时有解、解有多少、解的结构是什么。核心概念是列空间($A$ 能"够到"哪些向量?)、零空间(哪些向量被压成零?)、(还剩下多少个有效的维度?)。在方阵情形下行列式仍是主角;非方阵或秩亏的情形则需要更细致的工具。


系列导航

Liked this piece?

Follow on GitHub for the next one — usually one a week.

GitHub