余因子行列を用いて逆行列を求めたい。
今回は余因子行列を用いて逆行列を求めてみたいと思います。
まずは正則行列Aをひとつ定める。
例えば今回はAとして以下の様な行列をとることにします。
import numpy as np
A = np.array([[2.,1.,1.],[0.,-2.,1.],[0.,-1.,-1.]])
行列式を定義。
np.linalgを使えばnp.linalg.det(A)でおしまいですが、ここでは
あえてdet(A)という関数を以下のようにきちんと書いておくことにします。
def det(A):
return A[0][0]*A[1][1]* A[2][2] + A[0][2]*A[1][0]*A[2][1] + A[0][1]*A[1][2]*A[2][0]\
- A[0][2]*A[1][1]*A[2][0] - A[0][1]*A[1][0]*A[2][2] - A[0][0]*A[1][2]*A[2][1]
余因子行列を与える関数(写像)を定義。
def Cof(A):
C = np.array([[0,0,0] for q in range(3)])
C[0] = C[0]+[A[1][1]*A[2][2]-A[1][2]*A[2][1], -A[0][1]*A[2][2]+A[0][2]*A[2][1], \
A[0][1]*A[1][2]-A[0][2]*A[1][1]]
C[1] = C[1]+[-A[1][0]*A[2][2]+A[1][2]*A[2][0], A[0][0]*A[2][2]-A[0][2]*A[2][0], \
-A[0][0]*A[1][2]+A[0][2]*A[1][0]]
C[2] = C[2]+[A[1][0]*A[2][1]-A[1][1]*A[2][0], -A[0][0]*A[2][1]+A[0][1]*A[2][0], \
A[0][0]*A[1][1]-A[0][1]*A[1][0]]
return C
逆行列を与える関数(写像)を定義。
ここまで来ればあとは以下のように定めて、
def Inv(A):
R = Cof(A)/det(A)
return R
この関数にAを代入すれば完了です。
# 逆行列を余因子行列により求める。
print(Inv(A))