[Linear algebra] 3.3 eigenvalue decomposition (1)

JKH·5일 전
0

선형대수

목록 보기
7/10

데이터 사이언스 스쿨 에서 공부한 내용입니다.

3.3 eigenvalue decomposition

고윳값과 고유벡터

Av=λv(3.3.1)Av = \lambda v \tag{3.3.1}
Avλv=(AλI)v=0(3.3.2)Av - \lambda v = (A - \lambda I) v = 0 \tag{3.3.2}

정방 행렬 AA에 대해 영벡터가 아닌 벡터 vv, 실수 λ\lambda를 찾을 수 있다고 가정하자.
실수 λ\lambda고윳값(eigenvalue),
벡터 vv고유벡터(eigenvector),
고윳값과 고유벡터를 찾는 작업을 고윳값 분해(eigenvalue decomposition) 라고 한다.

✒️
어떤 벡터는 선형 변환 시스템을 거쳐도 벡터의 방향이 변하지 않고 크기만 고윳값 만큼 곱해진다.
그 벡터를 고유벡터이고, 곱해진 크기 값은 고윳값이 된다.

예제

행렬 AA

A=[1223](3.3.3)A= \begin{bmatrix} 1 & -2 \\ 2 & -3 \end{bmatrix} \tag{3.3.3}

에 대해 다음 스칼라 값과 벡터는 각각 고윳값, 고유벡터가 된다.

λ=1(3.3.4)\lambda = -1 \tag{3.3.4}
v=[11](3.3.5)v= \begin{bmatrix} 1 \\ 1 \end{bmatrix} \tag{3.3.5}
Av=[1223][11]=[11]=(1)[11]=λv(3.3.6)Av = \begin{bmatrix} 1 & -2 \\ 2 & -3 \end{bmatrix} \begin{bmatrix} 1 \\ 1 \end{bmatrix} = \begin{bmatrix} -1 \\ -1 \end{bmatrix} = (-1) \begin{bmatrix} 1 \\ 1 \end{bmatrix} = \lambda v \tag{3.3.6}

어떤 벡터 vv가 고유벡터가 되면 이 벡터에 실수를 곱한 벡터 cvcv,즉 vv와 방향이 같은 벡터는 모두 고유벡터가 된다. 그래서 보통 고유벡터를 표시할 때는 길이가 1인 단위벡터가 되도록 다음처럼 정규화(normalization)를 한다.

vv(3.3.8)\dfrac{v}{\|v\|} \tag{3.3.8}

따라서 위 행렬 AA의 고유값-고유벡터를 정규화하면

λ=1(3.3.9)\lambda = -1 \tag{3.3.9}
v=[2222][0.70710.7071](3.3.10)v = \begin{bmatrix} \dfrac{\sqrt{2}}{2} \\ \dfrac{\sqrt{2}}{2} \end{bmatrix} \approx \begin{bmatrix} 0.7071 \\ 0.7071 \end{bmatrix} \tag{3.3.10}

연습 문제 3.3.1

다음 행렬 BB

B=[2321](3.3.11)B = \begin{bmatrix} 2 & 3 \\ 2 & 1 \end{bmatrix} \tag{3.3.11}

다음과 같은 두 가지 고윳값-고유벡터를 가짐을 증명하라.

λ1=4,    v1=[32](3.3.12)\lambda_1 = 4, \;\; v_1 = \begin{bmatrix} 3 \\ 2 \end{bmatrix} \tag{3.3.12}
λ2=1,    v2=[11](3.3.13)\lambda_2 = -1, \;\; v_2 = \begin{bmatrix} -1 \\ 1 \end{bmatrix} \tag{3.3.13}

또는

λ1=4,    v1=[313213][0.83210.5547](3.3.14)\lambda_1 = 4, \;\; v_1 = \begin{bmatrix} \dfrac{3}{\sqrt{13}} \\ \dfrac{2}{\sqrt{13}} \end{bmatrix} \approx \begin{bmatrix} 0.8321 \\ 0.5547 \end{bmatrix} \tag{3.3.14}
λ2=1,    v2=[1212][0.70710.7071](3.3.15)\lambda_2 = -1, \;\; v_2 = \begin{bmatrix} -\dfrac{1}{\sqrt{2}} \\ \dfrac{1}{\sqrt{2}} \end{bmatrix} \approx \begin{bmatrix} -0.7071 \\ 0.7071 \end{bmatrix} \tag{3.3.15}

