分块矩阵的行列式,听起来就头大。很多教科书上直接扔一个公式,看得人云里雾里。其实没那么玄乎。咱们今天就像聊天一样,把这事儿给捋清楚。
咱们先从最简单的情况说起。想象一个分块矩阵 M 长这样:
M =
 [ A  B ]
 [ 0  D ]
这里 A 和 D 都是方阵,B 可以是任意尺寸的矩阵,而左下角的那个 0 是一个零矩阵。
这种情况最友好。它的行列式就是 A 的行列式乘以 D 的行列式。
det(M) = det(A) * det(D)
为什么能这么简单?你可以把它类比成一个普通的 2×2 矩阵的行列式计算,但又不完全一样。一个直观的理解是,当你用拉普拉斯展开或者高斯消元法去求行列式时,左下角的零矩阵让 A 和 D 两部分的操作完全分开了。你在对 A 的行进行操作时,不会影响到 D 的部分。同样,对 D 的行进行操作,也不会“污染”到 A。它们俩是“解耦”的。所以最后的结果就是各算各的,再乘起来。
同样,如果右上角是零矩阵,结论也一样:
M =
 [ A  0 ]
 [ C  D ]
det(M) = det(A) * det(D)
道理是相通的。记住这个特例,因为这是后面所有复杂情况的基础。有时候题目就是这么出的,你一上来就套用复杂公式,结果发现人家本来就是个零矩阵的特例,白费力气。
好,简单的说完了,现在上难度。如果四个块都不是零矩阵呢?
M =
 [ A  B ]
 [ C  D ]
这时候,你可能会下意识地想,是不是 det(M) = det(A)det(D) – det(B)det(C)?
千万别这么想!这是最容易犯的错误。
这个公式是普通 2×2 矩阵的规则,但对分块矩阵完全不适用。因为矩阵乘法不满足交换律,而且 B 和 C 可能都不是方阵,它们的行列式甚至都没有定义。这个坑很多人都踩过,包括我刚学的时候。
正确的做法是,想办法把它变回我们刚才说的“简单情况”,也就是搞出一个零矩阵出来。这就要用到一点构造性的技巧了。
假设 A 是可逆的(也就是 det(A) ≠ 0)。这是使用下面这个方法的关键前提。
我们可以用一个特殊的矩阵去乘 M,目标是把左下角的 C 消掉。你看这个矩阵:
L =
 [ I  0 ]
 [ -CA⁻¹  I ]
这里 I 是单位矩阵,A⁻¹ 是 A 的逆矩阵。我们用 L 去乘以 M:
L * M =
 [ I  0 ]   [ A  B ]   =   [ IA + 0C      IB + 0D ]
 [ -CA⁻¹  I ] * [ C  D ]       [ -CA⁻¹A + IC   -CA⁻¹B + ID ]
我们来算一下结果的四个块:
 – 左上角:IA + 0C = A
 – 右上角:IB + 0D = B
 – 左下角:-CA⁻¹A + IC = -C + C = 0 (这正是我们想要的结果!)
 – 右下角:-CA⁻¹B + ID = D – CA⁻¹B
所以,乘完之后,新矩阵变成了:
L * M =
 [ A      B      ]
 [ 0    D – CA⁻¹B ]
你看,这不就回到了我们最开始说的左下角是零矩阵的简单情况了吗?
根据行列式的性质,det(L * M) = det(L) * det(M)。
 我们先算 det(L)。因为 L 是一个下三角分块矩阵,它的行列式就是对角线上块的行列式相乘,也就是 det(I) * det(I) = 1 * 1 = 1。
所以,det(L * M) = det(M)。
而对于 L * M 这个结果矩阵,我们已经知道怎么算了:
 det(L * M) = det(A) * det(D – CA⁻¹B)
结合上面两个等式,我们就得到了最终的公式:
det(M) = det(A) * det(D – CA⁻¹B)
这个 D - CA⁻¹B 有个专门的名字,叫作 A 的舒尔补 (Schur complement)。
这个公式就是处理一般情况的“法宝”。前提是 A 必须可逆。
那如果 A 不可逆,但是 D 可逆呢?
 完全一样的思路,只是我们这次想办法把右上角的 B 消掉。我们可以构造一个上三角分块矩阵去右乘 M:
