기본 콘텐츠로 건너뛰기

벡터와 행렬에 관련된 그림들

[Linear Algebra] 고유벡터(Eigenvector)와 고유값(Eigenvalue)

고유벡터(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. 표준 행렬과 두 벡터의 선형 결합.

그림 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]])])]

댓글

이 블로그의 인기 게시물

[Linear Algebra] 유사변환(Similarity transformation)

유사변환(Similarity transformation) n×n 차원의 정방 행렬 A, B 그리고 가역 행렬 P 사이에 식 1의 관계가 성립하면 행렬 A와 B는 유사행렬(similarity matrix)이 되며 행렬 A를 가역행렬 P와 B로 분해하는 것을 유사 변환(similarity transformation) 이라고 합니다. $$\tag{1} A = PBP^{-1} \Leftrightarrow P^{-1}AP = B $$ 식 2는 식 1의 양변에 B의 고유값을 고려한 것입니다. \begin{align}\tag{식 2} B - \lambda I &= P^{-1}AP – \lambda P^{-1}P\\ &= P^{-1}(AP – \lambda P)\\ &= P^{-1}(A - \lambda I)P \end{align} 식 2의 행렬식은 식 3과 같이 정리됩니다. \begin{align} &\begin{aligned}\textsf{det}(B - \lambda I ) & = \textsf{det}(P^{-1}(AP – \lambda P))\\ &= \textsf{det}(P^{-1}) \textsf{det}((A – \lambda I)) \textsf{det}(P)\\ &= \textsf{det}(P^{-1}) \textsf{det}(P) \textsf{det}((A – \lambda I))\\ &= \textsf{det}(A – \lambda I)\end{aligned}\\ &\begin{aligned}\because \; \textsf{det}(P^{-1}) \textsf{det}(P) &= \textsf{det}(P^{-1}P)\\ &= \textsf{det}(I)\end{aligned}\end{align} 유사행렬의 특성 유사행렬인 두 정방행렬 A와 B는 'A ~ B' 와 같...

[sympy] Sympy객체의 표현을 위한 함수들

Sympy객체의 표현을 위한 함수들 General simplify(x): 식 x(sympy 객체)를 간단히 정리 합니다. import numpy as np from sympy import * x=symbols("x") a=sin(x)**2+cos(x)**2 a $\sin^{2}{\left(x \right)} + \cos^{2}{\left(x \right)}$ simplify(a) 1 simplify(b) $\frac{x^{3} + x^{2} - x - 1}{x^{2} + 2 x + 1}$ simplify(b) x - 1 c=gamma(x)/gamma(x-2) c $\frac{\Gamma\left(x\right)}{\Gamma\left(x - 2\right)}$ simplify(c) $\displaystyle \left(x - 2\right) \left(x - 1\right)$ 위의 예들 중 객체 c의 감마함수(gamma(x))는 확률분포 등 여러 부분에서 사용되는 표현식으로 다음과 같이 정의 됩니다. 감마함수는 음이 아닌 정수를 제외한 모든 수에서 정의됩니다. 식 1과 같이 자연수에서 감마함수는 factorial(!), 부동소수(양의 실수)인 경우 적분을 적용하여 계산합니다. $$\tag{식 1}\Gamma(n) =\begin{cases}(n-1)!& n:\text{자연수}\\\int^\infty_0x^{n-1}e^{-x}\,dx& n:\text{부동소수}\end{cases}$$ x=symbols('x') gamma(x).subs(x,4) $\displaystyle 6$ factorial 계산은 math.factorial() 함수를 사용할 수 있습니다. import math math.factorial(3) 6 a=gamma(x).subs(x,4.5) a.evalf(3) 11.6 simpilfy() 함수의 알고리즘은 식에서 공통사항을 찾아 정리하...

sympy.solvers로 방정식해 구하기

sympy.solvers로 방정식해 구하기 대수 방정식을 해를 계산하기 위해 다음 함수를 사용합니다. sympy.solvers.solve(f, *symbols, **flags) f=0, 즉 동차방정식에 대해 지정한 변수의 해를 계산 f : 식 또는 함수 symbols: 식의 해를 계산하기 위한 변수, 변수가 하나인 경우는 생략가능(자동으로 인식) flags: 계산 또는 결과의 방식을 지정하기 위한 인수들 dict=True: {x:3, y:1}같이 사전형식, 기본값 = False set=True :{(x,3),(y,1)}같이 집합형식, 기본값 = False ratioal=True : 실수를 유리수로 반환, 기본값 = False positive=True: 해들 중에 양수만을 반환, 기본값 = False 예 $x^2=1$의 해를 결정합니다. solve() 함수에 적용하기 위해서는 다음과 같이 식의 한쪽이 0이 되는 형태인 동차식으로 구성되어야 합니다. $$x^2-1=0$$ import numpy as np from sympy import * x = symbols('x') solve(x**2-1, x) [-1, 1] 위 식은 계산 과정은 다음과 같습니다. $$\begin{aligned}x^2-1=0 \rightarrow (x+1)(x-1)=0 \\ x=1 \; \text{or}\; -1\end{aligned}$$ 예 $x^4=1$의 해를 결정합니다. solve() 함수의 인수 set=True를 지정하였으므로 결과는 집합(set)형으로 반환됩니다. eq=x**4-1 solve(eq, set=True) ([x], {(-1,), (-I,), (1,), (I,)}) 위의 경우 I는 복소수입니다.즉 위 결과의 과정은 다음과 같습니다. $$x^4-1=(x^2+1)(x+1)(x-1)=0 \rightarrow x=\pm \sqrt{-1}, \; \pm 1=\pm i,\; \pm1$$ 실수...