コンテンツにスキップ

線形代数学 第15回講義ノート:逆行列の概念と存在条件

講義情報と予習ガイド

  • 講義回: 第15回
  • テーマ: 逆行列の概念と存在条件
  • 関連項目: 連立一次方程式、ガウスの消去法、行列のランク
  • 予習事項: 第11回〜第14回の内容(特に行列のランクと連立方程式の解の存在条件)を復習しておくこと

学習目標

本講義の終了時には、以下の事項について理解し、説明・計算できるようになることを目指します。

  1. 逆行列の定義と基本的な性質を理解し、説明できる
  2. 逆行列と行列のランクの関係を理解し、逆行列の存在条件を説明できる
  3. ガウスの消去法を用いて逆行列を具体的に計算できる
  4. 逆行列と連立一次方程式の関係を理解し、応用できる
  5. データサイエンスにおける逆行列の重要性を理解する

1. 基本概念

1.1 逆行列の定義

定義: \(A\)\(n \times n\) の正方行列とするとき、\(AB = BA = I_n\) となる行列 \(B\) が存在すれば、\(B\)\(A\)逆行列といい、\(A^{-1}\) と表す。ここで \(I_n\)\(n\) 次の単位行列である。

逆行列は、もとの行列に対して「掛けると単位行列になる行列」です。つまり、行列 \(A\) に対して逆行列 \(A^{-1}\) が存在するとき、以下の関係が成り立ちます。

\[A \cdot A^{-1} = A^{-1} \cdot A = I_n\]

これは数の世界での「逆数」に相当する概念です。例えば、数 \(a\) の逆数は \(\frac{1}{a}\) であり、\(a \cdot \frac{1}{a} = 1\) となります。行列の世界では、単位行列 \(I\) が数の「1」に対応し、逆行列 \(A^{-1}\) が「\(\frac{1}{a}\)」に対応します。

1.2 逆行列の基本的性質

逆行列には以下のような重要な性質があります。

  1. 正方行列でなければ逆行列は存在しない
  2. 逆行列が存在するとき、その逆行列は唯一つに定まる(一意性)
  3. 逆行列を持つ行列は正則行列または可逆行列と呼ばれる
  4. 行列 \(A\) の逆行列が存在するための必要十分条件は \(\det(A) \neq 0\) である
  5. 逆行列の逆行列はもとの行列に等しい:\((A^{-1})^{-1} = A\)
  6. 転置行列の逆行列は、逆行列の転置行列に等しい:\((A^T)^{-1} = (A^{-1})^T\)
  7. 積の逆行列は、逆の順序での逆行列の積に等しい:\((AB)^{-1} = B^{-1}A^{-1}\)

2. 理論と手法

2.1 逆行列と行列のランク

前回までの講義で学んだように、\(n \times n\) の正方行列 \(A\) のランクは、行または列ベクトルの最大線形独立な数を表します。行列 \(A\) の逆行列が存在するための必要十分条件は以下の通りです。

定理: \(n \times n\) の正方行列 \(A\) の逆行列が存在するための必要十分条件は、\(\operatorname{rank}(A) = n\) である。

つまり、行列のランクが行(または列)の数に等しいとき、かつそのときに限り、逆行列が存在します。これは、行列 \(A\) の行(または列)ベクトルがすべて線形独立であることを意味します。

2.2 逆行列の存在条件と行列式

別の観点から見ると、行列 \(A\) の逆行列が存在するための条件は行列式を用いて表すこともできます。

定理: \(n \times n\) の正方行列 \(A\) の逆行列が存在するための必要十分条件は、\(\det(A) \neq 0\) である。

この条件は、行列のランクに関する条件と同値です。なぜなら、\(\det(A) \neq 0\) であるとき、かつそのときに限り、\(\operatorname{rank}(A) = n\) となるからです。

2.3 ガウスの消去法による逆行列の計算

逆行列を求めるには、いくつかの方法がありますが、ここではガウスの消去法を用いた方法を学びます。この方法は、拡大行列を用いて系統的に計算を行います。

