• Skip to main content

HEADBOOST

  • Python
  • NumPy
  • 文法
現在の場所:ホーム / 線形代数 / 行列 / 行列式 / 逆行列の条件の徹底解説~逆行列が存在しないのはどういう場合?~

逆行列の条件の徹底解説~逆行列が存在しないのはどういう場合?~

時には、逆行列を求めようとしているのに、どうしても最後まで求められない場合があります。または行列式を計算していて、その値がゼロになってしまう場合があります。こうした場合は、実は逆行列が存在しないということを意味しています。

このページでは、この逆行列が存在する条件について…

  • 逆行列が存在しない行列とはどういうものなのか
  • どういう場合に逆行列が存在しないのか(判定方法について)
  • なぜその判定方法で逆行列の存在・非存在がわかるのか

という重要なポイントをアニメーションを交えながら誰でもわかるように解説していきます。この辺りから線形代数の面白味も増していくと思いますので、ぜひ楽しみながらご覧頂ければ嬉しく思います。

それでは始めましょう。

目次

  • 1. 逆行列が存在しない行列とは?
  • 2. 逆行列が存在するための条件
  • 3. まとめ

1. 逆行列が存在しない行列とは?

まず逆行列とは、以下のアニメーションで示しているように空間をある行列 \(A\) で線形変換した後に、その空間を元に戻す働きをする行列 \(A^{-1}\) のことでした。

それでは、以下のような線形変換をする行列の場合は、逆行列はどうなるでしょうか?

これらの線形変換では、基底ベクトル \(\hat{\imath}\) と \(\hat{\jmath}\) が、最初の線形変換では同一直線上に移動して平面空間が一本の線に収束してしまっており、二つ目の線形変換では原点に移動して平面空間が一つの点に収束してしまっています。そのため、次にどのような行列を掛けたとしても元の空間に戻すことは不可能です。つまり逆行列は存在しません。

つまり逆行列を持たない行列があるのです。そして、そのような行列のことを「非正則行列」といいます。もちろん逆行列を持つ行列が「正則行列」です。

そして線形変換では、ある行列が正則行列なのか非正則行列なのかを、あらかじめ判定できることが重要な意味を持ちます。そこで次に、どうすれば判定することができるのかについて解説します。

2. 逆行列が存在するための条件

結論から言うと、ある行列に逆行列が存在するかどうかは行列式で判定することができます。行列式とは、『行列式の意味と定義と求め方~行列式とは何か驚くほどよくわかる解説~』で解説した通り、線形変換後に空間が何倍になるかを示すものです。

以下のアニメーションを見て頂くと、すぐに理解することができます。

このように行列式は、線形変換後の空間拡張の倍数を明らかにしてくれる式です。さて、それでは非正則行列の場合は、行列式の値はどうなるでしょうか?

以下のアニメーションで確認してみましょう。

いかがでしょうか。

このように逆行列を持たない非正則行列で線形変換を行ったときは空間は \(0\) 倍になります。\(0\) に対しては何を掛けても値は \(0\) なので、やはり次にどのような行列を掛けても元の空間に戻すことはできないのです。つまり、行列式の値がゼロの行列は非正則行列であり、ゼロ以外の行列は正則行列であるということです。

重要
行列式の値がゼロのとき、その行列には逆行列は存在しない(=その行列は非正則行列である)。行列式の値がゼロ以外のとき、その行列には逆行列が存在する(=その行列は正則行列である)。

数学的な証明

プログラマーとしては、逆行列と行列式に関しては、以上のことを理解しておけば十分です。しかし数学的には、行列式の値がゼロの場合は逆行列が存在しないのは何故なぜなのかが気になるのは当然のことです。気になることはなんでも考え尽くすのが数学というものです。まさにその姿勢からこそ、偉大な発見がいくつも生み出されています。そこで、その理由については以下のボックス内で解説することにします。ご興味のある方は、ぜひご確認ください。

行列式で逆行列があるか判定できる理由(2×2行列の場合)

実は行列式は、別の視点から見た場合、ある行列の列ベクトル同士がお互いに独立しているかどうかを判定するツールであると考えることができます(独立性については「ベクトルの一次独立とは?」をご参照ください)。

例として、以下の行列 \(A\) について考えてみましょう。

\[
\left[ \begin{array}{cc} 1 & 2 \\ 2 & 4 \end{array} \right]
\]

