Matip.png 


안녕하세요? LGS입니다.

뜬금 없는 그냥 마~ 주~ 차삐까! 아니라 그냥 마~ 팁!!입니다. 

오늘의 마팁은 Eigenvalue 와 Eigenvector!!


computation01.png

<이지 출처: MIT OCW - Computational Science and Engineering>


우리의 Strang 아저씨의 말씀이 Linear Algebra에서 저 위의 4가지가 쫌 중요하다 합디다.

그래서 시간 날때마다 위의 4가지에 대해서 이야기하겠습니다요.

LU elimination (또는 LU decomposition)은 이미 이야기 했구요~

이번 시간에는 Eigenvalue(아이겐 벨류)에 대한 이야기입니다.

(약속을 지키는 성실한 교주 LGS!!)


각설하고 강의 바로 시작하겠습니다.

Square Matrix(정방행렬 가로 세로의 크기가 같은 정사각형 행렬) A가 있다고 합시다.

어떤 임의의 vector x에 대해서 Ax (inner product)를 하면 inner product의 결과값으로 새로운 vector가 나오겠죠?

예를 들어 matrix A가 크기가 2 x 2인 [2 0 ; 0 2 ]이고 x가 [1;1] 이라면 Ax는 [2;2]를 돌려 줄 것입니다.

어라 그러고 보니 inner product에서 행렬 A가 마치 x에 대한 함수처럼 작용하고 있네요. ( f(x1) = x2 와 Ax1 = x2가 비슷하다는 말) 

A matrix는 평면상의 한 점 x1을 원점에서 x1의 방향으로 원래 크기의 2배의 거리로 옮기는

Linear transformation을 수행하는 함수처럼 행동을 할 것입니다.


eigen01.png                    eigen02.png


즉 위의 matrix A는 임의의 점(vector) x를 x축으로 2배 y축으로 각각 두배씩 늘리는 녀석이군요.

결국 행렬을 Linear Transform의 관점에서 보면 행렬의 내적(inner product)은 행렬에 곱해지는 임의의 vector를 

어떤 축(어느 방향)으로 늘이거나 줄이는 함수 역할을 하는 녀석이네요~


위의 A = [2 0 ; 0 2 ] 같은 경우 단위행렬(identity matrix)에 2를 곱했으니까 어떤 축(x축, y축)으로 몇배(2배) 늘이는지 쉽게 보이지만 

자~ 아래의 행렬은 어떤 축으로 몇배 늘이는 가가 쉽게 보이시나요? ^^

eigen03.png


B에 [1 ; 2] 와 [2 ; -1]을 각각 곱해보겠습니다~ (왜  [1 ; 2] 와 [2 ; -1]을 곱하냐구요? 교주는 이미 답을 알고 있으니까요 ^^)

eigen04.png


보아하니 행렬 B는 어떤 곱해지는 vector(2차원 평면에서는 점)를  [1, 2] 방향으로 -1배, [2 , -1] 방향으로는 -6배를 해주는 놈이군요

이해가 가시나요? 좀더 쉽게 설명드리자면 고무로 만들어진 말랑말랑한 판때기에다가 그림을 그려 놓고  

[1, 2] 방향으로 1배를. [2 , -1] 방향으로는 6배를 쭉~ 잡아당기셨다고 생각하시면 됩니다.


eigen12.png


예를 들어 '반지름이 1인 원'을 이루고 있는 점들에 대해 행렬 B로 Transformation 시키면 왼쪽 그림처럼 나올 겁니다.

(Linear Transformation Graph를 그리는 MATLAB Code는 VIP 게시판에 올려 두었습니다.)

조금 수학적으로 말하면 matrix의 inner product는 곱해지는 각각의 임의의 vector를 늘이거나 줄이는 축상으로 투사(projection) 시킨 후 

일정한 양만큼 늘인다는 말과 같습니다.

점(2, 0)의 경우 B matrix로 transformation 하면 (-10,4)가 나옵니다.

즉 (-10,4)는 (2,0)의 [2,-1] 방향의 성분을 -6배, [1,2]방향의 성분을 -1배 한 것과 동일합니다.

(아래 Graph는 MATLAB Symbolic Toolbox인 MuPad로 plot했어요~ ^^)


eigen18.png


쉽게 말해서 위에서 '어느 방향으로'에 해당하는 것이 Eigenvector 이구요 '얼마나 늘이는 가'에 해당하는 것이 Eigenvalue입니다.

(Eigenvalue를 다른 말로 Characteristic Value, Eigenvector는 Characteristic Vector라고도 부릅니다.)

알고 보니 Eigenvalue, Eigenvector 별거 아니죠?  =(=^ㅅ^=)=


잘 생각해보시면 위의 matrix B가 수행하는 늘이거나 줄이는 방향(Eigenvector)과 일치하는 vector를 matrix B에 곱하면

vector가 늘어난 후에도 그 곱하는 vector의 방향에는 변동이 없고 vector의 크기만 변하겠죠? 

(위의 그림에서 [2 -1] 방향으로 선을 하나 그어 놓고 [2,-1] 방향으로 고무 판대기를 잡아 늘려도 선의 방향에는 변함이 없고 크기만 달라질 겁니다)

지금까지 길게 했던 말을 수식으로 콱 줄이면...


eigen05.png

위의 수식처럼 됩니다. 이해가 가시나요? 위의 수식에서 vector x는 행렬 A가 고무판을 늘이는는 방향을 말하고

λ(람다)는 vector x방향으로(x축의 방향이 아님) 얼마나 늘어나는 가를 말해주는 그냥 숫자(scalar)입니다. 

λ를 이름하야 Eigenvalue라고 말하구요 늘어나는 방향 x는 또 이름하야 Eigenvector라 부르겠다 이말씀 입습죠~ 


