# 行列式

# 简介

行列式(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 阶行列式的定义

阶方阵,则

这一定义直接给出所有“选每行一个元素且不重列”的乘积和。

# 行列式的性质

  1. 互换两行(或两列),行列式变号。
  2. 某一行乘以常数 ,行列式整体乘以
  3. 某一行加上另一行的倍数,行列式不变。
  4. 若有两行相同或成比例,行列式为 0。
  5. 单位矩阵行列式为 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
}

# 应用

  • 判断矩阵是否可逆(
  • 体积缩放因子(线性变换的几何意义)
  • 克拉默法则、特征值等后续内容的基础