この行列の一列目を成分とするベクトルを \(\vec{a}\)、二列目を成分とするベクトルを \(\vec{b}\) としたら、次のようになります(余談ですが、列ベクトルを取っても行ベクトルをとっても同じことですので、どちらでも構いません)。

\[\vec{a}
=
\left[ \begin{array}{cc} 1 \\ 2 \end{array}\right]
,\hspace{3mm}
\vec{b}
=
\left[ \begin{array}{cc} 2 \\ 4 \end{array}\right]
\]

アニメーションで見たら分かる通り、この二つのベクトルは明らかに方向が一致しています。

これは、これらのベクトルがお互いに独立していない・・・・・ということを意味しています。つまり、この場合、この二つのベクトルでは平行四辺形を作ることができないため、二つのベクトルが作る面積は常にゼロになるのです。つまり、ベクトルが独立していないことが行列の非正則性の原因です。

さて、ここまでで \(2×2\) の行列では、二つの列ベクトルが同じ方向を向いている場合(お互いに一次独立していない場合)は逆行列が存在しないということがわかりました。それでは、なぜ行列式の値を計算することで、列ベクトルの独立性を判定することができるのでしょうか?

実はこれは「同じ向きのベクトルの外積はゼロになる」という性質を利用しています(ベクトルの外積については「ベクトルの外積とは何か?」をご参照ください)。

例として以下の正方行列 \(M\) があるとします。

\[ M=
\left[ \begin{array}{cc} a & b \\ c & d \end{array} \right]
\]

この行列\(M\)の一列目を成分としたベクトルを \(\vec{a}\)、二列目を成分としたベクトルを \(\vec{b}\) として、その方向関係を見てみましょう。

\[
\vec{a}=\left[ \begin{array}{c} a \\ c \\0 \end{array} \right]
, \hspace{3mm}
\vec{b}=\left[ \begin{array}{c} b \\ d \\0 \end{array} \right]
\]

なお、各ベクトルの第三成分にゼロを加えているのは、ベクトルの外積は平面空間では求めることができないからです。そのため、ゼロを足すことで擬似的に立体空間における平面状に存在するベクトルとしています。

さて、ベクトルの外積は次のように計算します。

\[
\vec{a}\times\vec{b}=
\left[ \begin{array}{c}
c \cdot 0 – d \cdot 0\\
0 \cdot b – 0 \cdot a \\
ad-bc
\end{array} \right]
\]

このように、\(\vec{a}\) と \(\vec{b}\) の第三成分がともにゼロであるため、これは結局、次の計算をしていることと全く同じことになります。

\[\vec{a}\times\vec{b}= ad – bc\]

この式の右辺にご注目ください。これは \(2×2\) の行列式の計算と全く同じですね。つまり、\(2×2\) の行列式は、\(2×2\) 行列のそれぞれの列ベクトル同士のベクトルの外積の計算をしているのとまったく同じことになるのです。

そして上述の通り、二つのベクトルが同じ方向を向いている場合、ベクトルの外積はゼロになります。つまり、行列式の値がゼロのということは、二つの列ベクトルが同じ方向を向いているということを表しているため、非正則行列であるということになります。

これが行列式で、ある行列の正則性を判定することができる理由です。

行列式で逆行列があるか判定できる理由(3×3行列の場合)

\(3×3\) 行列の場合もまったく同じです。

行列式を計算することは、その行列の三つの列ベクトルがお互いに一次独立しているかどうかを判定しているのと同じことになります。以下の行列 \(M\) を使って見ていきましょう。

\[ M=
\left[ \begin{array}{ccc} m_{11} & m_{12} & m_{13} \\ m_{21} & m_{22} & m_{23} \\ m_{31} & m_{32} & m_{33} \end{array} \right]
\]

この行列 \(M\) の各列を成分としたベクトルは、次のように表現することができます(上でもお伝えしましたが、列ベクトルを取っても行ベクトルをとっても同じことですので、どちらでも構いません)。

\[
\vec{U}=\left[ \begin{array}{c} m_{11} \\ m_{21} \\ m_{31} \end{array} \right]
, \hspace{3mm}
\vec{V}=\left[ \begin{array}{c} m_{12} \\ m_{22} \\ m_{32} \end{array} \right]
, \hspace{3mm}
\vec{W}=\left[ \begin{array}{c} m_{13} \\ m_{23} \\ m_{33} \end{array} \right]
\]