✒️

import numpy as np
B = np.array([2,3,2,1]).reshape(2,2)
v1 = np.array([3,2]).reshape(2,1)
l1 = 4
v2 = np.array([-1,1]).reshape(2,1)
l2 = -1
v3 = np.array([3/13**0.5,2/13**0.5]).reshape(2,1)
l3 = 4
v4 = np.array([-1/13**0.5,1/13**0.5]).reshape(2,1)
l4 = -1
print(B @ v1, '\n',l1 * v1, end='\n\n')
print(B @ v2, '\n',l2 * v2, end='\n\n')
print(B @ v3, '\n',l3 * v3, end='\n\n')
print(B @ v4, '\n',l4 * v4, end='\n\n')
[[12] [ 8]] 
[[12] [ 8]]

[[ 1] [-1]] 
[[ 1] [-1]] 

[[3.32820118] [2.21880078]] 
[[3.32820118][2.21880078]] 

[[ 0.2773501] [-0.2773501]] 
[[ 0.2773501] [-0.2773501]]

특성방정식

행렬 AA의 고유값은 AλIA - \lambda I의 행렬식이 0이 되도록 하는 특성방정식(characteristic equation) 의 해를 구하면 된다.

det(AλI)=0(3.3.16)\det \left( A - \lambda I \right) = 0 \tag{3.3.16}

이 조건은 행렬 AλIA - \lambda I가 역행렬이 존재하지 않는다는 뜻이다. 만약 AλIA - \lambda I의 역행렬이 존재한다면 고윳값 조건을 만족하는 벡터가 항상 영벡터가 되기 때문이다.

예제

A=[1223](3.3.18)A= \begin{bmatrix} 1 & -2 \\ 2 & -3 \end{bmatrix} \tag{3.3.18}
det(AλI)=det([1223][λ00λ])=det[1λ223λ]=(1λ)(3λ)+4=λ2+2λ+1=0(3.3.19)\begin{aligned} \det \left( A - \lambda I \right) &= \det \left( \begin{bmatrix} 1 & -2 \\ 2 & -3 \end{bmatrix} - \begin{bmatrix} \lambda & 0 \\ 0 & \lambda \end{bmatrix} \right) \\ &= \det \begin{bmatrix} 1 - \lambda & -2 \\ 2 & -3 -\lambda \end{bmatrix} \\ &= (1 - \lambda)(-3 -\lambda) + 4 \\ &= \lambda^2 + 2\lambda + 1 = 0 \end{aligned} \tag{3.3.19}
λ2+2λ+1=(λ+1)2=0(3.3.20)\lambda^2 + 2\lambda + 1 = (\lambda + 1)^2 = 0 \tag{3.3.20}

에서 고윳값은 -1이다.

원래 이차방정식은 해를 최대 2개 가질 수 있지만, 이 경우에는 하나만 존재하기 때문에 이러한 해를 중복고윳값(repeated eigenvalue) 이라고 한다.

예제

B=[2321](3.3.21)B= \begin{bmatrix} 2 & 3 \\ 2 & 1 \end{bmatrix} \tag{3.3.21}
det(BλI)=det([2321][λ00λ])=det[2λ321λ]=(2λ)(1λ)6=λ23λ4=0(3.3.22)\begin{aligned} \det \left( B - \lambda I \right) &= \det \left( \begin{bmatrix} 2 & 3 \\ 2 & 1 \end{bmatrix} - \begin{bmatrix} \lambda & 0 \\ 0 & \lambda \end{bmatrix} \right) \\ &= \det \begin{bmatrix} 2 - \lambda & 3 \\ 2 & 1 -\lambda \end{bmatrix} \\ &= (2 - \lambda)(1 -\lambda) -6 \\ &= \lambda^2 - 3\lambda -4 = 0 \end{aligned} \tag{3.3.22}
λ23λ4=(λ4)(λ+1)=0(3.3.23)\lambda^2 - 3\lambda -4= (\lambda -4)(\lambda +1) = 0 \tag{3.3.23}

