什么是部分主元法的 LU 分解?
LU 分解是把一个方阵 A 分解为一个下三角矩阵 L(对角线元素全为 1)和一个上三角矩阵 U。采用部分主元(按行选主元)时,我们还会得到一个行置换向量 P,使得 \(P \cdot A = L \cdot U\)。选主元的过程会把当前列中绝对值最大的元素所在行交换到主元位置,这样既能避免除以零,又能大幅提升数值稳定性。这属于纯粹的线性代数运算,在任何地方、任何场景下结果都完全一致。
如何使用这个计算器
先选择矩阵阶数 \(n\)(2 到 5),按行依次输入方阵中的各个元素,再设定结果显示的有效数字位数。点击计算,即可得到 L、U、行置换向量 P(从 0 开始计数)以及行列式。超出所选阶数的单元格会被自动忽略。
算法原理
对每一列 \(k\),先找出第 \(p\) 行(\(p \geq k\))使得 \(|M[p][k]|\) 最大,将其交换到第 \(k\) 行;然后对 \(k\) 行下方的每一行 \(i\),计算乘子 \(\text{factor} = M[i][k] / M[k][k]\),将其存入矩阵的下三角部分,并更新其余元素 \(M[i][j] \mathrel{-}= \text{factor} \cdot M[k][j]\)。处理完所有列后,L 即为 M 严格下三角部分加上单位对角线,U 即为含对角线的上三角部分。行列式等于置换的符号乘以 U 对角线元素的乘积:
$$\det(A) = \operatorname{sign}(P) \prod_{i} U_{ii}$$
实例演示
设 \(A = [[2,1,1],[4,-6,0],[-2,7,2]]\),第一个主元在第 1 行(\(|4|\) 最大),因此 P 变为 \((1,0,2)\)。消元后得到 \(L = [[1,0,0],[0.5,1,0],[-0.5,1,1]]\),\(U = [[4,-6,0],[0,4,1],[0,0,1]]\)。由于发生了一次行交换,符号为 \(-1\),所以
$$\det(A) = -1 \times (4 \cdot 4 \cdot 1) = -16$$常见问题
为什么 L·U 不等于我原来的矩阵 A?因为采用了选主元,L·U 等于经过 P 重新排列各行之后的 A。只要先按 P 调整 A 的行顺序,L·U 就与之相符了。
如果我的矩阵是奇异矩阵怎么办?这时 U 的对角线上会出现 0,行列式为 0;但分解结果依然会照常给出。
行置换向量是从 0 开始计数的吗?是的。\(P[i]\) 表示最终位于第 \(i\) 行的元素,原本来自 A 的哪一行。