逆行列#

n次正方行列Aに対し

A1A=AA1=I

を満たす正方行列A1が存在するとき、A正則行列(regular matrix)可逆行列(invertible matrix) とよばれる。

また、A1A逆行列という。(IAと同じサイズの単位行列)

正則でない行列は 特異行列(singular matrix) という。

正則行列の条件#

正方行列Aが正則行列であるための必要十分条件はdet(A)0である。

Aの逆行列A1の計算方法の一つに

A1=1det(A)A~

があり、分母がdet(A)0である必要がある。ここでA~Aの余因子行列である。

import numpy as np

A = np.array([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 0],
])

def cofactor(A, i, j):
    """余因子を計算する関数"""
    A_minor = np.delete(A, i, axis=0)
    A_minor = np.delete(A_minor, j, axis=1)
    return (-1)**(i + j) * np.linalg.det(A_minor)

def cofactor_matrix(A):
    """余因子行列"""
    C = np.zeros_like(A, dtype=np.float32)
    for i in range(A.shape[0]):
        for j in range(A.shape[1]):
            C[i, j] = cofactor(A, i=i, j=j)
    return C.T

# det(A) != 0 かどうかを確認
print(f"det(A) = {np.linalg.det(A)}")

# 余因子行列の計算
A_adj = cofactor_matrix(A)
print(f"\n余因子行列 A_adj:\n{A_adj}")

# 逆行列
A_inv = (1 / np.linalg.det(A)) * A_adj
print(f"\n逆行列 A^-1:\n{A_inv.round(3)}")
det(A) = 27.0

余因子行列 A_adj:
[[-48.  24.  -3.]
 [ 42. -21.   6.]
 [ -3.   6.  -3.]]

逆行列 A^-1:
[[-1.778  0.889 -0.111]
 [ 1.556 -0.778  0.222]
 [-0.111  0.222 -0.111]]
# ちゃんと逆行列になっているか確認
(A_inv @ A).round(1)
array([[ 1.,  0.,  0.],
       [-0.,  1.,  0.],
       [ 0.,  0.,  1.]])

余因子行列と逆行列#

An次正方行列、A~Aの余因子行列、In次単位行列とすると

AA~=A~A=det(A)I

という関係がある。

なので、Aが正則であれば

1det(A)A~A1A=I

となる。

print(f"det(A) = {np.linalg.det(A):.0f}")
print(f"A_adj @ A: \n{A_adj @ A}")
det(A) = 27
A_adj @ A: 
[[27.  0.  0.]
 [ 0. 27.  0.]
 [ 0.  0. 27.]]

逆行列の計算規則#

定理

(A1)1=A
証明

逆行列の定義より (A1)1ついて

(A1)(A1)1=(A1)1(A1)=I

が成り立つことになる。これを満たすのは (A1)1=Aである

定理

(AB)1=B1A1
証明

B1A1に右からABを掛けると

B1A1AIB=B1B=I

左から掛けると

ABB1A1=AA1=I

となる。よって

(AB)(B1A1)=(B1A1)(AB)=I

となるため、逆行列の定義より

B1A1=(AB)1

である。

定理

(Ak)1=(A1)k

定理

(A)1=(A1)
証明
AA1=A1A=I

の両辺の転置行列を考えると

(AA1)=(A1A)=I

転置の性質(AB)=BAI=Iより

(A1)A=A(A1)=I

となる。よってAは正則であり、その逆行列は(A1)である。

import numpy as np

A = np.array([
    [1, 2],
    [3, 4],
])
B = A + 3
A_inv = np.linalg.inv(A)

A_inv @ B @ A
array([[-11., -16.],
       [ 15.,  22.]])