透過 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,先找出讓 \(|M[p][k]|\) 最大的列 p(\(p \ge 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 對角線元素的乘積。

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 的哪一列索引。

最後更新: