【保存版】LU分解とは?数式・手順・活用例まで徹底解説!
線形代数の中でも、特に応用範囲が広いのが「LU分解(LU Decomposition)」です。
数値計算やプログラミング、物理シミュレーションにおいても頻繁に登場します。
この記事では、LU分解の基本から実際の計算手順、活用例までを丁寧に解説します。
数学が苦手な人にも分かりやすくまとめているので、ぜひ最後まで読んでみてください📘
LU分解とは?
LU分解とは、ある正方行列Aを、下三角行列Lと上三角行列Uの積に分解することを言います。
数式で表すと、以下のようになります:
A=LUA = LU
-
L(Lower):下三角行列(対角成分は1)
-
U(Upper):上三角行列
この分解を行うことで、連立一次方程式の解法や逆行列の計算が効率的になります。
LU分解のメリットは?
🔸 連立一次方程式を高速に解ける!
一度LU分解しておけば、右辺が変わる複数の連立方程式にも素早く対応できます。
🔸 計算量が減る!
LU分解は、直接的な行列計算よりも計算量が少なく済むため、特に大規模データに強いのです。
🔸 再利用性が高い!
一度求めたLとUを何度も使い回すことができます👍
LU分解の手順(3×3の行列を例に)
行列A:
A=[231477−245]A = \begin{bmatrix} 2 & 3 & 1 \\ 4 & 7 & 7 \\ -2 & 4 & 5 \\ \end{bmatrix}
これをLU分解するステップは以下の通りです:
Step 1:初期化
まず、Lを単位行列で初期化し、Aの値を使ってUを求めていきます。
Step 2:Uの1行目をそのままコピー
U=[2310??0??]U = \begin{bmatrix} 2 & 3 & 1 \\ 0 & ? & ? \\ 0 & ? & ? \\ \end{bmatrix}
Step 3:Lの1列目を求める(下三角)
例:
L21=42=2,L31=−22=−1L_{21} = \frac{4}{2} = 2,\quad L_{31} = \frac{-2}{2} = -1
Step 4:Aの第2、第3行を更新して、Uの2行目を求める
(ガウス消去と似た流れ)
更新後の行列から同様にLとUの要素を順に求めていきます。
プログラミングでの実装例(Python)
LU分解はNumPyでも簡単に扱えます。
import numpy as np
from scipy.linalg import lu
A = np.array([[2, 3, 1], [4, 7, 7], [-2, 4, 5]])
P, L, U = lu(A)
print("L:\n", L)
print("U:\n", U)
ここではSciPyのlu()
関数を使用しています。
実際には、ピボット行列Pも出力されるLU分解(PLU分解)になります。
LU分解の活用例
✅ 連立一次方程式の解法
LU分解後、Ly = b, 次に Ux = y と2回の三角行列解法で済みます。
✅ 逆行列の計算
LU分解しておけば、逆行列を求める際の計算がスムーズになります。
✅ 数値解析
ニュートン法、差分法、有限要素法などにも応用されています。
注意点:LU分解できない場合もある?
LU分解はすべての行列で可能というわけではありません。
例えば、0で始まる行列や、特異な行列(正則でない行列)では**行の入れ替え(ピボット操作)**が必要になります。
この場合、PLU分解(ピボット付きLU分解)を用いることで対応できます。
まとめ ✨
LU分解は、線形代数において非常に強力なツールです。
高速・再利用性・効率性という3つの大きなメリットを持ち、実社会の多くの場面で活用されています。
数式は難しそうに見えても、手順はガウス消去法と似ているため、慣れれば誰でも使いこなせる技術です。
ぜひ、プログラミングにも活かしてみてください💻📊
ご希望があれば、LU分解のPythonコードの詳細解説記事や、LU分解の演習問題集付きブログも作成可能です📘お気軽にリクエストしてください!