에서 고윳값은 4와 -1이다.

예제

C=[0110](3.3.24)C = \begin{bmatrix} 0 & -1 \\ 1 & 0 \end{bmatrix} \tag{3.3.24}
det(CλI)=det([0110][λ00λ])=λ2+1=0(3.3.25)\begin{aligned} \det \left( C - \lambda I \right) &= \det \left( \begin{bmatrix} 0 & -1 \\ 1 & 0 \end{bmatrix} - \begin{bmatrix} \lambda & 0 \\ 0 & \lambda \end{bmatrix} \right) \\ &= \lambda^2 +1 \\ &= 0 \end{aligned} \tag{3.3.25}

실수해는 존재하지 않음을 알 수 있다. 따라서 행렬 CC는 실수인 고유값을 가지지 않는다. 만약 고유값-고유벡터가 복소수(complex number)가 되어도 괜찮다면 행렬 CC는 2개의 고윳값을 가진다고 할 수 있다.

λ=i,    λ=i(3.3.26)\lambda = i, \;\; \lambda = -i \tag{3.3.26}

연습 문제 3.3.2

특성방정식을 이용하여 다음 행렬의 고윳값을 구하라.

D=[2112](3.3.27)D= \begin{bmatrix} 2 & 1 \\ 1 & 2 \end{bmatrix} \tag{3.3.27}

✒️
(2λ)21=0(2-\lambda)^2-1=0 에서 λ=1,3\lambda=1, 3

고윳값의 개수

[정리] 중복된 고윳값을 각각 별개로 생각하고 복소수인 고윳값도 고려한다면 NN차원 정방행렬의 고윳값은 항상 NN개다.

고윳값과 대각합/행렬식

  • *모든 λ\lambda의 곱 = Det
  • *모든 λ\lambda의 합 = tr
det(A)=i=1Nλi(3.3.28)\det(A)=\prod_{i=1}^N \lambda_i \tag{3.3.28}
tr(A)=i=1Nλi(3.3.29)\text{tr}(A) =\sum_{i=1}^N \lambda_i \tag{3.3.29}

예제

행렬 AA에 대해서 대각합과 행렬식은 다음과 같다.

tr(A)=1+(3)=2(3.3.30)\text{tr}(A) = 1 + (-3) = -2 \tag{3.3.30}
det(A)=1(3)2(2)=1(3.3.31)\text{det}(A) = 1 \cdot (-3) - 2 \cdot (-2) = 1 \tag{3.3.31}

그런데 고윳값이 λ1=1\lambda_1=-1, λ2=1\lambda_2=-1 (중복된 고윳값)이므로

λ1+λ2=2=tr(A)(3.3.32)\lambda_1 + \lambda_2 = -2 = \text{tr}(A) \tag{3.3.32}
λ1λ2=1=det(A)(3.3.33)\lambda_1 \cdot \lambda_2 = 1 = \text{det}(A) \tag{3.3.33}

가 성립한다.

예제

행렬 BB에 대해서도 고윳값이 λ1=4\lambda_1=4, λ2=1\lambda_2=-1이고

λ1+λ2=3=tr(B)=2+1=3(3.3.34)\lambda_1 + \lambda_2 = 3 = \text{tr}(B) = 2 + 1 = 3 \tag{3.3.34}
λ1λ2=4=det(B)=2123=4(3.3.35)\lambda_1 \cdot \lambda_2 = -4 = \text{det}(B) = 2 \cdot 1 - 2 \cdot 3 = -4 \tag{3.3.35}

가 성립한다.

고유벡터의 계산

고윳값을 알면 다음 연립 방정식을 풀어 고유벡터를 구할 수 있다.

(AλI)v=0(3.3.36)(A - \lambda I)v = 0 \tag{3.3.36}

예제

