2024.6.27 固有値分解【numpy】
正方行列$ Aについて、
$ A\mathbf{v} = \lambda \mathbf{v}
が成立するとき、
$ \lambdaを$ Aの固有値
$ \mathbf{v}を$ Aの固有ベクトル
という。
Aが非対称行列の場合
上式は、行列$ Vを用いた相似変換によって、行列$ Aを対角化できることを意味している。 $ V^{-1}AV=D
code:eig1.py
import numpy as np
from numpy.linalg import eig, inv
data1 = 1, 2, 3], 2, 1, 3, [3, 1, 2 # Aは非対称行列 A = np.array(data1)
d, V = eig(A)
print('固有値\n',d)
print('固有ベクトルを並べた行列\n',V)
print('inv(V) * A * V =\n', inv(V)@A@V)
print('D =\n', np.diag(d))
結果
code:result1.txt
固有値
固有ベクトルを並べた行列
inv(V) * A * V =
D =
Aが対称行列の場合
$ Aが対称行列の場合$ Vは直交行列となり、$ Vとその転置行列を用いて$ Aを対角化することができる。 $ V^\top A V = D
code:eig2.py
import numpy as np
from numpy.linalg import eig
data1 = 1, 2, 3], 2, 1, 3, [3, 3, 3 # Aは対称行列 A = np.array(data1)
d, V = eig(A)
print('固有値\n', d)
print('固有ベクトルを並べた行列\n',V)
print('V^T * A * V =\n', V.T @ A @V)
print('D=\n', np.diag(d))
print('V^T * V=\n', V.T @ V)
print('V * V^T=\n', V @ V.T)
結果
code:result2.txt
固有値
固有ベクトルを並べた行列
V^T@A@V =
D=
V^T * V=
V * V^T=