R =
 [ I  -BD⁻¹ ]
 [ 0     I    ]
你用 M * R 算一下,会得到:
M * R =
 [ A – BD⁻¹C   0 ]
 [     C        D ]
这是一个右上角是零矩阵的情况。同样,det(R) = 1,所以 det(M * R) = det(M)。
 于是我们得到另一个公式:
det(M) = det(D) * det(A – BD⁻¹C)
这个 A - BD⁻¹C 则是 D 的舒尔补。
总结一下,你拿到一个分块矩阵,想求行列式,步骤是这样的:
- 先检查特例。看看左下角或者右上角是不是零矩阵。如果是,直接 det(A) * det(D) 完事,这是最快的。
 - 如果不是特例,检查 A 和 D 哪个可逆。
 - 如果 A 可逆,就用公式 
det(M) = det(A) * det(D - CA⁻¹B)。你需要先求 A 的逆,然后做几次矩阵乘法和减法,得到舒尔补D - CA⁻¹B,再算这个舒尔补的行列式,最后和 det(A) 乘起来。 - 如果 D 可逆(A 可能不可逆),就用公式 
det(M) = det(D) * det(A - BD⁻¹C)。过程类似,只是换了一套计算。 - 如果 A 和 D 都可逆,上面两个公式你随便选一个用。通常选阶数比较低的那个来求逆,能省点计算量。
 
如果 A 和 D 都不可逆,情况就变得复杂了,通常需要用其他方法,比如直接进行高斯消元,或者使用更广义的公式,但在大多数考试和应用里,基本都至少有一个是可逆的。
我们来走一个实际的例子。比如求下面这个 4×4 矩阵 M 的行列式:
M =
 [ 2  1 | 1  0 ]
 [ 1  1 | 2  1 ]
[ 1  0 | 1  1 ]
 [ 0  1 | 1  2 ]
我们可以把它分成四个 2×2 的块:
 A = [[2, 1], [1, 1]]
 B = [[1, 0], [2, 1]]
 C = [[1, 0], [0, 1]]  (恰好是单位矩阵 I)
 D = [[1, 1], [1, 2]]
第一步,检查 A 是否可逆。
 det(A) = 21 – 11 = 1。不等于零,所以 A 可逆。我们可以用第一个公式。
第二步,求 A 的逆矩阵 A⁻¹。
 对于 2×2 矩阵 [[a, b], [c, d]],它的逆是 (1/det) * [[d, -b], [-c, a]]。
 所以 A⁻¹ = (1/1) * [[1, -1], [-1, 2]] = [[1, -1], [-1, 2]]。
第三步,计算舒尔补 S = D - CA⁻¹B。
 – 先算 A⁻¹B:
 [[1, -1], [-1, 2]] * [[1, 0], [2, 1]] = [[11-12, 10-11], [-11+22, -10+21]] = [[-1, -1], [3, 2]]
 – 再算 CA⁻¹B。因为 C 是单位矩阵,所以 CA⁻¹B = A⁻¹B。
 CA⁻¹B = [[-1, -1], [3, 2]]
 – 最后算 D - CA⁻¹B:
 [[1, 1], [1, 2]] – [[-1, -1], [3, 2]] = [[1-(-1), 1-(-1)], [1-3, 2-2]] = [[2, 2], [-2, 0]]
第四步,计算舒尔补 S 的行列式。
 det(S) = det([[2, 2], [-2, 0]]) = 20 – 2(-2) = 4。
第五步,用公式 det(M) = det(A) * det(S)。
 det(M) = 1 * 4 = 4。
这样就算完了。整个过程虽然步骤多,但每一步都是基础的矩阵运算,只要你跟着逻辑走,就不会出错。关键是别记错公式,也别把矩阵乘法的顺序搞反了。CA⁻¹B 就是 C 乘以 A⁻¹ 再乘以 B,顺序不能换。

技能提升网