逆行列は、線形代数の勉強をしていくと必ず登場する概念です。今回は、線形代数で登場する逆行列について簡単に解説し、その後Pythonで逆行列を導出する方法について解説します。
逆行列の定義をまずは示します。
逆行列の定義
行列Aを正方行列、行列Eを単位行列とする。この時、
\begin{equation} AA^{-1} = A^{-1}A = E \end{equation}
が成り立つような$A^{-1}$が存在するとき、$A^{-1}$をAの逆行列という。
定義でも書いてあるよに、全ての正方行列に対して逆行列が存在するわけではないことは意識してください。正方行列において、逆行列が存在するような行列を正則行列といったりします。
逆に正方行列において、逆行列が存在しないような行列を特異行列といいます。
逆行列の計算方法
逆行列の計算方法はいくつかあります。
一つは掃き出し法などがあります。大学の講義やテストでは、この掃き出し法を手計算でやらせる場合が多いと思います。
機械学習やデータサイエンスの実務においては、掃き出し法を手計算でやらず、一般的な$n$次正方行列の逆行列を見つける際には、計算機を用いPythonやRなどのツールに存在している関数を利用して求めることが多いので、今回もプログラミング言語であるPythonを用いて逆行列を計算してみます。
しかし、2次の逆行列の場合は、比較的簡単に求めることができ、かつ登場頻度も非常に高いので、2次の逆行列の場合は、次に解説します。
2次正方行列の逆行列
2次の正方行列の逆行列$P$が次のように表され、逆行列が存在するとき、この逆行列$P-1$は、次のようになる。
\begin{equation} \begin{split} P = \begin{pmatrix} A & B \\ C & D \\ \end{pmatrix} \end{split} \end{equation}
上で表現される、2次の正方行列$P$において逆行列が存在するとき、その逆行列$P-1$は、
\begin{equation} \begin{split} P^{-1} = \frac{1}{AD-BC} \begin{pmatrix} D & -B \\ -C & A \\ \end{pmatrix} \end{split} \end{equation}
と表される。
Pythonで逆行列を計算する
続いて、一般の正方行列について、計算機を用いて逆行列を計算する演習をしてみます。
\begin{equation} \begin{split} A = \begin{pmatrix} 3 & 0 \\ 1 & 2 \end{pmatrix} \end{split} \end{equation}
この逆行列をPythonで導出してみます。
Pythonではnumpyという数値計算用のライブラリに、線形代数の演算が多数含まれたlinalgモジュールがあるので今回はこれを利用します。linalgモジュールのうち、inv()メソッドが逆関数を導出するのに利用することができます。
import numpy as np
A = np.array([[3, 0], [1, 2]])
np.linalg.inv(A)
# array([[ 0.33333333, 0. ],
# [-0.16666667, 0.5 ]])
逆行列を導出することができました。導出できた逆行列と元の行列をかけて、単位行列になることを念の為に確かめます。
import numpy as np
A = np.array([[3, 0], [1, 2]])
inv_A = np.linalg.inv(A)
np.dot(A, inv_A)
# array([[1., 0.],
# [0., 1.]])
となり、確かに導出した逆行列が(1)の定義を満たしていることがわかります。