课程
在计算架构中存储的信息与数据以矩阵的形式存在。因此,大多数科学计算、机器学习与各类计算的底层,都是不同维度的矩阵。
矩阵是线性代数中的基本对象。矩阵本身具有一些性质,如维度、稀疏性、特征值与行列式。
行列式是方阵的一个基本性质,在矩阵运算中(如可逆性)、工程中的线性方程组求解,以及几何与计算机图形的变换中发挥着重要的直接或间接作用。
本文将介绍方阵的行列式、其应用,以及一些手算与使用 Python 和 R 计算的方法。
什么是行列式?
行列式是一个将方阵映射为实数标量(单一数值)的函数。在数学中,方阵 A 的行列式记为 det(A) 或 |A|。
与数学本身一样,行列式有着悠久的历史,可追溯至中国数学家。古代中国数学家使用行列式求解线性方程组(其方法现称为克拉默法则)。后来在 16 世纪的欧洲,数学家卡尔丹诺将行列式带入视野,将其用于线性方程组的求解。随后,高桥(17 世纪)、莱布尼茨(17 世纪)、范德蒙德与柯西(18 世纪)在纯数学中奠定了行列式的理论基础。
行列式的性质
尽管每个方阵的行列式都需要计算,但总体上以及对某些特定矩阵,行列式具有一些已知性质。此外,在特定数学运算下,行列式也呈现出某些模式与性质。以下是一些众所周知的行列式性质:
单位方阵的行列式为 1
单位矩阵在主对角线上为 1,其余元素为 0。
交换两行或两列会改变行列式的符号
例如,在下列矩阵中,行列式为:
如果交换行,结果会改变符号。

三角矩阵的行列式等于对角元素之积
如果一个矩阵是下三角或上三角,那么计算行列式时只需将对角线上的值相乘。例如,在下面这个上三角方阵中,行列式通过对角线元素相乘得到:

我们只需将对角元素相乘即可得到行列式: det(U)=2×4×6=48
行列式在相似变换下不变
如果两个矩阵来源于同一个线性变换但基不同,则它们相似。若两个矩阵相似,则它们具有相同的行列式(以及特征值、迹与特征多项式)。
矩阵乘积的行列式等于各矩阵行列式的乘积
例如,矩阵 A 与 B 各自的行列式如下所示:

转置不改变行列式
例如,矩阵 A 与 AT 的行列式相同(-9)。

计算行列式的方法
计算方阵行列式的方法有多种,例如莱布尼茨公式、拉普拉斯展开与高斯消元。方法的选择取决于矩阵规模与计算成本。下面我们介绍其中一些方法:
莱布尼茨公式
使用莱布尼茨公式求方阵行列式最适合小型矩阵,尤其是全部或部分手工计算时。矩阵行列式的莱布尼茨公式如下:

其中 Sn 表示数字 1,2,…,n 的所有排列集合,sgn(σ) 是该排列的符号,若排列为偶置换则为 +1,若为奇置换则为 −1。项 ai,σ 是矩阵 A 的一个元素。
拉普拉斯展开
拉普拉斯展开适合较大的矩阵。在拉普拉斯(或余子式)展开中,将大矩阵分解为更小的矩阵。随后,依据较小矩阵的行列式(子式)及其代数余子式,设计并沿行或列迭代计算的方案。
高斯消元
由于三角矩阵的行列式等于其对角元素之积,将矩阵化为对角(或上三角)形式能更高效地计算行列式。在高斯消元中,通过一系列行变换将完整矩阵化为行阶梯形或上三角形。然后,将对角元素相乘得到行列式。
不同规模矩阵的行列式如何求
在以下示例中,我们对不同规模的矩阵应用上述各方法来求行列式。
如何求 2x2 矩阵的行列式
2x2 方阵的行列式最易记忆与计算。若将 2x2 矩阵 A 记为: 
则 det(A) = (a × d) - (b × c)。例如,对下方的矩阵 B:

如何求 3x3 矩阵的行列式
虽然计算 3x3 方阵有直接公式,但出于教学目的,我们在本例中演示拉普拉斯(余子式)展开。我们将计算下方矩阵 A 的行列式:

