matrix.py 技術ドキュメント

プログラムの動作

matrix.py は、Pythonの数値計算ライブラリである numpyscipy を用いて、様々な行列およびベクトル演算の基本的なデモンストレーションを行うプログラムです。 プログラム内部で定義された固定の行列 (A, B, S) とベクトル (V1, V2) に対して、以下の演算を実行し、その結果を標準出力に表示します。

  • ベクトルの内積と外積

  • 行列の逆行列

  • 行列式

  • 行列の固有値問題(固有値と固有ベクトルの計算)

  • 連立一次方程式 \(A \mathbf{X} = \mathbf{B}\) の解法

  • LU分解 (\(A = PLU\))

  • コレスキー分解 (\(S = LL^T\))

  • QR分解 (\(A = QR\))

このプログラムは、これらの線形代数演算が numpyscipy でどのように実現されるかを示すことを主な目的としています。

原理

matrix.py で実行される各演算の数学的な原理は以下の通りです。

内積 (Inner Product)

二つのベクトル \(\mathbf{v_1}\)\(\mathbf{v_2}\) の内積は、それぞれの要素の積の和で定義されます。3次元ベクトルの場合、\(\mathbf{v_1} = (v_{1x}, v_{1y}, v_{1z})\)\(\mathbf{v_2} = (v_{2x}, v_{2y}, v_{2z})\) とすると、内積は以下のように計算されます。

\[\mathbf{v_1} \cdot \mathbf{v_2} = v_{1x}v_{2x} + v_{1y}v_{2y} + v_{1z}v_{2z}\]

また、内積は幾何学的には二つのベクトルのなす角 \(\theta\) を用いて \(||\mathbf{v_1}|| \cdot ||\mathbf{v_2}|| \cos \theta\) とも表されます。

外積 (Outer Product)

二つの3次元ベクトル \(\mathbf{v_1}\)\(\mathbf{v_2}\) の外積は、両方のベクトルに直交する新しいベクトルを生成します。\(\mathbf{v_1} = (v_{1x}, v_{1y}, v_{1z})\)\(\mathbf{v_2} = (v_{2x}, v_{2y}, v_{2z})\) とすると、外積 \(\mathbf{v_3} = \mathbf{v_1} \times \mathbf{v_2}\) の成分は以下のようになります。

\[\mathbf{v_3} = (v_{1y}v_{2z} - v_{1z}v_{2y}, v_{1z}v_{2x} - v_{1x}v_{2z}, v_{1x}v_{2y} - v_{1y}v_{2x})\]

逆行列 (Inverse Matrix)

正方行列 \(A\) の逆行列 \(A^{-1}\) は、以下の条件を満たす行列です。

\[A A^{-1} = A^{-1} A = I\]

ここで \(I\) は単位行列です。逆行列は、連立一次方程式の解法などに応用されます。

行列式 (Determinant)

正方行列 \(A\) の行列式 \(det(A)\) は、行列が線形変換によって空間をどれだけ拡大・縮小するかを示すスカラー値です。2x2行列 \(A = \begin{pmatrix} a & b \\ c & d \end{pmatrix}\) の場合、行列式は以下の式で計算されます。

\[det(A) = ad - bc\]

行列式がゼロでない場合、その行列には逆行列が存在します。

固有値問題 (Eigenvalue Problem)

正方行列 \(A\) に対する固有値問題は、以下の式を満たすスカラー \(\lambda\)(固有値)と非ゼロベクトル \(\mathbf{v}\)(固有ベクトル)を求める問題です。

\[A \mathbf{v} = \lambda \mathbf{v}\]

固有値と固有ベクトルは、物理学、工学、データ分析など多くの分野でシステムの安定性や主要な方向性を理解するために利用されます。

連立一次方程式の解法 (Solving Simultaneous Linear Equations)

