行列を入力し、応用タブを開いて A⁻¹ を押してください。行列が特異なら、 誤った答えではなく明確なメッセージが返ります。計算過程のパネルは途中の値を正確な分数で表示します。0.6000000001 ではなく 3/5 と出るのは、浮動小数点ではなく有理数演算で動いているから です。
逆行列が存在するとき
逆行列 A⁻¹ は、もとの行列を打ち消す行列です。A·A⁻¹ = A⁻¹·A = I が成り立ち ます。存在するのは正方行列に限られ、しかも行列式が 0 でないときだけです。行列式が 0 の行列は特異行列と呼ばれ、逆行列をまったく持ちません。大きなものも、近似的なものも、一つも ありません。変換によって情報が失われており、どんな行列でも取り戻せないのです。
2×2 の近道
主対角成分を入れ替え、反対角成分の符号を変え、行列式で割ります。
| a | b |
| c | d |
| d | −b |
| −c | a |
ad − bc による割り算こそ、特異性が姿を見せる箇所です。行列式が 0 なら割るものがなく、 公式が破綻するのは逆行列が存在しなくなる瞬間とぴったり一致します。
拡大係数行列への掃き出し法
こちらが一般的な方法で、計算機が一段ずつ見せているのもこれです。A の隣に単位行列を書き、 左半分が単位行列になるまで行基本変形を続けます。右半分が変わり果てたもの、それが A⁻¹ です。
| 4 | 7 | 1 | 0 |
| 2 | 6 | 0 | 1 |
| 1 | 0 | 3/5 | −7/10 |
| 0 | 1 | −1/5 | 2/5 |
途中で左側の行がすべて 0 になったら、そこで止めてください。行列は特異で、逆行列は存在しません。結果は 必ず掛け算で確かめましょう。A·A⁻¹ はちょうど単位行列にならなければならず、A × B ボタンを使えばこの検算は 2 クリックで済みます。
上に読み込まれている 3×3 の行列は、行列式がちょうど −1 なので、逆行列も整数になります。
| 2 | 1 | 1 |
| 1 | 3 | 2 |
| 1 | 0 | 0 |
| 0 | 0 | 1 |
| −2 | 1 | 3 |
| 3 | −1 | −5 |
もとの行列の最後の行を見てください。第 1 座標だけを取り出し、残る二つを捨てています。逆行列はその情報 を戻さなければならず、だからこそ成分が、もとの行列に比べて大きくなるのです。これは一般的な傾向です。 行列式が 0 に近いほど逆行列は大きくなります。det(A⁻¹) = 1/det(A) だからです。
余因子行列の公式
A⁻¹ = adj(A) / det(A)。ここで adj(A) は余因子行列の転置です。まず余因子行列 C(i,j) = (−1)^(i+j)·M(i,j) を作り、転置し、行列式で割ります。
優美な式で、証明に使われるのもこちらです。逆行列をアルゴリズムの結果としてではなく閉じた形で表して いるからです。同時に実用的ではありません。n−1 次の行列式が n² 個必要に なります。3×3 を超えたら掃き出し法を使ってください。
ほとんど特異、というだけで問題になる
行列は、特異でなくても厄介になり得ます。行列式が成分の大きさに比べて小さいというだけで、その行列は悪条件です。入力のごくわずかな変化が逆行列を大きく変え、浮動小数点ではその変化が まるごと丸め誤差ということもあり得ます。そうした逆行列を通して連立方程式を解くと、正しい桁が一つも ないのに、いかにももっともらしい答えが返ってくることがあります。
次に述べる助言の、実務上の理由がこれです。ここの計算過程は正確な分数で進むためこの問題を丸ごと避けて おり、読めるのは本当の逆行列であって、その浮動小数点近似ではありません。
逆行列そのものが要ることはめったにない
多くの場合、目的は逆行列ではなく Ax = b を解くことであり、逆行列は授業で覚えた経路に すぎません。しかもそれは高くつく経路です。A⁻¹ を求めてから掛けるのは、[A | b] をそのまま掃き出すのに比べておよそ 3 倍の計算量で、精度も一段階ではなく二段階で 落ちます。
逆行列が本当に価値を持つのは、一つの解ではなく行列そのものが必要なときです。どの入力がどの出力に どれだけ効くかを読む、ほかの変換と合成する、A⁻¹ の形で書かれた公式に代入する、といった 場面です。x だけが欲しいなら掃き出し法を、同じ A に対して多くの解が必要 なら、さらに安上がりなLU 分解を使ってください。
よくある誤り
- 成分を一つずつ逆数にする。逆行列は逆数を並べた行列ではありません。
1/a(i,j)とは無関係です。 - 順序を取り違える。
(A·B)⁻¹ = B⁻¹·A⁻¹であってA⁻¹·B⁻¹ではありません。 - 逆行列で連立方程式を解く。
Ax = bなら[A | b]を掃き出すほうが演算も少なく、数値的にも正確です。 - 大きな行列に余因子行列を使う。
n−1次の行列式がn²個必要で、3×3 を超えると掃き出し法よりはるかに遅くなります。 - 逆行列と転置行列を混同する。両者が一致するのは直交行列のときだけで、一般には何の関係もありません。