자~ 그럼 본격적으로 Eigenvalue, Eigenvector를 구해봅시다.

λx를 왼쪽으로 넘기면 아래처럼 될꺼구요

eigen06.png

x로 묶어주면~

eigen07.png

그런데 λ는 scalar니까 그냥 matrix에는 못 빼주죠? 그래서 identity matrix를 곱해서 A에다가 빼줍니다.

최종적으로 우리가 풀어야하는 식은...

eigen08.png

위의 방정식을 만족하려면 x가 0이거나(x가 0이면 쓸모 없는 trivial solution) 아니면 A-λI의 determinant가 0이 되면 됩니다.

(즉  A-λI가 Singular가 되면 됩니다.)

결국 Eigenvalue를 찾는다는 말은 A-λI의 determinant가 0이되는 λ를 찾겠다는 말입니다.

eigen09.png

마지막으로 determinant 식을 세워서 방정식을 풀면 땡이죠 뭐~ ^^

위의 matrix B의 Eigenvalue λ가 -1,-6 이 나오는지 확인해볼까요?

우선 손으로 한번 풀어보구요 MATLAB command window에서 풀어보겠습니다.

Determinant 식을 적어보면

eigen10.png  

가 되구요 

마직막에 나온 determinant를 전개해서 인수분해 정리하면

eigen11.png


Eigenvalue λ가 -1,-6로 맞게 나오네요 o(^o^)o


MATLAB에서 eigenvalue를 계산해주는 함수는 eig 함수입니다.

eigen13.png

역시 예상한 결과 값이 나오네요 ^^

똑같은 절차로 3 x 3, 4 x 4, ...등에 해당하는 determinant 식을 세우셔서 3차, 4차 방정식을 푸시면 됩니다.

한가지 알아두시면 유용한 사실은 모든 eigenvalue를 다 더한 값은 행렬의 trace(행렬의 대각선 elements의 합) 값과 같다는 사실입니다.


eigen14.png 

Eigenvector를 계산하는 방법은 λ에 위에서 구한 Eigenvalue를 넣고 그냥 산수하시면 되요~

determinant가 0이므로 Rank가 원래 full rank가 아닐꺼구요

Eigenvalue λ가 -1일 경우를 먼저 보죠


eigen15.png

위의 식을 만족하는 [x; y] 가 λ= -1에 해당하는 Eigenvector가 됩니다. 어디보자~ 어디보자~ x = 1, y = 2 면 위의 식을 만족하나요?

-4*1+2*2 = 0, 2*1 - 1*2 = 0

넵 만족하네요 ^^ [1; 2]가 Eigenvector 입니다. Eigenvector는 방향을 나타내는 녀석이므로 크기는 상관 없지만

통상 vector의 크기가 1인 unit vector로 만들어주는 normalize를 하기도 합니다.


똑같은 방법으로 Eigenvalue λ가 -6일 경우...

eigen16.png

Eigenvector로 [2 ; -1] 을 얻을 수 있습니다.

(역시 크기는 상관 없습니다만 normalize 해주셔도 됩니다.)


자~ 그럼 이렇게 어렵게? 구한 이 Eigenvalue, Eigenvector가 어디에 쓰일까요?

맨 위에 스트랑 성님이 째려보고 있는 A = SΛS-1  를 살펴 봅시다. o(^o^)o

matrix A를 Eigenvalue matrix Λ와 normalize 된 Eigenvector matrix S로 (실실) 쪼갤 수 있어요(decomposition)

MATLAB에서 S와 Λ로 decomposition 하시려면 똑같이 그냥 eig 함수 사용하시면 되고, 대신에 출력 변수를 2개로 잡으시면 됩니다.

(아래 MATLAB command window에서 S-1이 아니라 S'(transpose)을 쓴 이유는 이번 예제의 경우 S가 orthonormal이므로  S-1=S' 이기때문입니다.)

eigen17.png


예를 들어 위의 B matrix을 100000번 곱해야 한다고 해봅시다.

무식하게 통밥으로 계속 B를 100000번 곱해도 되겠지만 B를  SΛS-1 로 쪼갠후 곱해보면 (SΛS-1)(SΛS-1)(SΛS-1)..... 이 되므로

괄호를 다시 묶어 보면  SΛ(S-1S)Λ(S-1S)Λ(S-1....가 되겠죠? 그런데 (S-1S)는 Identity 행렬로 다 날아가구요

결과적으로 마지막에 남는 것은 SΛΛΛΛΛΛΛΛΛΛ.....   ...ΛΛΛΛS 만 남을 겁니다.

어라 그런데 가만히 보니 Λ도 diagonal matrix니까 그냥 각 λ의 100000 승(-6100000과 -1100000 )만 계산하면 되네요 ^^

와우!!!! 계산 시간이 획기적으로 줄어들지 않겠어요? 어떤 System의 수렴 발산을 바로 확인할 수 있지 않겠어요?

어떠한 System을 decoupling 할 수 있지 않겠습니까!!!

물리적으로는 공진(resonance)되는 mode도 찾아 낼 수 있을 거구요

wave equation을 풀때도 쓰이구요 얼굴 인식에서도 쓰입니다.

한마디로 Eigenvalue, Eigenvector!! 공학에서 정말 많이 쓰여요 ^^



자~ 오늘은 여기까지 입니다.

좀더 심도 깊은 이해를 원하시는 분은 Strang느님의 직강을 보셔도 좋습니다 =(=^ㅅ^=)=

MIT Open Course Ware : Lecture 21: Eigenvalues and eigenvectors




이상 오늘의 마~ 팁 끝 o(^o^)o

다음 시간에 뵈요~ 휘릭휘릭휘리릭~

profile