手順:

  1. 行列 \(A\) と単位行列 \(I\) を横に並べた拡大行列 \([A|I]\) を作成する
  2. ガウスの消去法を用いて \(A\) の部分を単位行列 \(I\) に変形する
  3. その結果得られる拡大行列は \([I|A^{-1}]\) の形となり、右側の行列が求める逆行列 \(A^{-1}\) である

この方法は、複数の連立一次方程式を同時に解くことに対応します。具体的には、\(AX = I\) という方程式を解くことで、\(X = A^{-1}\) を求めることになります。

例題1: 2×2行列の逆行列

例として、以下の2×2行列の逆行列を求めてみましょう。

\[A = \begin{pmatrix} 2 & 1 \\ 3 & 2 \end{pmatrix}\]

まず、拡大行列 \([A|I]\) を作成します。

\[\begin{pmatrix} 2 & 1 & | & 1 & 0 \\ 3 & 2 & | & 0 & 1 \end{pmatrix}\]

ガウスの消去法を用いて、左側を単位行列に変形します。

第1行を用いて、第2行から第1行の \(\frac{3}{2}\) 倍を引きます。

\[\begin{pmatrix} 2 & 1 & | & 1 & 0 \\ 0 & \frac{1}{2} & | & -\frac{3}{2} & 1 \end{pmatrix}\]

第2行を \(2\) 倍します。

\[\begin{pmatrix} 2 & 1 & | & 1 & 0 \\ 0 & 1 & | & -3 & 2 \end{pmatrix}\]

第2行を用いて、第1行から第2行の \(1\) 倍を引きます。

\[\begin{pmatrix} 2 & 0 & | & 4 & -2 \\ 0 & 1 & | & -3 & 2 \end{pmatrix}\]

第1行を \(\frac{1}{2}\) 倍します。

\[\begin{pmatrix} 1 & 0 & | & 2 & -1 \\ 0 & 1 & | & -3 & 2 \end{pmatrix}\]

したがって、求める逆行列は次の通りです。

\[A^{-1} = \begin{pmatrix} 2 & -1 \\ -3 & 2 \end{pmatrix}\]

実際に、\(A \cdot A^{-1}\) を計算して確認してみましょう。

\[A \cdot A^{-1} = \begin{pmatrix} 2 & 1 \\ 3 & 2 \end{pmatrix} \begin{pmatrix} 2 & -1 \\ -3 & 2 \end{pmatrix} = \begin{pmatrix} 2 \cdot 2 + 1 \cdot (-3) & 2 \cdot (-1) + 1 \cdot 2 \\ 3 \cdot 2 + 2 \cdot (-3) & 3 \cdot (-1) + 2 \cdot 2 \end{pmatrix} = \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix}\]

確かに単位行列になりました。

例題2: 3×3行列の逆行列

次に、以下の3×3行列の逆行列を求めてみましょう。

\[A = \begin{pmatrix} 1 & 2 & 1 \\ 2 & 5 & 3 \\ 1 & 0 & 2 \end{pmatrix}\]

拡大行列 \([A|I]\) を作成します。

\[\begin{pmatrix} 1 & 2 & 1 & | & 1 & 0 & 0 \\ 2 & 5 & 3 & | & 0 & 1 & 0 \\ 1 & 0 & 2 & | & 0 & 0 & 1 \end{pmatrix}\]

ガウスの消去法を用いて、左側を単位行列に変形します。

第1行を用いて、第2行から第1行の \(2\) 倍を引きます。

\[\begin{pmatrix} 1 & 2 & 1 & | & 1 & 0 & 0 \\ 0 & 1 & 1 & | & -2 & 1 & 0 \\ 1 & 0 & 2 & | & 0 & 0 & 1 \end{pmatrix}\]

第1行を用いて、第3行から第1行の \(1\) 倍を引きます。

\[\begin{pmatrix} 1 & 2 & 1 & | & 1 & 0 & 0 \\ 0 & 1 & 1 & | & -2 & 1 & 0 \\ 0 & -2 & 1 & | & -1 & 0 & 1 \end{pmatrix}\]

第2行を用いて、第3行に第2行の \(2\) 倍を足します。

\[\begin{pmatrix} 1 & 2 & 1 & | & 1 & 0 & 0 \\ 0 & 1 & 1 & | & -2 & 1 & 0 \\ 0 & 0 & 3 & | & -5 & 2 & 1 \end{pmatrix}\]