如何求 4x4 矩阵的行列式
现在我们借此机会,展示如何用高斯消元法计算下方 4×4 矩阵 A 的行列式:
我们将通过行变换把该矩阵化为上三角矩阵。

得到:

再进行一次行变换:

得到:

行列式即为对角元素之积:

几何与代数意义
如前所述,行列式是将方阵映射为实数的函数。
在几何中,二维由两条边界定,其乘积为面积;若有三条边,则得到体积。2×2 矩阵的行列式(的绝对值)可解释为由矩阵两列(作为方向向量)构成的平行四边形的面积;3×3 矩阵的带符号行列式可解释为平行六面体(三维立体)的体积。
在图形变换中,例如对图像进行拉伸或压缩,变换后图像的行列式显示原图(矩阵)的面积在变换后是否发生变化(卡瓦列里原理),而特征值显示图像是否在改变或不改变面积的情况下被拉伸或收缩。
行列式还能指示矩阵的列或行是否互为线性组合(冗余),或是线性无关且各自包含独立信息。若矩阵的行列式非零,则可判定该矩阵的列或行线性无关;若行列式为零,则表明该矩阵的列(或行)线性相关。
最后,行列式也用于构造用于计算特征值的特征多项式。
Python 与 R 中的行列式
尽管手工计算行列式有助于提升数学技巧与素养,但出于时间与精力的限制,我们最终可能会使用计算器或编程语言(如 Python 或 R)。Python 与 R 都提供了用于计算矩阵行列式的库、函数或方法。下面的代码片段展示了如何在 Python 与 R 中计算矩阵的行列式。
Python 示例
用于计算矩阵行列式的两个常用 Python 包是 Numpy 与 Sympy(符号计算 Python)。以下代码片段展示如何在 Python 中使用 Numpy 与 Sympy 计算行列式。
# Computing determinant using Numpy
import numpy as np
matrix = np.array([[1, 2], [3, 4]])
determinant = np.linalg.det(matrix)
print("Determinant:", determinant)
# Computing determinant using Sympy# Import the necessary library
import sympy as sp
matrix = sp.Matrix([[1, 2], [3, 4]])
determinant = matrix.det()
print("Determinant:", determinant)
R 示例
在 R 中计算矩阵行列式无需加载额外库。R 基础包提供了计算矩阵行列式的内置函数,如下方 R 代码片段所示:
matrix <- matrix(c(1, 2, 3, 4), nrow = 2, ncol = 2)
determinant <- det(matrix)
print(paste("Determinant:", determinant))
行列式的应用
线性方程组
行列式可直接用于借助克拉默法则求解线性方程组。依据克拉默法则,首先构造由未知量系数组成的矩阵并计算其行列式。接着,对每个未知量构造对应的矩阵并计算其行列式。新矩阵行列式与原矩阵行列式的比值即为该未知量的取值。
微分方程
一个微分方程可能有多个解(函数)。为确保这些解线性无关(唯一),需要计算由这些解函数构成的行列式——朗斯基行列式。非零的朗斯基行列式表明在给定区间内这些函数/解线性无关。
几何
在几何中,2×2 矩阵的行列式可解释为平行四边形的面积,3×3 矩阵的行列式可解释为立体(平行六面体)的体积。多变量函数映射中的行列式有助于我们通过雅可比矩阵的行列式判断映射是否影响了函数的面积或体积。
要点回顾
行列式在机器学习、统计与科学计算中往往扮演更为间接的角色。然而,理解线性方程组、矩阵求逆、计算机图形与微分方程在过程中如何使用行列式,有助于洞察其微妙的重要性与我们需要理解行列式的原因。下次当您遇到“矩阵不可逆”的错误时,或许会想到行列式在决定矩阵形态与线性无关性中的作用。
结语
希望您已理解行列式在把握矩阵行为与变换中的重要性。我们的R 语言数据科学线性代数课程是继续学习线性代数技术并将其应用于数据科学工作流的绝佳下一步。