앞에서 예로 든 행렬 AA에 대해서는

[1+1223+1][v1v2]=0(3.3.37)\begin{bmatrix} 1+1 & -2 \\ 2 & -3+1 \end{bmatrix} \begin{bmatrix} v_1 \\ v_2 \end{bmatrix} = 0 \tag{3.3.37}
[2222][v1v2]=0(3.3.38)\begin{bmatrix} 2 & -2 \\ 2 & -2 \end{bmatrix} \begin{bmatrix} v_1 \\ v_2 \end{bmatrix} = 0 \tag{3.3.38}

이므로

2v12v2=0(3.3.39)2v_1 - 2v_2 = 0 \tag{3.3.39}

즉,

v1=v2(3.3.40)v_1 = v_2 \tag{3.3.40}

를 만족하는 모든 벡터가 고유벡터임을 알 수 있다. 즉

v=[11](3.3.41)v=\begin{bmatrix} 1 \\ 1 \end{bmatrix} \tag{3.3.41}

또는 단위벡터

v=[2222](3.3.42)v=\begin{bmatrix} \dfrac{\sqrt{2}}{2} \\ \dfrac{\sqrt{2}}{2} \end{bmatrix} \tag{3.3.42}

가 유일한 고유벡터다. 중복된(repeated) 고유벡터라고도 한다.

예제

고윳값이 중복되었다고 고유벡터도 항상 중복되는 것은 아니다. 예를 들어 항등행렬 II의 고윳값은 1로 중복된 고윳값을 가진다.