\(n\) 個の未知数を持つ \(n\) 個の線形方程式からなる連立一次方程式は、行列形式で \(A \mathbf{x} = \mathbf{b}\) と書けます。ここで \(A\) は係数行列、\(\mathbf{x}\) は未知数ベクトル、\(\mathbf{b}\) は定数ベクトルです。このプログラムでは、\(\mathbf{x}\) を効率的に解くための numpy.linalg.solve が使用されます。

LU分解 (LU Decomposition)

LU分解は、正方行列 \(A\) を下三角行列 \(L\) と上三角行列 \(U\)、そして置換行列 \(P\) の積に分解する手法です。

\[A = P L U\]
  • \(P\): 行の入れ替えを表す置換行列

  • \(L\): 対角成分が1の下三角行列

  • \(U\): 上三角行列

この分解は、大規模な連立一次方程式を効率的に解く際や、行列式の計算に利用されます。

コレスキー分解 (Cholesky Decomposition)

コレスキー分解は、正定値対称行列 \(S\) を下三角行列 \(L\) とその転置行列 \(L^T\) の積に分解する手法です。

\[S = L L^T\]
  • \(S\): 正定値対称行列

  • \(L\): 下三角行列

この分解は、モンテカルロシミュレーション、最適化問題、線形回帰など、様々な数値計算で利用されます。

QR分解 (QR Decomposition)

QR分解は、任意の行列 \(A\) を直交行列 \(Q\) と上三角行列 \(R\) の積に分解する手法です。

\[A = Q R\]
  • \(Q\): 直交行列(\(Q^T Q = I\) を満たす)

  • \(R\): 上三角行列

QR分解は、最小二乗法、固有値問題の解法、連立一次方程式の数値的安定な解法など、広範囲な応用があります。

必要な非標準ライブラリとインストール方法

本プログラムは以下の非標準Pythonライブラリを使用します。

  • numpy: 高性能な数値計算を可能にする基本的なパッケージです。多次元配列オブジェクトや、これらを操作するためのツールを提供します。

  • scipy: 科学技術計算のためのオープンソースライブラリで、統計、最適化、線形代数、フーリエ変換など、多岐にわたる機能を numpy の上に構築しています。

これらのライブラリは pip コマンドでインストールできます。

pip install numpy scipy

必要な入力ファイル

本プログラムは、外部からの入力ファイルを必要としません。 すべてのデータ(行列 A, B, S およびベクトル V1, V2)は、プログラムのソースコード内に直接定義されています。

生成される出力ファイル

本プログラムは、いかなるファイルも生成しません。 すべての計算結果は、プログラムの実行中に標準出力(コンソール)に表示されます。

コマンドラインでの使用例 (Usage)

matrix.py はコマンドライン引数を取らずに実行できます。

python matrix.py

コマンドラインでの具体的な使用例

以下のコマンドを実行することで、プログラムを実行できます。

python matrix.py

実行すると、まずプログラム内部で定義されている初期の行列 A, B, S とベクトル V1, V2 の内容が表示されます。 その後、ベクトルの内積、外積、行列の逆行列、行列式、固有値と固有ベクトル、連立一次方程式の解、LU分解の結果(\(P, L, U\) 行列とその積 \(P@L@U\) の確認)、コレスキー分解の結果(\(L\) 行列とその積 \(L@L.T\) の確認)、およびQR分解の結果(\(Q, R\) 行列とその積 \(Q@R\) の確認)が順に標準出力に表示されます。

出力例の一部抜粋:

A:
 [[2 5]
 [1 3]]
B:
 [[-1]
 [ 1]]
S:
 [[ 2. -1.]
 [-1.  5.]]
V1:
 [1 1 2]
V2:
 [2 1 3]

Inner product
np.inner V1 dot V2 = 9
np.dot V1 dot V2 = 9

Outer product (DO NOT use np.outer()
np.cross V1 x V2:
[ 1  1 -1]

np.inv A^-1:
[[ 3. -5.]
 [-1.  2.]]
A*A.i:
[[1. 0.]
 [0. 1.]]

determinant for A = 1.0000000000000002

...