それでは、これらのベクトルが独立しているかどうかを確認していきましょう。

まず、\(\vec{U}\) と\(\vec{V}\) がお互いに独立しているかどうかを確認します。この二つがお互いに独立しているなら、これらのベクトルは三次元空間において平面を形成していることになります。反対に、お互いに独立していないなら、これらのベクトルは同一方向に重なっており、平面(平行四辺形)を形成できていないことになります。

これは上で解説した \(2×2\)の場合とまったく同じで、ベクトルの外積 \(\vec{U}\times\vec{V}\) の値によって確認することができます。外積は、その性質上、二つのベクトルが同じ向きのとき(=独立でないとき)にゼロになるからです。

これは次のように計算します。

\[
\vec{U}\times\vec{V}= \left[ \begin{array}{c}
m_{21}m_{32} – m_{22}m_{31}\\
m_{31}m_{12} – m_{32}m_{11} \\
m_{11}m_{22} – m_{12}m_{21}
\end{array} \right]
\]

これで計算した値がゼロなら、お互いに独立ではない・・・・ことになり、残ったベクトル \(\vec{W}\) と関係なく、行列 \(M\) は非正則行列であることが確定します。

一方で、ゼロ以外の場合は、この2つのベクトルは独立であることが確定します。つまり、この2つのベクトルは三次元空間において平面を形成していることになります。そして次は、もう一つのベクトルである \(\vec{W}\) とも独立しているかどうかを確認することが必要になります。

もし \(\vec{W}\) が、\(\vec{U}, \vec{V}\) と同一平面上にないのであれば、三つのベクトルはすべてお互いに独立していることになりますし、同一平面上にあるのであれば独立していないことになります。

それでは、三つのベクトルが同一平面上に存在しているのか・していないのかは、どうやって確認することができるのでしょうか?

結論から言うとベクトルの内積を使えばいいのです。ベクトルの内積には、「直交するベクトル同士の積はゼロになる」という性質があります。つまり、\(\vec{U}\times\vec{V}\) と \(\vec{W}\) の内積がゼロであれば、それらは直交していることになり、それぞれのベクトルは同一平面上に存在することになります。

つまり、\((\vec{U}\times\vec{V})\cdot\vec{W}=0\) のときは非正則で、\((\vec{U}\times\vec{V})\cdot\vec{W}≠0\) のときは正則であるということになります。

そして、これを実際に計算すると次のようになります。

\[\begin{eqnarray}
|M| &=& (\vec{U}\times\vec{V})\cdot\vec{W} \\
&=& (m_{21}m_{32}-m_{22}m_{31})m_{13} \\
& & + (m_{31}m_{12}-m_{32}m_{11})m_{23} \\
& & + (m_{11}m_{22}-m_{12}m_{21})m_{33}
\end{eqnarray}
\]

ここまで来たらもう分かります。この計算式は、\(3×3\) の行列式とまったく同じなのです。

つまり、行列式はやはり、その行列のそれぞれの列ベクトルが独立しているかどうかを判定する式なのです。この値がゼロのときは、列ベクトルが独立していない・・・・・ことになるので逆行列は存在しません。一方で、ゼロ以外のときは列ベクトルがすべて独立していることになるので逆行列が存在します。

以上が行列式で正則性を判定できる理由です。

3. まとめ

いかがだったでしょうか?

行列式の値がゼロのとき、その行列には逆行列は存在しません。なぜなら、行列式とは線形変換によって空間が何倍になるのかを知るためのものだからです。空間がゼロ倍になるということは、その空間の次元が一つ下がるということなので、その後にどのような行列を掛けたとしても、元の空間に戻すことはできません。

以上が、行列式の値がゼロのときは逆行列が存在しない理由です。まずはここまでをしっかりとイメージできるようになりましょう。

なお数学的には、行列式はある行列の列ベクトル(行ベクトルでも構いません)同士がお互いに独立しているかどうかを判定する式です。プログラミング的にはこれについて絶対に理解しておかなければいけないというわけではありませんが、数学的には必要です。これについては、数学的な興味がある場合や、後学のために興味があるという場合に読み返して頂ければと思います。

このエントリーをはてなブックマークに追加
Tweet

Filed Under: 行列式, 逆行列 moriyama

About moriyama

Reader Interactions

コメントを残す コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。

Copyright © 2021 ·