# 行列式
# 简介
行列式(determinant)是一个把方阵映射为标量的函数,用来描述线性变换对“体积”的缩放,以及矩阵是否可逆。行列式为 0 表示矩阵不可逆。
# 二阶与三阶行列式
二阶行列式:
\begin{vmatrix}a&b\\c&d\end{vmatrix}=ad-bc
三阶行列式(按第一行展开):
\begin{vmatrix}a&b&c\\d&e&f\\g&h&i\end{vmatrix}=a(ei-fh)-b(di-fg)+c(dh-eg)
这也是常见的“对角线法则”的等价写法。
# 全排列和对换
把排列通过相邻元素交换(对换)变成升序排列时,交换次数的奇偶性称为逆序数奇偶性。
- 偶排列:逆序数为偶数,记作
- 奇排列:逆序数为奇数,记作
# n 阶行列式的定义
设
这一定义直接给出所有“选每行一个元素且不重列”的乘积和。
# 行列式的性质
- 互换两行(或两列),行列式变号。
- 某一行乘以常数
,行列式整体乘以 。 - 某一行加上另一行的倍数,行列式不变。
- 若有两行相同或成比例,行列式为 0。
- 单位矩阵行列式为 1。
这些性质是初等变换和求解线性方程组的基础。
# 按行(列)展开
Laplace 展开:
其中
展开可以按任意行或任意列进行,通常选择“零最多”的行或列以减少计算量。
# JS 实现
const det2 = (a, b, c, d) => a * d - b * c
const det3 = (a, b, c, d, e, f, g, h, i) =>
a * (e * i - f * h) - b * (d * i - f * g) + c * (d * h - e * g)
const det = (m) => {
const n = m.length
if (n === 1) return m[0][0]
if (n === 2) return det2(m[0][0], m[0][1], m[1][0], m[1][1])
let sum = 0
for (let j = 0; j < n; j++) {
const minor = []
for (let r = 1; r < n; r++) {
const row = []
for (let c = 0; c < n; c++) {
if (c !== j) row.push(m[r][c])
}
minor.push(row)
}
const cofactor = ((j % 2 === 0) ? 1 : -1) * m[0][j]
sum += cofactor * det(minor)
}
return sum
}
# 应用
- 判断矩阵是否可逆(
) - 体积缩放因子(线性变换的几何意义)
- 克拉默法则、特征值等后续内容的基础