1. 计算 3×3 矩阵的行列式
我们在 2.2 节矩阵的逆中讲解二阶矩阵的可逆性判定时介绍过二阶行列式。二阶矩阵 A=[acbd] 的行列式可以表示为: detA=ad−bc 。下面我们来推导如何求解 3×3 矩阵 A3×3=[aij] 的行列式,为了确保我们能够顺利地进行初等行变换,我们令 a11=0 ,请观察下面的推导过程:
经过上面的推导,可得三阶矩阵 A3×3 行列式为:
Δ=a11a22a33+a12a23a31+a13a21a32−a11a23a32−a12a21a33−a13a22a31(1)
对这个行列式进一步推导,可得:
Δ=a11(a22a33−a23a32)−a12(a21a33−a23a31)+a13(a21a32−a22a31)=a11det[a22a32a23a33]−a12det[a21a31a23a33]+a13det[a21a31a22a32]=a11⋅detA11−a12⋅detA12+a13⋅A13
其中, A11 ,A12 和 A13 是由 A 删去第一行和对应的列而得到的,请观察下面的过程:
2. n 阶矩阵的行列式递归定义
由上面的推导可知,三阶矩阵的行列式可以通过二阶矩阵的行列式递推得到。这个递推关系可推广到一般情况,即 n 阶矩阵的行列式可以由 n−1 阶矩阵的行列式递推得到。以下是行列式的一种递归定义:
根据定义,我们通过递归展开法计算三阶矩阵的行列式:
方阵 A 的行列式通常用一对竖线来表示,例如二阶矩阵的行列式可表示为: detA=acbd=ad−bc 。
3. 行列式的代数余子式展开
在前面的描述中,我们令 Aij 表示删除矩阵 A 的第 i 行和第 j 列后得到的子矩阵, detAij 则表示该子矩阵的行列式。矩阵 A 的第 (i,j) 元素的代数余子式 (cofactor),记作 Cij ,定义如下:
Cij=(−1)i+jdetAij
那么对于 (2),我们可以用代数余子式来表示:
detA=a11C11+a12C12+⋯+a1nC1n(3)
公式 (3) 称为按 A 的第一行的代数余子式展开式 (cofactor expansion across the first row)。
对于式子 (1),我们可以从中提取不同的因子得到其它形式的结果,例如提取矩阵中第二行的元素可得:
Δ=a21(a12a33−a13a32)−a22(a11a33−a13a31)+a23(a11a32−a12a31)=a21C21+a22C22+a23C23
这样,我们就可以按照矩阵的第二行来展开计算。根据这个代数性质,我们可以推断从三阶矩阵的任意一行或一列来展开计算行列式,得到的结果是一致的。这个结论不仅适用于三阶矩阵,还可以推广到任意阶数的矩阵,有如下定理(也称为拉普拉斯定理):
矩阵元素 (i,j) 的代数余子式的正负号只取决于它在矩阵中的位置,请观察下面的示例:
4. 任意行、列展开计算行列式
根据定理 1,我们可以选择矩阵的任意行或列来展开计算行列式。如果选中的行或列中含有大量零元素,那么在展开计算时就可以跳过这些零元素,从而简化计算,请观察下面的示例:
为了减少行列式的计算量,我们可以总是优先选择零元素最多的行或列进行展开。最理想的情况是矩阵呈现为三角矩阵形式(包括上三角矩阵和下三角矩阵),在这种情况下,行列式的值等于对角线元素的乘积,不需要进行复杂的余子式展开。有如下定理:
5. 行列式代数余子式展开的时间复杂度
对一个 n×n 的矩阵,代数余子式展开法需要递归地处理 n−1 阶的子矩阵。对于每个 n×n 的矩阵,我们需要对 n 个元素进行展开,并对每个展开的元素计算 (n−1)×(n−1) 矩阵的行列式。因此,时间复杂度可以表示为:
T(n)=n⋅T(n−1)
通过递推可以得到时间复杂度为 O(n!)。也就是说,代数余子式展开法的复杂度随着矩阵阶数的增加呈现阶乘增长。这是一个极高的复杂度,例如对一个 25×25 的矩阵,理论运算次数达到 25!=1.55×1025 ,这在实际应用中是不可能完成的。
代数余子式展开法只适用于小型矩阵,在现代计算机中,通常会使用其他更高效的算法(如 LU 分解、高斯消元)来求解行列式。