第3行を \(\frac{1}{3}\) 倍します。

\[\begin{pmatrix} 1 & 2 & 1 & | & 1 & 0 & 0 \\ 0 & 1 & 1 & | & -2 & 1 & 0 \\ 0 & 0 & 1 & | & -\frac{5}{3} & \frac{2}{3} & \frac{1}{3} \end{pmatrix}\]

第3行を用いて、第2行から第3行の \(1\) 倍を引きます。

\[\begin{pmatrix} 1 & 2 & 1 & | & 1 & 0 & 0 \\ 0 & 1 & 0 & | & -\frac{1}{3} & \frac{1}{3} & -\frac{1}{3} \\ 0 & 0 & 1 & | & -\frac{5}{3} & \frac{2}{3} & \frac{1}{3} \end{pmatrix}\]

第3行を用いて、第1行から第3行の \(1\) 倍を引きます。

\[\begin{pmatrix} 1 & 2 & 0 & | & \frac{8}{3} & -\frac{2}{3} & -\frac{1}{3} \\ 0 & 1 & 0 & | & -\frac{1}{3} & \frac{1}{3} & -\frac{1}{3} \\ 0 & 0 & 1 & | & -\frac{5}{3} & \frac{2}{3} & \frac{1}{3} \end{pmatrix}\]

第2行を用いて、第1行から第2行の \(2\) 倍を引きます。

\[\begin{pmatrix} 1 & 0 & 0 & | & \frac{10}{3} & -\frac{4}{3} & \frac{1}{3} \\ 0 & 1 & 0 & | & -\frac{1}{3} & \frac{1}{3} & -\frac{1}{3} \\ 0 & 0 & 1 & | & -\frac{5}{3} & \frac{2}{3} & \frac{1}{3} \end{pmatrix}\]

したがって、求める逆行列は次の通りです。

\[A^{-1} = \begin{pmatrix} \frac{10}{3} & -\frac{4}{3} & \frac{1}{3} \\ -\frac{1}{3} & \frac{1}{3} & -\frac{1}{3} \\ -\frac{5}{3} & \frac{2}{3} & \frac{1}{3} \end{pmatrix}\]

2.4 逆行列と連立一次方程式

逆行列は連立一次方程式を解く際に非常に便利なツールとなります。\(AX = B\) という連立一次方程式があるとき、行列 \(A\) の逆行列 \(A^{-1}\) が存在すれば、両辺に左から \(A^{-1}\) をかけることで解を得ることができます。

\[AX = B$$ $$A^{-1}AX = A^{-1}B$$ $$IX = A^{-1}B$$ $$X = A^{-1}B\]

このように、逆行列を用いることで、連立一次方程式の解を直接求めることができます。

しかし、実際の計算では、ガウスの消去法を用いて直接連立方程式を解くほうが効率的なケースが多いです。特に、\(A^{-1}\) を求めるには \(n^2\) 個の方程式(\(n\) 次元ベクトルを \(n\) 本)を解く必要がありますが、\(AX = B\) を直接解く場合は \(n\) 個の方程式を解くだけで済みます。

3. Pythonによる実装と可視化

ここでは、NumPyを用いて逆行列の計算と連立一次方程式の解法をPythonで実装してみましょう。

3.1 逆行列の計算

import numpy as np
import matplotlib.pyplot as plt

# 2×2行列の例
A = np.array([[2, 1], [3, 2]])
print("行列 A:")
print(A)

# numpy.linalg.inv() を使って逆行列を計算
A_inv = np.linalg.inv(A)
print("\nA の逆行列:")
print(A_inv)

# A・A^-1 = I を確認
I = np.dot(A, A_inv)
print("\nA・A^-1:")
print(np.round(I, decimals=10))  # 丸め誤差を考慮

# 3×3行列の例
B = np.array([[1, 2, 1], [2, 5, 3], [1, 0, 2]])
print("\n行列 B:")
print(B)

# 逆行列を計算
B_inv = np.linalg.inv(B)
print("\nB の逆行列:")
print(B_inv)

# B・B^-1 = I を確認
I_B = np.dot(B, B_inv)
print("\nB・B^-1:")
print(np.round(I_B, decimals=10))

