通过MCP连接 →

输入计算

按行依次输入方阵的各个元素。超出阶数 n 的多余单元格会被忽略。

数学公式

数学公式: LU 分解计算器(部分主元法)
Show calculation steps (1)
  1. Determinant

    Determinant: LU 分解计算器(部分主元法)

    Determinant from the permutation sign and the product of U's diagonal entries.

广告

结果

Determinant det(A) = sign(P) × product of U diagonal
-16

下三角矩阵 L

1 0 0
0.5 1 0
-0.5 1 1

上三角矩阵 U

4 -6 0
0 4 1
0 0 1

行置换向量 P(从 0 开始计数)

P = ( 1, 0, 2 )

Because of partial pivoting, L·U equals the 经过行置换的 matrix A (reorder A's rows by P first), so P·A = L·U. A naive L·U product will not reproduce the original A unless you apply the permutation P.

方法 采用部分主元(按行选主元)的 Doolittle LU 分解
矩阵阶数 3 × 3

什么是部分主元法的 LU 分解?

LU 分解是把一个方阵 A 分解为一个下三角矩阵 L(对角线元素全为 1)和一个上三角矩阵 U。采用部分主元(按行选主元)时,我们还会得到一个行置换向量 P,使得 \(P \cdot A = L \cdot U\)。选主元的过程会把当前列中绝对值最大的元素所在行交换到主元位置,这样既能避免除以零,又能大幅提升数值稳定性。这属于纯粹的线性代数运算,在任何地方、任何场景下结果都完全一致。

图示矩阵 P 乘 A 等于 L 乘 U,其中 L 为下三角、U 为上三角
部分主元法将置换矩阵 P·A 分解为下三角矩阵 L 和上三角矩阵 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}$$
Advertisement
部分主元法流程图:在某列中选取绝对值最大的主元并交换行
每一步选取主元列中绝对值最大的行,将其换到最上方,然后消去下方元素。

实例演示

设 \(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 的哪一行。

最后更新: