固有値分解の定義とPython実装
固有値分解
固有値と固有ベクトル
ある正方行列と零ベクトルではないベクトル、スカラーが下記の条件を満たすとき、はの固有ベクトル、はの固有値といいます。
固有値の求め方
定義を少し変形させてみます。(ただし、は単位行列とする)
は零ベクトルではないので、が非正則(逆行列を持たない)である必要があります。 つまり、行列の行列式を0にするを計算すれば固有値を求めることができます。
例題
よって
のとき、
のとき、
固有値分解
が成り立つ。
とすると、
となる。
このように正方行列を固有値、固有ベクトルの行列に分解することを固有値分解といいます。
Pythonでの実装
Pythonで固有値、固有ベクトルを求めたいときはnp.linalg.eigを使えば簡単に計算できます。
import numpy as np A = np.array([[5, -2], [9, -6]]) eigen_val, eigen_vec = np.linalg.eig(A) print("行列Aの固有値") print(eigen_val) print("") print("行列Aの固有ベクトル") print(eigen_vec) print("") print("PΛP^-1の計算結果") P = eigen_vec Lambda = np.diag(eigen_val) print(np.dot(np.dot(P, Lambda), np.linalg.inv(P)))
実行結果はこちらのとおり
行列Aの固有値 [ 3. -4.] 行列Aの固有ベクトル [[0.70710678 0.21693046] [0.70710678 0.97618706]] PΛP^-1の計算結果 [[ 5. -2.] [ 9. -6.]]
ちゃんと手計算で求めた結果と同じになってます。