고유벡터(Eigenvector)와 고유값(Eigenvalue)
고유 벡터(eigenvector)는 정방 행렬의 선형 변환이 일어난 후에도 방향이 변하지 않는 영벡터(zero vector)가 아닌 벡터들을 의미합니다. 즉, n차원 공간에서 임의의 벡터를 표현할 수 있는 기준이 되는 벡터인 기저(basis) 벡터를 의미합니다. 그러므로 행렬 A의 고유벡터 v 사이에는 식 1의 관계가 성립합니다.
Av | = λv | (식 1) |
(A − λ)v | = 0 | |
조건) λ | ≠ 0 |
식 1에서 A는 가역행렬이고 λ는 스칼라로서 고유값(eigenvalue)이라고 합니다.
예 1)
행렬 A와 두 벡터 u, v의 관계를 조사해 봅니다.
$$A=\begin{bmatrix}3&-2\\1&0\end{bmatrix}, \quad u=\begin{bmatrix}-1\\1\end{bmatrix}, \quad v=\begin{bmatrix}2\\1\end{bmatrix}$$
행렬 A와 미지의 벡터 x와 선형결합한 결과 벡터가 각각 u, v일 경우 선형독립인지를 결정합니다. 선형독립일 경우 A는 기저행렬이 됩니다.
A=np.array([[3,-2],[1,0]]) u=np.array([-1,1]) v=np.array([2,1]) Au=np.c_[A, u] print(Au)
[[ 3 -2 -1] [ 1 0 1]]
Matrix(Au).rref()
(Matrix([ [1, 0, 1], [0, 1, 2]]), (0, 1))
Av=np.c_[A, v] print(Av)
[[ 3 -2 2] [ 1 0 1]]
Matrix(Av).rref()
(Matrix([ [1, 0, 1], [0, 1, 1/2]]), (0, 1))
행렬 A와 벡터 u, v를 결합한 확대행렬 Au, Av의 기약행 사다리꼴 형태 (rref)을 검사한 결과는 A의 모든 열이 피봇열이므로 행렬 A의 급수(Rank)가 2임을 나타냅니다. 이 행렬의 급수는 numpy.linalg.matrix_rank()
함수를 사용하여 확인할 수 있습니다.
la.matrix_rank(A)
2
위 두 선형결합 모두 독립이므로 고유한 해벡터를 가집니다.
u_sol=la.solve(A, u) print(u_sol)
[1. 2.]
v_sol=la.solve(A,v) print(v_sol)
[1. 0.5]
v_sol의 경우 벡터 v와 배수관계가 성립합니다. 즉, A와 v의 내적은 해와 배수 관계이므로 같은 방향을 나타냅니다. 그림 1은 A와 벡터 u, v의 내적에 관계된 객체들을 시각화 한것입니다.
print(A@u)
[-5 -1]
print(A@v)
[4 2]
그림 1에서 v와 Av는 비례관계이며 같은 방향을 가집니다. 그러므로 식 2와 같이 고유벡터와 고유값의 관계가 성립합니다.
Av | = 2v | (식 2) |
(A − 2I)·v | = 0, I: 항등행렬 |
식 2는 고유값 λ, 고유벡터 v로 표시하여 식 3와 같이 일반화 할 수 있습니다.
(A − λI)·v | = 0, I: 항등행렬 | (식 3) |
식 3은 (A - λI)와 고유벡터(v)와의 동차 선형결합 시스템이 되며 이 시스템의 표준행렬 즉 (A - λI)의 행렬식을 특성 방정식(characteristic equation)이라고 합니다(식 4).
특성방정식 = det(A - λI) | (식 4) |
예 2)
행렬 A의 고유값을 계산해 봅니다.
$$A=\begin{bmatrix}3& 4\\3& -1 \end{bmatrix}$$
행렬 A의 고유값을 a, 고유 벡터를 v라고 하면 식 3을 만족하여야 합니다. 즉, 식 5와 같이 선형결합이 성립해야 합니다.
$$\left(\begin{bmatrix}3& 4\\3& -1\end{bmatrix}-a\begin{bmatrix}1& 0\\0 & 1\end{bmatrix}\right)\begin{bmatrix}v_1 \\ v_2\end{bmatrix}=0$$ | (식 5) |
고유벡터의 경우 동일한 방향을 가지는 다양한 벡터로 표현될 수 있으므로 고유값과 고유벡터는 유일한 값이 아닙니다. 즉, 식 5의 동차선형결합은 자명하지 않은 해를 가집니다. 이것은 이 식의 표준행렬의 역행렬이 존재하지 않음을 의미하므로 그 행렬의 행렬식은 0이 됩니다. det = 0 으로 부터 고유값 a를 결정할 수 있습니다.
미지수 a를 결정하기 위해 sympy 라이브러리의 symbols()를 비롯한 여러 함수들을 적용합니다.
a=symbols('a') A=Matrix([[3, 4],[3, -1]]) print(np.array(A))
[[3 4] [3 -1]]
I2=eye(2) print(np.array(I2))
[[1 0] [0 1]]
# 특성식(=charEq) charEq=A-a*I2 print(charEq)
Matrix([[3 - a, 4], [3, -a - 1]])
# 특성식의 행렬식 charEq_det=factor(det(charEq)) charEq_det
(a - 5)(a + 3)
#행렬식의 해 solve(charEq_det)
[-3, 5]
특성방정식을 계산하는 과정에서 항등행렬을 생성하기 위해 sympy.eye()를 사용하였으며 미지수의 해는 sympy.solve() 함수를 사용하여 결정하였습니다.
결과로 고유값은 -3, 5입니다. 이 값을 기준으로 고유벡터는 다음의 선형결합의 해(solution) 벡터가 됩니다(식 6).
\begin{align}\begin{bmatrix}3& 4\\3& -1\end{bmatrix}\begin{bmatrix}v_{11}\\v_{21}\end{bmatrix}&=-3\begin{bmatrix}v_{11}\\v_{21}\end{bmatrix}\\ &\Rightarrow\left(\begin{bmatrix}3& 4\\3& -1\end{bmatrix}+3\begin{bmatrix}1& 0\\0 & 1\end{bmatrix}\right)\begin{bmatrix}v_{11}\\v_{21}\end{bmatrix}\\ &\Rightarrow\begin{bmatrix}6&4\\3&2\end{bmatrix}\begin{bmatrix}v_{11}\\v_{21}\end{bmatrix}=\begin{bmatrix}0\\0\end{bmatrix}\\ \begin{bmatrix}3& 4\\3& -1\end{bmatrix}\begin{bmatrix}v_{12}\\v_{22}\end{bmatrix}&=5\begin{bmatrix}v_{12}\\v_{22}\end{bmatrix}\\ &\Rightarrow\left(\begin{bmatrix}3& 4\\3& -1\end{bmatrix}-5\begin{bmatrix}1& 0\\0 & 1\end{bmatrix}\right)\begin{bmatrix}v_{12}\\v_{22}\end{bmatrix}\\ &\Rightarrow\begin{bmatrix}-2&4\\3&-6\end{bmatrix}\begin{bmatrix}v_{12}\\v_{22}\end{bmatrix}=\begin{bmatrix}0\\0\end{bmatrix}\end{align} | (식 6) |
고유벡터는 기저벡터입니다. 특성방정식은 가역행렬이므로 식 6의 각 선형결합은 자명하지 않은 해를 가집니다. 그러므로 고유벡터는 다양한 해 벡터들에서 기저벡터(들)을 의미합니다. 다시 말하면 해벡터들의 영공간(nullspace)이 고유벡터가 됩니다.
aug1=(A+3*I2).row_join(c) aug1.rref() c=Matrix([0,0]) aug1=(A+3*I2).
(Matrix([ [1, 2/3, 0], [0, 0, 0]]), (0,))
aug2=(A-5*I2).row_join(c) aug2.rref()
(Matrix([ [1, -2, 0], [0, 0, 0]]), (0,))
위 각 시스템의 영공간은 다음과 같습니다. 영공간을 계산하기 위해 nullspace() 함수를 적용하였습니다.
(A+3*I2).nullspace()
[Matrix([ [-2/3], [ 1]])]
(A-5*I2).nullspace()
[Matrix([ [2], [1]])]
위 결과를 정리하면 식 7과 같습니다.
\begin{align}\text{고유값}&=\{-3,\; 5\}\\\text{고유벡터}&=\left\{\begin{bmatrix} -\frac{2}{3}\\1.0\end{bmatrix},\; \begin{bmatrix}20\\1.0 \end{bmatrix}\right\} \end{align} | (식 7) |
고유벡터와 고유공간
- n × n 차원의 정방행렬 A, 고유값(λ), 그리고 고유벡터(v)과 사이에 선형결합이 성립합니다(λ ≠ 0).
- 특성식 A - λI은 비가역행렬로 행렬식은 0입니다.
- 고유값에 대응하는 고유벡터는 특성식의 영공간(null space)입니다.
- 그 영공간(null spaces)은 ℝn의 부분공간이며 λ에 대응하는 고유벡터로서 고유공간(eigen-space)이라고 합니다.
행렬 A의 고유값과 고유벡터들은 numpy.linalg.eig(x) 함수를 사용하여 확인할 수 있습니다. 이 함수의 인수 객체는 numpy 배열형이어야 하므로 np.array(객체, dtype=float) 함수를 사용하여 자료형을 변환해야 합니다. 또한 sympy의 eigenvals()
와 eigenvects()
메소드를 적용할 수 있습니다.
print(np.array(A, dtype=float))
[[ 3. 4.] [ 3. -1.]]
eigVal, eigVec=la.eig(np.array(A, dtype=float)) print(eigVal)
[ 5. -3.]
print(eigVec)
[[ 0.89442719 -0.5547002 ] [ 0.4472136 0.83205029]]
eig()
에 의한 고유 벡터들은 위에서 계산한 값과 차이를 보입니다. 그러나 두 결과의 차이는 서로 스칼라 배의 관계를 가지며 동일한 방향을 보입니다. 즉, 고유값 5에 대응하는 벡터 <0.89442719, 0.4472136>는 <2, 1>의 비례관계를 보입니다. 결과적으로 고유벡터는 동일한 방향을 보이는 것이므로 이 둘은 같은 결론을 이끌어 냅니다. 이에 반해 sympy의 eigvals(), eigvects()
메소드에 대한 결과는 보다 직관적으로 나타냅니다.
A.eigenvals()
{5: 1, -3: 1}
A.eigenvects()
[(-3, 1, [Matrix([ [-2/3], [ 1]])]), (5, 1, [Matrix([ [2], [1]])])]
댓글
댓글 쓰기