det(IλI)=det(([1λ001λ])=(λ1)2=0(3.3.43)\det(I - \lambda I) = \det( \left( \begin{bmatrix} 1-\lambda & 0 \\ 0 & 1-\lambda \end{bmatrix} \right) =(\lambda - 1)^2 = 0 \tag{3.3.43}

하지만 이 값을 고유값과 고유벡터 정의에 대입하면

[0000][v1v2]=0(3.3.44)\begin{bmatrix} 0 & 0 \\ 0 & 0 \end{bmatrix} \begin{bmatrix} v_1 \\ v_2 \end{bmatrix} = 0 \tag{3.3.44}

으로 임의의 2차원 벡터는 모두 고유벡터가 된다.

연습 문제 3.3.3

특성방정식을 이용하여 다음 행렬의 고윳값과 고유벡터를 구하라.

(1)

E=[2321](3.3.46)E= \begin{bmatrix} 2 & 3 \\ 2 & 1 \end{bmatrix} \tag{3.3.46}

✒️
(2λ)(1λ)6=0(2-\lambda)(1-\lambda)-6=0
λ23λ4=0\lambda^2-3\lambda-4=0
λ=4,1\lambda=4,-1
λ=4\lambda=4 일 때,

(E4I)[v1v2]=[2323][v1v2]=[2v1+3v22v13v2]=[00](E - 4I) \begin{bmatrix} v_1 \\ v_2 \end{bmatrix} = \begin{bmatrix} -2 & 3 \\ 2 & -3 \end{bmatrix} \begin{bmatrix} v_1 \\ v_2 \end{bmatrix} = \begin{bmatrix} -2v_1+3v_2 \\ 2v_1-3v_2 \end{bmatrix} = \begin{bmatrix} 0 \\ 0 \end{bmatrix}

따라서 고유벡터는 v=(3,2)v=(3,2) 이고 정규화 하면, v=[313213]v=\begin{bmatrix} \dfrac{3}{\sqrt{13}} \\ \dfrac{2}{\sqrt{13}} \end{bmatrix}

λ=1\lambda=-1 일 때, 같은 방법으로 구해보면 고유벡터는 v=(1,1)v=(1,-1) 이고 정규화 하면, v=[1212]v=\begin{bmatrix} \dfrac{1}{\sqrt{2}} \\ \dfrac{-1}{\sqrt{2}} \end{bmatrix}

(2)

F=[1101](3.3.47)F= \begin{bmatrix} 1 & 1 \\ 0 & 1 \end{bmatrix} \tag{3.3.47}

✒️
λ=1\lambda=1 로 중복된 고윳값을 갖는다.
고유 벡터는 v2=0v_2=0 만 만족하는 모든 2차원 벡터로, 정규화하면 v=[10]v=\begin{bmatrix} 1 \\ 0 \end{bmatrix} 또는 v=[10]v=\begin{bmatrix} -1 \\ 0 \end{bmatrix}

연습 문제 3.3.4

중복된 고윳값 λ\lambda에 대해 서로 다른 고유벡터 v1v_1, v2v_2가 존재하면 이 두 벡터의 선형조합

c1v1+c2v2(3.3.48)c_1v_1 + c_2v_2 \tag{3.3.48}

도 고윳값 λ\lambda에 대한 고유벡터임을 증명하라.

✒️
Av1λv1=0Av_1 - \lambda v_1 = 0 이고 Av1λv1=0Av_1 - \lambda v_1 = 0 이므로 두 등식에 각각 c1c_1, c2c_2 를 곱해준 뒤 서로 더해주면
A(c1v1+c2v2)λ(c1v1+c2v2)=0A(c_1v_1 + c_2v_2) - \lambda (c_1v_1 + c_2v_2 )= 0 이므로 고윳값과 고유벡터의 정의에 의해
c1v1+c2v2c_1v_1 + c_2v_2 도 고윳값 λ\lambda에 대한 고유벡터이다.

넘파이를 사용한 고유분해

linalg에서는 고윳값과 고유벡터를 구할 수 있는 eig() 명령을 제공한다.
고윳값은 벡터의 형태로, 고유벡터는 정규화된 고유벡터 행렬의 형태로 묶여서 나온다.
실수인 고윳값이 존재하지 않는 행렬에 대해서는 복소수인 고윳값과 고유벡터를 계산한다.

eig() 명령의 결과로 나오는 고유벡터 행렬은 행이 아니라 열을 고유벡터로 가진다.
수치 계산에서 오차가 발생한다.

A = np.array([[1, -2], [2, -3]])
w1, V1 = np.linalg.eig(A)
print(w1)
print(V1)
[-0.99999998 -1.00000002]
[[0.70710678 0.70710678]
 [0.70710678 0.70710678]]
B = np.array([[2, 3], [2, 1]])
w2, V2 = np.linalg.eig(B)
print(w2)
print(V2)
[ 4. -1.]
[[ 0.83205029 -0.70710678]
 [ 0.5547002   0.70710678]]
C = np.array([[0, -1], [1, 0]])
w3, V3 = np.linalg.eig(C)
print(w3)
print(V3)
[0.+1.j 0.-1.j]
[[0.70710678+0.j         0.70710678-0.j        ]
 [0.        -0.70710678j 0.        +0.70710678j]]

연습 문제 3.3.5

지금까지 연습 문제에 나온 행렬들에 대해 NumPy를 사용하여 고유분해를 하라.
✒️
A~C는 위에 있다.

D=[2112]D= \begin{bmatrix} 2 & 1 \\ 1 & 2 \end{bmatrix}
E=[2321]E= \begin{bmatrix} 2 & 3 \\ 2 & 1 \end{bmatrix}
F=[1101]F= \begin{bmatrix} 1 & 1 \\ 0 & 1 \end{bmatrix}
D = np.array([[2, 1], [1, 2]])
w4, V4 = np.linalg.eig(D)
print(w4)
print(V4)

E = np.array([[2, 3], [2, 1]])
w5, V5 = np.linalg.eig(E)
print(w5)
print(V5)

F = np.array([[1, 1], [0, 1]])
w6, V6 = np.linalg.eig(F)
print(w6)
print(V6)


# [3. 1.]
# [[ 0.70710678 -0.70710678]
#  [ 0.70710678  0.70710678]]

# [ 4. -1.]
# [[ 0.83205029 -0.70710678]
#  [ 0.5547002   0.70710678]]

# [1. 1.]
# [[ 1.00000000e+00 -1.00000000e+00]
#  [ 0.00000000e+00  2.22044605e-16]]
profile
Connecting my favorite things

0개의 댓글