고유값 분해(Eigen-Decomposition)
식 1과 같이 행렬 A가 가역행렬인 P과 대각행렬 D를 사용하여 유사변환이 가능하다면 그 행렬은 대각 가능(Diagonalizable)하다고 합니다. 즉, 식 2와 같이 행렬 A의 고유값과 고유행렬에 대한 유사변환(Similarity transformation)이 성립합니다. 예를 들어 2×2 정방행렬 A에 대해 고유값과 고유벡터들로 분해하는 다음과 같으며 고유값분해 (Eigenvalue Decomposition)라고 합니다.
\begin{align}\text{A}& =\text{PDP}^{-1}\\\tag{식 1}& P:\;\text{고유행렬}\\& D:\;\text{고유값으로 구성된 대각행렬}\end{align}
\begin{align} A=& \begin{bmatrix} a_{11}& a_{12}\\a_{21}& a_{22} \end{bmatrix}\\ \tag{식 2}\text{고유값}& =\begin{bmatrix} \lambda_1 & \lambda_2 \end{bmatrix}\\ \text{고유행렬}& =\begin{bmatrix} v_{11}& v_{12}\\v_{21}& v_{22} \end{bmatrix}\\ \begin{bmatrix} a_{11}& a_{12}\\a_{21}& a_{22} \end{bmatrix}&= \begin{bmatrix} v_{11}& v_{12}\\v_{21}& v_{22} \end{bmatrix}\begin{bmatrix} \lambda_1& 0\\0& \lambda_2 \end{bmatrix}\left(\begin{bmatrix} v_{11}& v_{12}\\v_{21}& v_{22} \end{bmatrix}\right)^{-1}\end{align}
예 1)
다음 행렬 A에 위 대각화를 적용하여 분해해봅니다.
$$A=\begin{bmatrix} 7&2\\-4&1 \end{bmatrix}$$
식 1의 유사변환이 성립하기 위해서는 행렬 A가 정방행렬이고 그 행렬의 고유행렬이 가역행렬일 경우 가능합니다. 행렬 A의 대각화 역시 이 조건을 만족하여야 합니다.
A=np.array([[7,2],[-4,1]]) print(A)
[[ 7 2] [-4 1]]
다음은 행렬 A의 고유값(d)와 고유행렬(P)입니다.
d, P=la.eig(A) la.det(P).round(3)
0.316
위 결과에 의하면 두 조건이 중촉됩니다. 즉, 행렬 A의 대각화가 가능합니다.
D=np.diag(d) print(D)
[[5. 0.] [0. 3.]]
그러므로 고유값분해가 가능합니다. A = PDP-1의 성립으로 확인할 수 있습니다.
np.allclose(A, P@D@la.inv(P))
True
고유값 분해의 조건
n×n 차원의 가역적 정방행렬 A 다음 조건들을 만족하면 대각화가 가능합니다.
- n개의 대응하는 서로 다른 고유값이 존재합니다.
- n개의 고유벡터를 가집니다.
- 고유값들은 대각행렬의 대각원소가 됩니다.
- 행렬 A의 급수(rank) = 열차원(n) = 열공간의 차원(n)
- 즉, A의 모든 벡터가 기저벡터
예 2)
다음 행렬 A의 대각화 즉, 고유값분해의 가능성을 결정합니다.
$$A=\begin{bmatrix}1& 3& 3\\-3& -5& -3\\3& 3& 1 \end{bmatrix}$$
A=np.array([[1,3,3],[-3,-5,-3],[3,3,1]]) d, P=la.eig(A) la.det(P).round(3)
-0.253
la.matrix_rank(A)
3
len(Matrix(A).columnspace())
3
행렬 A는3개의 열차원(벡터)이고 열공간의 차원 역시 3으로 같습니다. 즉, 행렬 A는 가역행렬(기저벡터로 구성)임을 의미하는 것으로 고유값분해가 가능함을 나타냅니다.
la.det(A).round(3)
4.0
Matrix(A).rref()
(Matrix([ [1, 0, 0], [0, 1, 0], [0, 0, 1]]), (0, 1, 2))
다음은 A는 고유값분해를 나타낸 것입니다.
D=np.diag(d) print(D)
[[ 1. 0. 0.] [ 0. -2. 0.] [ 0. 0. -2.]]
np.allclose(A, P@D@la.inv(P))
True
댓글
댓글 쓰기