正方行列 \(A\) に対して,\(AX = E\) となるような正方行列 \(X\) が存在するとき,正方行列 \(A\) は正則であるといい,\(X\) を \(A\) の逆行列 (inverse matrix)といいます.また,正方行列 \(A\) が正則であるための必要十分条件は \(|A| \neq 0\) です.逆行列は np.linalg.inv()
を用いると良いでしょう.なお,\(|A|\) は正方行列 \(A\) の行列式です.
3次元単位行列
import numpy as np # プログラムの先頭でモジュールを読み込む
A = np.array([[2, 0, 1], [-1, 1, 0],[-2, 3, 4]])
print(A)
inv = np.linalg.inv(A)
print(inv)
[[ 2 0 1] [-1 1 0] [-2 3 4]] [[ 0.57142857 0.42857143 -0.14285714] [ 0.57142857 1.42857143 -0.14285714] [-0.14285714 -0.85714286 0.28571429]]
実際に \(AX = E\) となることを確認しておこう.
逆行列の確認
print(np.dot(A, inv))
[[ 1.00000000e+00 0.00000000e+00 0.00000000e+00] [ 1.11022302e-16 1.00000000e+00 -5.55111512e-17] [ 0.00000000e+00 4.44089210e-16 1.00000000e+00]]
上の結果で 1.00000000e+00
は \(1.0 \times 10^0 = 1.0\) を意味し,1.11022302e-16
は \(1.11022302 \times 10^{-16} = 0.000000000000000111022302 \approx 0.0 \) を意味することに注意しよう.つまり結果は単位行列になっています.なお,Numpy では np.set_printoptions(suppress=True)
という命令を実行することで,上のような指数形式の表示ではなく小数形式で表示する指定も可能です.次の通り実行すると単位行列であることがより分かりやすくなります.
小数形式で表示
np.set_printoptions(suppress=True)
print(np.dot(A, inv))
[[ 1. 0. 0.] [ 0. 1. 0.] [-0. 0. 1.]]
さらに,この正方行列 \(A\) の行列式を求めると \(|A| \neq 0\) なることも確認できます.
行列式の確認
det = np.linalg.det(A)
print(det)
6.999999999999998
もちろん逆行列が存在しない行列もあります.次のような行列は行列式が 0 となるので正則ではなく,逆行列の計算でエラーが表示されます.
行列式の確認
A = np.array([[2, 0, 1], [2, 0, 1],[-2, 3, 4]])
print(A)
det = np.linalg.det(A)
print(det)
inv = np.linalg.inv(A)
print(inv)
[[ 2 0 1] [ 2 0 1] [-2 3 4]] 0.0 ------------------------------------------------ LinAlgError Traceback (most recent call last) (以下のエラーメッセージは省略)