MatrixCalc

逆行列の計算機

正方行列の逆行列を求め、行基本変形をひとつずつ追えます。[A | I] への掃き出し法、余因子行列の公式、モンタンテ法に対応。四捨五入した小数ではなく正確な分数で表示します。

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

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

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

行列を入力し、応用タブを開いて A⁻¹ を押してください。行列が特異なら、 誤った答えではなく明確なメッセージが返ります。計算過程のパネルは途中の値を正確な分数で表示します。0.6000000001 ではなく 3/5 と出るのは、浮動小数点ではなく有理数演算で動いているから です。

逆行列が存在するとき

逆行列 A⁻¹ は、もとの行列を打ち消す行列です。A·A⁻¹ = A⁻¹·A = I が成り立ち ます。存在するのは正方行列に限られ、しかも行列式が 0 でないときだけです。行列式が 0 の行列は特異行列と呼ばれ、逆行列をまったく持ちません。大きなものも、近似的なものも、一つも ありません。変換によって情報が失われており、どんな行列でも取り戻せないのです。

2×2 の近道

主対角成分を入れ替え、反対角成分の符号を変え、行列式で割ります。

ab
cd
⁻¹ = 1/(ad − bc) ·
d−b
−ca

ad − bc による割り算こそ、特異性が姿を見せる箇所です。行列式が 0 なら割るものがなく、 公式が破綻するのは逆行列が存在しなくなる瞬間とぴったり一致します。

拡大係数行列への掃き出し法

こちらが一般的な方法で、計算機が一段ずつ見せているのもこれです。A の隣に単位行列を書き、 左半分が単位行列になるまで行基本変形を続けます。右半分が変わり果てたもの、それが A⁻¹ です。

4710
2601
103/5−7/10
01−1/52/5

途中で左側の行がすべて 0 になったら、そこで止めてください。行列は特異で、逆行列は存在しません。結果は 必ず掛け算で確かめましょう。A·A⁻¹ はちょうど単位行列にならなければならず、A × B ボタンを使えばこの検算は 2 クリックで済みます。

上に読み込まれている 3×3 の行列は、行列式がちょうど −1 なので、逆行列も整数になります。

211
132
100
⁻¹ =
001
−213
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 次の行列式が 個必要に なります。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 次の行列式が 個必要で、3×3 を超えると掃き出し法よりはるかに遅くなります。
  • 逆行列と転置行列を混同する。両者が一致するのは直交行列のときだけで、一般には何の関係もありません。

よくある質問

なぜ逆行列がないと表示されるのですか。
行列式が 0 で、その行列が特異だからです。どれかの行がほかの行の定数倍や和になっていないか確かめてください。たいていそれが原因です。
正方でない行列に逆行列はありますか。
通常の意味ではありません。長方形の行列には片側逆行列か擬似逆行列しかなく、それらは別の演算です。
なぜ計算過程が分数で表示されるのですか。
計算エンジンが正確な有理数演算を使っているため、途中の値が丸められないからです。表示はいつでも小数に切り替えられます。
答えが正しいかどうかどう確かめますか。
逆行列と元の行列を掛けてください。対角に 1、それ以外に 0 が並ぶ単位行列にならなければなりません。
連立方程式を解くのに逆行列を求めるべきですか。
ほとんどの場合そうすべきではありません。拡大係数行列 [A | b] を掃き出すほうが計算量はおよそ 3 分の 1 で、逆行列を作って掛けるより数値的に安定です。

ほかの計算機