3.2 特異行列と逆行列の関係

行列のランクが行(または列)の数に満たない場合、その行列は特異行列となり、通常の逆行列は存在しません。

# 特異行列の例
C = np.array([[1, 2], [2, 4]])  # 2つの行ベクトルは線形従属
print("特異行列 C:")
print(C)

# ランクを確認
rank_C = np.linalg.matrix_rank(C)
print("\nC のランク:", rank_C)

# 行列式を確認
det_C = np.linalg.det(C)
print("C の行列式:", det_C)

try:
    # 逆行列を計算しようとすると例外が発生
    C_inv = np.linalg.inv(C)
    print("C の逆行列:", C_inv)
except np.linalg.LinAlgError as e:
    print("エラー:", e)

3.3 連立一次方程式の解法

逆行列を用いて連立一次方程式を解いてみましょう。

# 連立方程式: Ax = b の例
A = np.array([[2, 1], [3, 2]])
b = np.array([5, 8])

print("行列 A:")
print(A)
print("\nベクトル b:")
print(b)

# 逆行列を用いた解法
x_inv = np.dot(np.linalg.inv(A), b)
print("\n逆行列による解:")
print(x_inv)

# numpy.linalg.solve() を使った直接解法
x_solve = np.linalg.solve(A, b)
print("\nnp.linalg.solve() による解:")
print(x_solve)

# 解の確認
print("\nA・x:")
print(np.dot(A, x_solve))

3.4 線形変換としての行列と逆行列の幾何学的解釈

行列は線形変換として解釈することができます。逆行列は、その変換を「打ち消す」変換と考えることができます。

# 線形変換の視覚化
def plot_transformation(A, title="Linear Transformation"):
    # 単位正方形の頂点
    square = np.array([[0, 0], [1, 0], [1, 1], [0, 1], [0, 0]])

    # 変換後の正方形
    transformed_square = np.dot(square, A.T)

    # プロット
    plt.figure(figsize=(10, 10))
    plt.grid(True)
    plt.axhline(y=0, color='k', linestyle='-', alpha=0.3)
    plt.axvline(x=0, color='k', linestyle='-', alpha=0.3)

    # 元の正方形
    plt.plot(square[:, 0], square[:, 1], 'b-', label="Original")

    # 変換後の正方形
    plt.plot(transformed_square[:, 0], transformed_square[:, 1], 'r-', label="Transformed")

    # 原点と基底ベクトル
    plt.arrow(0, 0, 1, 0, head_width=0.05, head_length=0.1, fc='b', ec='b', label="i")
    plt.arrow(0, 0, 0, 1, head_width=0.05, head_length=0.1, fc='b', ec='b', label="j")

    plt.arrow(0, 0, A[0, 0], A[0, 1], head_width=0.05, head_length=0.1, fc='r', ec='r', label="A·i")
    plt.arrow(0, 0, A[1, 0], A[1, 1], head_width=0.05, head_length=0.1, fc='r', ec='r', label="A·j")

    plt.title(title)
    plt.xlim(-2, 3)
    plt.ylim(-2, 3)
    plt.axis('equal')
    plt.legend()
    plt.show()

# 変換行列と逆行列
A = np.array([[2, 1], [1, 2]])
A_inv = np.linalg.inv(A)

# 変換の可視化
plot_transformation(A, "Linear Transformation: A")
plot_transformation(A_inv, "Inverse Transformation: A^(-1)")

5. 演習問題

基本問題

問題1: 以下の行列の逆行列を求めなさい。 \(\(A = \begin{pmatrix} 3 & 1 \\ 2 & 1 \end{pmatrix}\)\)

問題2: 以下の行列の逆行列が存在するか判定し、存在する場合は逆行列を求めなさい。 \(\(B = \begin{pmatrix} 2 & 4 \\ 1 & 2 \end{pmatrix}\)\)

問題3: 以下の連立方程式を逆行列を用いて解きなさい。 \(\(\begin{cases} 2x + y = 7 \\ x + y = 4 \end{cases}\)\)

問題4: 以下の行列の逆行列を求めなさい。 \(\(C = \begin{pmatrix} 1 & 1 & 1 \\ 0 & 2 & 1 \\ 1 & 0 & 2 \end{pmatrix}\)\)

