MatrixCalc

LU 分解の計算機

部分ピボット付きで正方行列を A = L·U に分解し、二つの三角行列がどのように組み上がるかを順を追って確認できます。対称正定値行列向けのコレスキー分解も含みます。

行列 A
: 3
: 3
行列 B
: 3
: 3
演算

下の手順を開くと完全な答えが表示されます。

結果
演算を選択するとここに結果が表示されます。エラーメッセージもここに表示されます。

ヒント: サイズを調整してください (最大 50×50)。A×B は Aの列数 = Bの行数が必要です。行列式/逆行列/トレース/べき乗は正方行列である必要があります。

React, Tailwind & shadcn/ui. No external math deps. — 日本語

正方行列を入力し、分解タブを開いて LU(A) を押してください。答えが一つの 行列ではなく行列の対であるため、結果はすべて計算過程のパネルの中にあります。パネルはひとりでに開き、 最後に L と U を並べて表示します。Cholesky(A) も同じタブにあり、下で説明する対称な場合に 使います。

二つの因子とは何か

LU 分解は行列を A = L·U と書きます。L が下三角、U が上三角です。どちらも神秘的なもの ではありません。U は掃き出し法で得られる階段 行列そのものであり、L は途中で使った乗数を記録したものです。掃き出しを一度行えば、両方が手に入ります。

例題

43
63
=
10
3/21
×
43
0−3/2

L にある 3/2 は、主成分の下の 6 を消した乗数です。行列式がもう手に入っていることに注目してください。 U の対角成分を掛けて 4 · (−3/2) = −6、これに行を入れ替えた回数だけ −1 を掛けたものです。

なぜ手間をかける価値があるのか

分解が使い回せるからです。Ax = b を一から解くには n³/3 回ほどの演算が必要 です。L と U が手元にあれば、右辺が新しくなっても 回で済みます。前進代入で Ly = b を解き、次に後退代入で Ux = y を解くだけです。同じ連立方程式を多くの 異なる b について解く場合——工学やシミュレーションでは普通のこと——節約は膨大になります。100×100 の 行列と 50 個の右辺なら、50 回の完全な掃き出しではなく、1 回の分解と 50 回の安価な求解で済みます。

前進代入と後退代入を実際にやってみる

上に読み込まれている 3×3 の行列で見てみましょう。一度の掃き出しで二つの因子が得られます。

211
4−60
−272
=
100
210
−1−11
×
211
0−8−2
001

L の成分は掃き出しで使った乗数そのものです。2 が 4 を、−1 が −2 を消し、−1 が第 2 列に残ったものを 消しました。ここで b = (4, −2, 7) について Ax = b を解きます。まず Ly = b を上から下へ。右側がすべて 0 なので、各行がその場で新しい値を一つ与えてくれます。

y₁ = 4。次に 2·4 + y₂ = −2 なので y₂ = −10。続いて −4 + 10 + y₃ = 7 なので y₃ = 1

次に Ux = y を下から上へ。x₃ = 1。次に −8x₂ − 2 = −10 なので x₂ = 1。続いて 2x₁ + 1 + 1 = 4 なので x₁ = 1。解は (1, 1, 1) で、対角成分以外で割り算をした場面は一度もありません。行列式も同じ因子から ただで得られます。2 · (−8) · 1 = −16 です。

ピボット選択

どんな行列でも素朴な A = L·U が成り立つわけではありません。主成分の位置に 0 があると 破綻します。手当ては置換行列を入れることで、P·A = L·U となります。実際にはいずれにせよ ピボット選択を行います。利用できる中で最大の主成分を選ぶことで、丸め誤差を抑えられるからです。約束を 一つ決めれば分解は一意になります。この計算機は L の対角に 1 を置く Doolittle の約束を採用しています。

コレスキー分解——対称な場合

A が対称かつ正定値なら、A = L·Lᵀ と分解できます。行列にとっての平方根に あたるもので、三角行列は一つで足ります。対称とは A = Aᵀ のこと、正定値とはすべての固有値が 0 より 大きいことです。制約が厳しく聞こえますが、これに当てはまる行列はいたるところにあります。共分散行列、 グラム行列、最小二乗法の正規方程式、有限要素法の剛性行列は、その作られ方からしてどれも対称正定値です。

42
25
=
20
12
·
21
02

L の対角成分はどれも平方根です。ここでは √4 = 2 と √(5 − 1²) = 2 です。だからこそこの方法は、どの 根号の中身も正のままであることを要求します。この要求こそが正定値性そのものであり、アルゴリズムは そのまま判定法にもなります。分解が最後まで進めばその行列は正定値、根号の中で 0 以下の値にぶつかれば 正定値ではありません。コレスキー分解は LU のおよそ 2 倍速く、記憶領域は半分で済み、ピボット選択なしで 安定です。だから求解器はまず対称性を調べ、可能なときは必ずこちらを使います。

よくある誤り

  • どんな行列でも分解できると思い込む。主成分の位置の 0 は素朴な LU を破綻させます。手当ては置換行列です:P·A = L·U
  • 対称でない行列にコレスキー分解を使う。A = L·Lᵀ は作りからして対称なので、対称でない入力にそのような分解はありません。LU を使ってください。
  • 対称でありさえすればよいと考える。負の固有値を持つ対称行列は不定値で、アルゴリズムの途中で失敗します。
  • 因子が整数になると期待する。コレスキー分解の対角には平方根が入るので、A が整数でも L はたいてい無理数になります。
  • 行列式で行の入れ替えを忘れる。入れ替えるたびに符号が反転します。

よくある質問

LU 分解は何に使いますか。
同じ行列で右辺だけが変わる連立方程式を解くのに使います。分解は一度きりで、以降の連立方程式は三角形の求解 2 回分の手間で済みます。
置換行列 P は何を表しますか。
どの行を入れ替えたかを記録するものです。部分ピボットを使う場合、結果は P·A = L·U と書かれます。
コレスキー分解を使うべきなのはどんなときですか。
行列が対称かつ正定値のときです。およそ 2 倍速く、A = L·Lᵀ となるため三角行列も 1 つで済みます。
行列が正定値でない場合はどうなりますか。
アルゴリズムが 0 以下の数の平方根に行き当たって止まります。この失敗自体が有益で、正定値性を判定する標準的な数値的検査になっています。
LU 分解から行列式は得られますか。
得られます。U の対角成分の積に、行を入れ替えた回数だけ −1 を掛けたものが行列式です。

ほかの計算機