고유벡터(Eigenvector)와 고유값(Eigenvalue) 연습
관련된 내용
예 1)
행렬 A의 특성 방정식과 고유값을 계산해봅니다.
$$ \left[\begin{matrix}1 & 3 & -1.5\\9 & - \frac{27}{2} & 4.5\\7 & - \frac{39}{2} & \frac{15}{2}\end{matrix}\right]$$
행렬 A의 고유값 r을 가정하여 표현한 특성방정식(det(A − λI))은 다음과 같습니다.
다음 코드의 sympy.rational() 함수를 분수를 표시하기 위해 적용한 것입니다.
r=symbols('r', real=True) A=Matrix([[1, 3, -1.5],[9, -Rational("27/2"), 4.5],[7, -Rational("39/2"), Rational("15/2")]]) cheqM=A-r*eye(3) cheqM
$\left[\begin{matrix}1 - r & 3 & -1.5\\9 & - r - \frac{27}{2} & 4.5\\7 & - \frac{39}{2} & \frac{15}{2} - r\end{matrix}\right]$
cheq=det(cheqM)#특성방정식 expand(cheq)
-r3 - 5r2 +36.0r
sol=solve(cheq, r) [sp.N(i, 3) for i in sol]
[-9.00, 0, 4.00]
numpy.linalg.eigvals()
함수를 사용하여 고유값을 확인해 봅니다.
eigVal=la.eigvals(np.array(A, dtype=float)) print(np.around(eigVal, 3))
[-9. 4. -0.]
예 2)
행렬 A에 대해 벡터 v가 고유 벡터인지를 결정해 봅니다.
$$A=\begin{bmatrix}1.5& 9\\1.0& -3.0\end{bmatrix},\quad v=\begin{bmatrix}-6\\ -1\end{bmatrix}$$
v가 A의 고유 벡터라면 식 1에 의해 고유값을 결정할 수 있습니다. 먼저 고유값을 결정하면 다음과 같습니다.
\begin{align}Av & = λv\\(A − λ)v &= 0\\\text{조건)}&\; λ ≠ 0\end{align} | (식 1) |
l=symbols('lamda') A=Matrix([[1.5, 9],[1,-3]]) v=Matrix([[-6],[-1]]) cheM=A-l*eye(2) cheM
$\left[\begin{matrix}1.5 - \lambda & 9\\1 & - \lambda - 3\end{matrix}\right]$
eig_val=solve(det(cheM), l) print(np.array(eig_val, dtype=float).round(3))
[-4.5 3. ]
벡터 v에 대응하는 고유값을 결정하기 위해서는 Av = λv를 적용합니다.
print(A*v ==eig_val[0]* v) print(A*v ==eig_val[1]* v)
False True
벡터 v에 대응하는 고유값은 3입니다. np.linalg.eig()
함수를 적용하여 고유값과 고유벡터를 확인해 봅니다.
eig_val, eig_vec=la.eig(np.array(A, dtype=float)) print(eig_val)
[ 3. -4.5]
print(eig_vec.round(3))
[[ 0.986 -0.832] [ 0.164 0.555]]
위 결과는 고유값 3에 대응하는 고유벡터는 벡터 v와는 다른 값입니다. 그러나 이 둘은 스칼라배의 관계를 가집니다.
v=np.array(v, dtype=float) x=v[0]/eig_vec[0,0] x
array([-6.08276253])
np.allclose(v, x*eig_vec[:,0].reshape(-1,1))
True
예 3)
행렬 A에 대해 고유 벡터는 v인지를 결정합니다.
$$A=\begin{bmatrix}1& 6\\ 4& 2\end{bmatrix},\quad v=\begin{bmatrix}0\\0\end{bmatrix}$$
정의상 0벡터는 고유벡터가 될 수 없습니다.
예 4)
예 3의 행렬 A의 고유값이 7인 경우 고유벡터를 결정해 봅니다.
이 문제는 식 2와 같이 행렬 A와 고유값 7 사이의 특성 방정식 A - 7·I에 대한 선형결합이 성립하는지의 여부를 결정하는 것입니다.
\begin{align}A=\begin{bmatrix}1& 6\\ 4& 2\end{bmatrix}& \Rightarrow \begin{bmatrix}1& 6\\ 4& 2\end{bmatrix}\begin{bmatrix}x_1\\x_2\end{bmatrix}=7\begin{bmatrix}x_1\\x_2\end{bmatrix} \\ &\Rightarrow \left(\begin{bmatrix}1& 6\\ 4& 2\end{bmatrix}-7\begin{bmatrix}1& 0\\0 & 1\end{bmatrix} \right)\begin{bmatrix}x_1\\x_2\end{bmatrix}=\begin{bmatrix}0\\0\end{bmatrix}\\ &\Rightarrow \begin{bmatrix}-6& 6\\5 & -5\end{bmatrix}\begin{bmatrix}x_1\\x_2\end{bmatrix}=\begin{bmatrix}0\\0\end{bmatrix}\end{align} | (식 2) |
A=np.array([[1,6],[5,2]]) i7=7*np.eye(2) c=np.zeros([2,1]) Ai7=A-i7 print(Ai7)
[[-6. 6.] [ 5. -5.]]
Matrix(np.hstack([Ai7, c])).rref()
(Matrix([ [1, -1.0, 0], [0, 0, 0]]), (0,))
특성방정식의 기약행 사다리꼴 형태 (rref)는 한 개의 피벗 열과 한 개의 자유 변수로 구성되며 자유변수에 의해 다양한 해를 가집니다. 다양한 해들의 영공간이 고유값 7에 대응하는 고유벡터가 됩니다.
Matrix(Ai7).nullspace()
[Matrix([ [1.0], [ 1]])]
numpy.linalg.eig()
함수를 사용하여 고유 벡터를 계산해보면 다음과 같습니다.
eigVal, eigVec=la.eig(A) eigVal
array([-4., 7.])
print(eigVec.round(3))
[[-0.768 -0.707] [ 0.64 -0.707]]
식 1의 성립여부를 확인합니다.
np.isclose(A@eigVec[:,1], eigVal[1]*eigVec[:,1])
array([ True, True])
예 5)
행렬 A에 대해 고유값 2에서의 고유공간을 결정하고 A와 벡터 c와의 선형결합이 독립 또는 종속임을을 결정합니다.
$$A=\begin{bmatrix}4& -1& 6\\2& 1& 6\\2& -1& 8\end{bmatrix},\quad c=\begin{bmatrix}0\\0\\0\end{bmatrix}$$
다음은 행렬 A에 대한 고유값과 고유벡터입니다. 이 결과에 의하면 고유값 2에 대응하는 고유 벡터는 2개입니다.
A=np.array([[4,-1,6], [2,1,6], [2,-1,8]]) print(A)
[[ 4 -1 6] [ 2 1 6] [ 2 -1 8]]
eigVal, eigVec=la.eig(A) print(np.around(eigVal, 3))
[9. 2. 2.]
print(eigVec.round(3))
[[-0.577 -0.633 0.133] [-0.577 -0.77 -0.969] [-0.577 0.083 -0.206]]
고유벡터는 원시행렬의 기저벡터로 구성됩니다. 그러므로 고유공간의 열벡터 수와 원시행렬의 급수는 같습니다.
la.matrix_rank(A)
3
위 결과는 행렬 A가 기저행렬임을 나타내는 것으로서 Ax = c가 선형독립임을 의미합니다. 이것은 A와 c의 확대행렬에 대한 rref로서 확인할 수 있습니다.
c=np.array([0,0,0]) Ac=np.c_[A, c] print(Ac)
[[ 4 -1 6 0] [ 2 1 6 0] [ 2 -1 8 0]]
Matrix(Ac).rref()
(Matrix([ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0]]), (0, 1, 2))
예 6)
행렬 A의 고유값들은 [-2, 2, 3]입니다. 이 값들에 대응하는 각 고유벡터를 결정하고 A가 기저행렬임을 결정합니다.
$$A=\begin{bmatrix}-6&-2& 6\\-8&-1&7\\-8& -4& 10\end{bmatrix}$$
A=np.array([[-6,-2, 6], [-8,-1,7], [-8, -4, 10]]) print(A)
[[-6 -2 6] [-8 -1 7] [-8 -4 10]]
eigVal, eigVec=la.eig(A) print(eigVal)
[-2. 2. 3.]
print(np.around(eigVec, 3))
[[-0.577 0.333 0.371] [-0.577 0.667 0.557] [-0.577 0.667 0.743]]
위 고유행렬의 3개의 열벡터로 구성됩니다. 즉, 행렬 A는 기저행렬임을 의미합니다.
la.matrix_rank(A)
3
고유벡터
- 고유 공간을 구성하는 고유 벡터들은 모두 기저 벡터들 입니다.
- 고유벡터의 수는 원시행렬의 급수를 나타냅니다.
- 그 고유 벡터들(v1, v2, …, vr)에 의한 선형결합은 선형독립입니다.
예 7)
다음 행렬의 고유값과 고유벡터를 결정해 봅니다.
$$A=\begin{bmatrix}3&6&-8\\0&0&6\\0&0&2\end{bmatrix}$$
A=np.array([[3,6,-8],[0,0,6],[0,0,2]]) print(A)
[[ 3 6 -8] [ 0 0 6] [ 0 0 2]]
la.matrix_rank(A)
2
행렬 A의 급수는 2이므로 1개의 자유변수가 존재합니다. 그러므로 존재하는 고유벡터들 중 기저는 2개가 됩니다. 이 기저벡터에 대응하는 행렬 A의 벡터는 열공간(columnsapce)으로 나타낼 수 있습니다.
eigVal, eigVec=la.eig(A) print(eigVal)
[3., 0., 2.]
print(np.around(eigVec, 3))
[[ 1. -0.894 -0.953] [ 0. 0.447 0.286] [ 0. 0. 0.095]]
print(Matrix(A).columnspace())
[Matrix([ [3], [0], [0]]), Matrix([ [-8], [ 6], [ 2]])]
위 결과는 고유값 3개에 대한 고유벡터 역시 3개이지만 열공간에 의하면 기저 벡터는 2개 입니다. 이러한 차이는 고유값 0인 경우에서 발생합니다. 즉, 고유값 또는 고유벡터는 0 또는 0벡터가 아닙니다.
식 3과 같이 고유값이 0인 경우 A의 선형결합은 선형 독립 또는 선형 종속의 모든 가능성을 가집니다. 위 결합이 선형종속이면 고유값과 고유벡터가 가역행렬로부터 계산된다는 정의에 위배 됩니다. 또한 선형독립이면 그 행렬에 관계된 특성방정식이 존재하지 않습니다. 그러므로 고유벡터 역시 존재할 수 없습니다.
A·x = 0x → A·x = 0 | (식 3) |
다음과 같이 정리됩니다.
고유값의 수
- 원시행렬의 열공간의 수
- = 원시행렬의 급수(rank)
- = 0이 아닌 고유값의 수
댓글
댓글 쓰기