什麼是採用部分主元法的 LU 分解?
LU 分解是把一個方陣 A 拆解成下三角矩陣 L(對角線元素皆為 1)與上三角矩陣 U。在部分主元法(即列主元法)下,我們還會額外產生一個列置換向量 P,使得 \(P \cdot A = L \cdot 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 對角線元素的乘積。
實例演算
以 \(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 的哪一列索引。