欢迎光临
我们一直在努力

分块矩阵行列式怎么求

问答中心分类: 其他分块矩阵行列式怎么求
1 回复
0
夏伤っ 回复于 2025-09-21 之前

分块矩阵的行列式,听起来就头大。很多教科书上直接扔一个公式,看得人云里雾里。其实没那么玄乎。咱们今天就像聊天一样,把这事儿给捋清楚。

咱们先从最简单的情况说起。想象一个分块矩阵 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 + I
D = 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 的舒尔补。

总结一下,你拿到一个分块矩阵,想求行列式,步骤是这样的:

  1. 先检查特例。看看左下角或者右上角是不是零矩阵。如果是,直接 det(A) * det(D) 完事,这是最快的。
  2. 如果不是特例,检查 A 和 D 哪个可逆。
  3. 如果 A 可逆,就用公式 det(M) = det(A) * det(D - CA⁻¹B)。你需要先求 A 的逆,然后做几次矩阵乘法和减法,得到舒尔补 D - CA⁻¹B,再算这个舒尔补的行列式,最后和 det(A) 乘起来。
  4. 如果 D 可逆(A 可能不可逆),就用公式 det(M) = det(D) * det(A - BD⁻¹C)。过程类似,只是换了一套计算。
  5. 如果 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,顺序不能换。

 

登录

找回密码

注册