線形代数学 講義ノート 第22回
1. 講義情報と予習ガイド
講義回: 第22回
テーマ: 基本変形と行列式の計算
関連項目: 行列式、基本変形、行列のランク、逆行列
予習内容:
- 前回学習した行列式の定義と基本性質の復習
- 基本変形の概念(第11回の内容)の復習
2. 学習目標
- 行列の基本変形と行列式の値の変化の関係を理解する
- 基本変形を用いた行列式の効率的な計算方法を習得する
- ランク落ち行列と行列式の関係を理解する
- 基本変形と行列式を用いて逆行列の存在条件を説明できるようになる
- 2次・3次行列の行列式を基本変形を用いて計算できるようになる
3. 基本概念
3.1 行列の基本変形の復習
行列の基本変形は、行列を別の行列に変形するための基本的な操作です。連立一次方程式を解くガウスの消去法で使用した操作と同じものです。
定義: 行列に対する基本変形とは、以下の3種類の操作のことを指します。 1. 行の交換: 2つの行を入れ替える 2. 行のスカラー倍: ある行の全ての要素を0でない定数倍する 3. 行の加算: ある行の定数倍を別の行に加える
例えば、以下のような行列に対して基本変形を行うと:
-
1行目と2行目を交換する: \(\(\begin{pmatrix} 4 & 5 & 6 \\ 1 & 2 & 3 \\ 7 & 8 & 9 \end{pmatrix}\)\)
-
1行目を2倍する: \(\(\begin{pmatrix} 2 & 4 & 6 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{pmatrix}\)\)
-
1行目の3倍を3行目に加える: \(\(\begin{pmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 10 & 14 & 18 \end{pmatrix}\)\)
3.2 行列式と基本変形の関係
基本変形を行うと、行列式の値がどのように変化するかを理解することは、行列式を効率的に計算するために重要です。
定理: 行列 \(A\) の行列式 \(\det(A)\) と基本変形後の行列 \(A'\) の行列式 \(\det(A')\) の関係は以下のようになります。 1. 行の交換: \(\det(A') = -\det(A)\)(符号が反転) 2. 行のスカラー倍: \(\det(A') = c \cdot \det(A)\)(\(c\) は定数) 3. 行の加算: \(\det(A') = \det(A)\)(変化なし)
これらの関係は、行列式の性質から導かれます。特に第3の性質は、行列式の多重線形性から導かれる重要な性質です。
具体例:
次の \(3 \times 3\) 行列を考えましょう: \(\(A = \begin{pmatrix} 2 & 1 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{pmatrix}\)\)
この行列の行列式は展開すると \(\det(A) = -12\) となります。
- 行の交換: 第1行と第2行を交換すると: \(\(A' = \begin{pmatrix} 4 & 5 & 6 \\ 2 & 1 & 3 \\ 7 & 8 & 9 \end{pmatrix}\)\)
行列式は \(\det(A') = 12 = -\det(A)\) となり、符号が反転しています。
- 行のスカラー倍: 第1行を3倍すると: \(\(A'' = \begin{pmatrix} 6 & 3 & 9 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{pmatrix}\)\)
行列式は \(\det(A'') = 3 \cdot (-12) = -36 = 3 \cdot \det(A)\) となり、スカラー倍(この場合は3倍)されています。
- 行の加算: 第1行の2倍を第3行に加えると: \(\(A''' = \begin{pmatrix} 2 & 1 & 3 \\ 4 & 5 & 6 \\ 11 & 10 & 15 \end{pmatrix}\)\)
行列式は計算すると \(\det(A''') = -12 = \det(A)\) となり、値は変化していません。
これらの例から、基本変形が行列式に与える影響を確認できます。特に行の加算は行列式の値を変えないという性質は、ガウスの消去法を用いた行列式の計算において非常に重要です。
4. 理論と手法
4.1 基本変形を用いた行列式の計算
基本変形を利用すると、行列式の計算を簡略化できます。特に、三角行列(上三角または下三角行列)の行列式は対角成分の積となるため、基本変形によって行列を三角行列に変形することで計算が容易になります。
定理: 三角行列の行列式は、対角成分の積に等しい。 \(\(\det\begin{pmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ 0 & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & a_{nn} \end{pmatrix} = a_{11} \cdot a_{22} \cdot \ldots \cdot a_{nn}\)\)
この性質を利用して、一般の行列の行列式を計算するための手順は以下のようになります:
- 基本変形を用いて、行列を上三角(または下三角)行列に変形する
- 基本変形によって行列式がどのように変化したかを追跡する
- 三角行列の行列式(対角成分の積)を計算する
- 基本変形による変化を考慮して、元の行列の行列式を求める
具体例: 以下の行列の行列式を計算します。
ステップ1: 基本変形を使って上三角行列に変形します。
\(1\)行目の\(-2\)倍を\(2\)行目に加える: \(\(\begin{pmatrix} 2 & 1 & 3 \\ 0 & -3 & -4 \\ -2 & 5 & 7 \end{pmatrix}\)\)
\(1\)行目を\(3\)行目に加える: \(\(\begin{pmatrix} 2 & 1 & 3 \\ 0 & -3 & -4 \\ 0 & 6 & 10 \end{pmatrix}\)\)
\(2\)行目の\(-2\)倍を\(3\)行目に加える: \(\(\begin{pmatrix} 2 & 1 & 3 \\ 0 & -3 & -4 \\ 0 & 0 & 2 \end{pmatrix}\)\)
ステップ2: 上三角行列の行列式を計算します。 \(\(\det(A) = 2 \times (-3) \times 2 = -12\)\)
行の加算は行列式の値を変化させないため、元の行列の行列式も \(\det(A) = -12\) となります。
4.2 ランク落ち行列と行列式の関係
行列のランクと行列式には密接な関係があります。特に、ランク落ち行列(ランクが行数よりも小さい行列)の行列式は0になります。
定理: \(n \times n\) 行列 \(A\) について、\(\text{rank}(A) < n\) であれば \(\det(A) = 0\) である。
この定理は、行列のランクが行数よりも小さいということは、少なくとも1つの行が他の行の線形結合で表されることを意味し、行列式の性質から、そのような行列の行列式は0になります。
証明の概略: ランク落ち行列では、ある行が他の行の線形結合として表されます。行の加算による基本変形は行列式の値を変化させないため、基本変形によってある行を全て0にすることができます。0行を含む行列の行列式は0です。
具体例: 次の行列はランク2であり、第3行は第1行と第2行の線形結合(第1行 + 第2行)で表されます。
基本変形を用いて計算すると:
\(1\)行目の\(-4\)倍を\(2\)行目に加える: \(\(\begin{pmatrix} 1 & 2 & 3 \\ 0 & -3 & -6 \\ 5 & 7 & 9 \end{pmatrix}\)\)
\(1\)行目の\(-5\)倍を\(3\)行目に加える: \(\(\begin{pmatrix} 1 & 2 & 3 \\ 0 & -3 & -6 \\ 0 & -3 & -6 \end{pmatrix}\)\)
\(2\)行目の\(-1\)倍を\(3\)行目に加える: \(\(\begin{pmatrix} 1 & 2 & 3 \\ 0 & -3 & -6 \\ 0 & 0 & 0 \end{pmatrix}\)\)
0行を含む行列の行列式は0なので、\(\det(B) = 0\) となります。
4.3 行列式と逆行列の存在条件
行列式は、逆行列の存在を判定するための重要な基準となります。
定理: \(n \times n\) 行列 \(A\) が可逆(逆行列が存在する)であるための必要十分条件は \(\det(A) \neq 0\) である。
この定理は、行列のランクと逆行列の存在条件を結びつけるものです。前述したように、\(\det(A) = 0\) のとき、\(\text{rank}(A) < n\) となり、行列は正則(非特異)ではなくなります。
具体例: 以下の行列の行列式を計算し、逆行列が存在するかを判定します。
行列式は \(\det(C) = 2 \times 2 - 1 \times 4 = 4 - 4 = 0\) となります。
したがって、\(\det(C) = 0\) なので、この行列は逆行列を持ちません。実際、この行列の第2行は第1行の2倍であり、ランクは1(行数2よりも小さい)となっています。
5. Pythonによる実装と可視化
行列の基本変形と行列式の計算をPythonで実装してみましょう。NumPyライブラリを使用します。
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# 行列の定義
A = np.array([[2, 1, 3],
[4, -1, 2],
[-2, 5, 7]])
# 行列式の計算
det_A = np.linalg.det(A)
print("行列式 det(A) =", det_A)
# 行の基本変形を実行する関数
def row_exchange(matrix, i, j):
"""行iと行jを交換"""
result = matrix.copy()
result[[i, j]] = result[[j, i]]
return result
def row_multiply(matrix, i, c):
"""行iをc倍"""
result = matrix.copy()
result[i] = c * result[i]
return result
def row_add(matrix, i, j, c):
"""行jにc倍した行iを加える"""
result = matrix.copy()
result[j] = result[j] + c * result[i]
return result
# 基本変形によるガウスの消去法で上三角行列に変換
def to_upper_triangular(matrix):
n = matrix.shape[0]
result = matrix.copy().astype(float) # 浮動小数点に変換
multipliers = [] # 行列式の変化を追跡するための乗数
for i in range(n):
# ピボットが0なら行を交換
if result[i, i] == 0:
for j in range(i+1, n):
if result[j, i] != 0:
result = row_exchange(result, i, j)
multipliers.append(-1) # 行交換で符号反転
break
else:
# ピボット列がすべて0ならランク落ち
return result, 0
# 対角成分以下を消去
for j in range(i+1, n):
if result[j, i] != 0:
factor = result[j, i] / result[i, i]
result = row_add(result, i, j, -factor)
# 対角成分の積を計算
det = 1
for i in range(n):
det *= result[i, i]
# 基本変形による乗数を考慮
for m in multipliers:
det *= m
return result, det
# 上三角行列への変換と行列式の計算
upper_triangular_A, det_A_manual = to_upper_triangular(A)
print("上三角行列:")
print(upper_triangular_A)
print("手動計算した行列式 det(A) =", det_A_manual)
# ランク落ち行列の例
B = np.array([[1, 2, 3],
[4, 5, 6],
[5, 7, 9]])
det_B = np.linalg.det(B)
print("\nランク落ち行列の行列式 det(B) =", det_B)
# 行列式の値とランクの可視化
matrices = []
determinants = []
ranks = []
# 様々な行列を生成
for i in range(20):
# ランダムな行列を生成
matrix = np.random.randint(-5, 6, (3, 3))
matrices.append(matrix)
# 行列式を計算
det = np.linalg.det(matrix)
determinants.append(abs(det))
# ランクを計算
rank = np.linalg.matrix_rank(matrix)
ranks.append(rank)
# 行列式の絶対値とランクの関係の散布図
plt.figure(figsize=(10, 6))
for rank in range(1, 4):
indices = [i for i, r in enumerate(ranks) if r == rank]
plt.scatter([determinants[i] for i in indices],
[rank] * len(indices),
label=f'Rank {rank}')
plt.xlabel('行列式の絶対値')
plt.ylabel('行列のランク')
plt.title('3×3行列における行列式の絶対値とランクの関係')
plt.legend()
plt.grid(True)
plt.yscale('linear')
plt.xscale('log') # 行列式の値が広範囲に分布するため対数スケール
plt.show()
# 逆行列の存在と行列式の関係
invertible = [abs(np.linalg.det(matrices[i])) > 1e-10 for i in range(len(matrices))]
sns.histplot(determinants, bins=20)
plt.xlabel('行列式の絶対値')
plt.ylabel('頻度')
plt.title('行列式の絶対値の分布')
plt.axvline(x=1e-10, color='r', linestyle='--', label='逆行列存在の閾値')
plt.legend()
plt.show()
print(f"生成した行列のうち {sum(invertible)} 個は逆行列が存在します。")
この実装では、以下のことを行います:
- NumPyを使用して行列の行列式を計算
- 基本変形の操作を実装し、ガウスの消去法で上三角行列に変換
- 上三角行列から行列式を計算
- ランク落ち行列の行列式が0になることを確認
- ランダムな行列を生成し、行列式とランクの関係を可視化
- 行列式の絶対値と逆行列の存在関係を可視化
6. 演習問題
基本問題
-
以下の行列の行列式を、基本変形を用いて計算せよ。 \(\(A = \begin{pmatrix} 3 & 1 & -2 \\ -2 & 4 & 5 \\ 6 & -3 & 1 \end{pmatrix}\)\)
-
以下の行列の行列式を、基本変形を用いて計算せよ。 \(\(B = \begin{pmatrix} 2 & -1 & 3 & 4 \\ 1 & 2 & 0 & -2 \\ -1 & 3 & 2 & 1 \\ 3 & 0 & -1 & 2 \end{pmatrix}\)\)
-
以下の行列について、行列式を計算し、逆行列が存在するかどうかを判定せよ。 \(\(C = \begin{pmatrix} 1 & 3 & 2 \\ -1 & 2 & 4 \\ 2 & 1 & 6 \end{pmatrix}\)\)
-
行列 \(D\) が以下のように基本変形によって行列 \(E\) に変換されたとき、\(\det(D)\) と \(\det(E)\) の関係を求めよ。
- 1行目と3行目を交換
- 2行目を5倍
- 1行目の2倍を3行目に加える
応用問題
-
以下の4×4行列 \(F\) が与えられたとき、\(\det(F)\) を基本変形を用いて効率的に計算せよ。 \(\(F = \begin{pmatrix} 1 & 0 & 2 & -1 \\ 3 & 4 & -2 & 0 \\ -2 & 1 & 3 & 5 \\ 4 & -3 & 0 & 2 \end{pmatrix}\)\)
-
行列のランクと行列式の関係について考える。\(n \times n\) 行列 \(A\) について、\(\text{rank}(A) = n-1\) のとき、\(A\) の余因子行列の行列式はどうなるか考察せよ。
-
健康データ分析において、複数の生理指標の関係性を調べるために主成分分析を行う前処理として、データの共分散行列 \(\Sigma\) が使用されることがある。この共分散行列が特異(\(\det(\Sigma) = 0\))である場合、どのような問題が生じるか、また、その対処法について説明せよ。次の共分散行列について考察せよ。 \(\(\Sigma = \begin{pmatrix} 10 & 5 & 15 \\ 5 & 4 & 9 \\ 15 & 9 & 24 \end{pmatrix}\)\)
7. よくある質問と解答
Q1: 基本変形はガウスの消去法と何が違うのですか?
A1: 基本変形は行列を変形するための基本的な操作のことであり、ガウスの消去法はこれらの基本変形を系統的に適用して連立一次方程式を解いたり、行列を三角行列や簡約階段形に変換したりする方法です。つまり、ガウスの消去法は基本変形を使用するアルゴリズムと考えることができます。
Q2: 行列式が0の行列は必ずランク落ちしているのですか?
A2: はい、\(n \times n\) 行列 \(A\) について \(\det(A) = 0\) であれば、必ず \(\text{rank}(A) < n\) となります。つまり、行列式が0であることは、その行列がランク落ちしていることの必要十分条件です。
Q3: 基本変形で行列式を計算する際に、注意すべき点はありますか?
A3: 以下のような点に注意する必要があります: - 行の交換は行列式の符号を反転させます - 行のスカラー倍は行列式をその定数倍します - 計算過程でピボットが0になった場合は、行の交換が必要になることがあります - 数値計算では丸め誤差に注意し、可能であれば分数や正確な計算を行うことが望ましいです
Q4: データサイエンスにおいて、行列式はどのような場面で使われますか?
A4: データサイエンスにおける行列式の活用例には以下のようなものがあります: - 多変量正規分布の確率密度関数の計算 - 主成分分析における共分散行列の非特異性の確認 - 線形変換における体積の変化率の測定 - 線形回帰モデルにおける多重共線性の検出 - クラスタリング手法での群の分散構造の評価
Q5: 基本変形を用いて行列式を計算する方法とLaplace展開による方法の違いは何ですか?
A5: 基本変形による方法は、行列を上三角形または下三角形に変換し、対角成分の積として行列式を計算します。一方、Laplace展開(余因子展開)は、行列のある行(または列)に沿って、その要素と余因子の積の和として行列式を計算します。計算量の観点では、基本変形による方法は一般的に \(O(n^3)\) の計算量ですが、Laplace展開は再帰的に適用すると \(O(n!)\) となり、大きな行列では非効率です。
8. 付録:行列式の計算の効率化テクニック
行列式の計算を効率化するためのいくつかのテクニックを紹介します:
-
疎行列の活用: 行列に多くの0要素がある場合、0を含む行や列に沿って展開すると計算が簡略化されます。
-
特別なパターンの認識:
- 三角行列(対角成分の積)
- 対角ブロック行列(ブロックの行列式の積)
-
行列の和と積の特殊な形
-
既知の行列式公式の活用: \(\(\det\begin{pmatrix} a & b \\ c & d \end{pmatrix} = ad - bc\)\)
\(\(\det\begin{pmatrix} a & b & c \\ d & e & f \\ g & h & i \end{pmatrix} = a(ei - fh) - b(di - fg) + c(dh - eg)\)\)
- 特殊な行列の性質の利用:
- 直交行列: \(\det(Q) = \pm 1\)
- 相似行列: \(\det(P^{-1}AP) = \det(A)\)
- 積の行列式: \(\det(AB) = \det(A) \cdot \det(B)\)
これらのテクニックを組み合わせることで、行列式の計算を大幅に効率化できることがあります。