応用問題

問題5: \(A\)\(B\) が正方行列で、\(AB\) が正則行列ならば、\(A\)\(B\) は共に正則行列であることを証明しなさい。

問題6: 2次正方行列 \(A\) に対して、\(A^2 = O\)\(O\) は零行列)が成り立つとき、\(I - A\) の逆行列を求めなさい。

問題7 (健康データサイエンス関連): 健康保険会社のデータでは、ある治療法を受けた患者の状態が改善する確率を表す遷移行列があります。現在の健康状態(良好、中程度、悪い)から6ヶ月後の健康状態への遷移を表す行列 \(P\) が次のように与えられています。

\[P = \begin{pmatrix} 0.7 & 0.2 & 0.1 \\ 0.3 & 0.5 & 0.2 \\ 0.1 & 0.3 & 0.6 \end{pmatrix}\]

ここで、\(P_{ij}\) は状態 \(i\) から状態 \(j\) への遷移確率を表します(\(i, j = 1,2,3\) は「良好」「中程度」「悪い」にそれぞれ対応)。

(a) この遷移行列の逆行列 \(P^{-1}\) を求めなさい。

(b) 逆行列 \(P^{-1}\) の各要素 \((P^{-1})_{ij}\) の解釈について、健康データの文脈で考察しなさい。特に、逆行列の負の値はどのように解釈できるか?

(c) 6ヶ月後の患者の健康状態分布が \([0.4, 0.35, 0.25]\) であったとき、元の健康状態分布を求めなさい。

6. よくある質問と解答

Q1: 逆行列が存在するための条件は何ですか?

A1: \(n \times n\) の正方行列 \(A\) の逆行列が存在するための必要十分条件は以下のいずれかです。 - \(\operatorname{rank}(A) = n\) (行列のランクが行数に等しい) - \(\det(A) \neq 0\) (行列式がゼロでない) - 行列 \(A\) の行(または列)ベクトルが線形独立である

Q2: 逆行列はどのような場合に存在しませんか?

A2: 以下の場合に逆行列は存在しません。 - 正方行列でない場合 - 正方行列だが特異行列(行列式がゼロ)の場合 - 行列のランクが行数より小さい場合 - 行列の行(または列)ベクトルが線形従属関係にある場合

Q3: 逆行列と連立一次方程式の関係を教えてください。

A3: 連立一次方程式 \(AX = B\) において、\(A\) の逆行列 \(A^{-1}\) が存在する場合、方程式の解は \(X = A^{-1}B\) で与えられます。これは、\(A\) が正則(可逆)であれば、連立一次方程式の解が唯一つ存在することを意味します。

Q4: 逆行列の計算方法にはどのようなものがありますか?

A4: 主な計算方法には以下があります。 - ガウスの消去法(拡大行列を用いる方法) - 余因子行列を用いる方法(余因子行列の転置を行列式で割る) - 数値計算ライブラリを使用する方法(NumPyの linalg.inv() など)

Q5: データサイエンスで逆行列が重要なのはなぜですか?

A5: データサイエンスでは以下のような場面で逆行列が重要です。 - 線形回帰モデルにおける係数推定(正規方程式) - 次元削減手法(PCAなど)における固有値・固有ベクトルの計算 - 多変量解析における共分散行列の処理 - 画像処理や信号処理における変換行列の操作

Q6: 逆行列の計算で気をつけるべき点は何ですか?

A6: 主な注意点は以下の通りです。 - 行列が特異行列に近い場合(条件数が大きい場合)、数値的に不安定になる - 大きな行列では計算コストが高くなる(\(n \times n\) 行列の場合、計算量は \(O(n^3)\)) - 丸め誤差が蓄積する可能性がある - 逆行列を直接計算せずに、連立方程式を解く方が効率的な場合が多い

7. 参考文献

  1. Gilbert Strang. "線形代数とその応用"
  2. David C. Lay. "線形代数とその応用"
  3. 村上正康. "データサイエンスのための線形代数"
  4. 高橋渉. "工学のための線形代数学"
  5. Sheldon Axler. "線形代数学の世界 -抽象ベクトル空間入門-"