서점에 갔다가 베스트셀러 코너에서 눈에 띄어 구입한 책이다. 제목만 봤을 때 뭔가 심리학적 방어기제를 독자들에게 주문할것만 같은 느낌이었다. 일부 그런 부분이 아주 없진 않으나, 막상 내용은 정신과 전문의로써 다양한 상담 사례를 통해 환자들의 심리 분석과 그들이 겪고 있는 문제의 원인들을 심리학적 지식으로 풀어서 설명하는 내용이었다. 이와 같은 실제 사례와 분석 내용을 기반으로 독자로 하여금 자기 자신을 돌아보고 성찰하고 대인관계에 있어서 상처받지않는 방법을 가르쳐주는 내용이었다. 


필자가 책을 읽고 판단한 대인관계에서 상처받지않고 건강한 관계를 만드는 방법은 요약하자면 두 가지다. 나 자신에 대해서 인정할 것. 그리고 적당한 거리를 둘 것


책 내용중에 다음과 같은 구절이 나온다. "인간은 누구나 지독한 나르시시즘적 존재다". 그렇다. 필자를 비롯한 모든 대부분의 인간은 아마 정도의 차이는 있겠지만, 어느 정도 자기중심적 사고방식을 가지고 있다. 상대방과의 언쟁이 발생하면 어느 순간 객관적 판단능력은 상실한 채 오로지 자신의 주장이 옳다고 밑도록 만들고싶은 생각이 머릿속을 지배할 때가 있고, 후배만 보면 제 앞가림은 제대로 하지도 못하면서 이런 저런 조언 따위를 늘어놓고 혼자 뿌듯해하는 선배들, 나는 분명 상대방에게 잘 해줬다고 생각하지만 나의 기대에 부흥하지 못한 상대방에게 섭섭함, 분노 따위의 감정을 느끼는 일들, 성인이 되어 사회생활을 해본 사람이라면 누구나 한 번쯤 겪었본적이 있을것이다. 그러다 누군가가 자신에게 반기라도 들면 그날부로 적이 되어버리는 경우도 적지 않다. 나는 항상 상대방보다 합리적이고 객관적인 사람이라고 판단하기 때문이다. 


그러나 결코 자신을 객관적으로 판단하는 것은 쉽지 않다. 우리는 그런 존재이기 때문이다. 그리고 그 이면에는 누군가로부터 인정을 받고 싶고, 소중한 존재로 인식되기를 바라는 욕구가 존재한다. 그러나 쉽게 간과할 수 있는 점은 누군가로부터 인정받기를 원한다면 먼저 상대방을 존중하고 인정해야 한다는 점이다. 즉 내가 맞는 것 같지만 틀릴 수 있고, 상대방이 틀린 것 같지만 맞을 수 있음을 인정하는 것이다. 물론 이것만으로는 안되고 그 이전에 기본적인 실력과 인성은 필수이다. 실력 없이 그저 남을 인정한다고 해서 인정받지는 않는 것 같다. 참 어려운 일이다. 



또 한 가지는 적당한 거리 두기. 이게 참 어려운 일이다. 얼마나 거리를 둬야 "적당한"걸까? 그런데 이 적당한 거리 두기가 참 다양하게 해석될 수 있는 말인 것 같다. 책에는 거절을 잘 하지 못해 어려움을 겪는 사람의 사례가 나온다. 이 사람은 결국 상대방과의 적당한 거리 두기에 실패하여 어려움을 겪고 있는 것이다. 이 사람의 심리적 이면에는 남에게 인정받고 싶어하는 욕구가 있을 것이다. 그러한 욕구가 무리한 부탁도 거절하지 못하고 계속해서 들어줄 수밖에 없고, 결국 본인을 괴롭게한다. 참 무서운 욕구인 것 같다. 한 가지 방법은 상대방에게 자신의 주장을 부드럽지만 단호하게, 그리고 간결하고 명료하게 하는 것이다. 처음에야 힘들겠지만, 이렇게 거리를 두는 것이 상대방으로부터 상처를 받지않고 건강한 관계를 이어나가는 방법일 것이다. 



나 자신에 대한 객관적 판단능력을 가지고, 상대방과의 적당한 거리를 두는 것은 결코 쉬운 일이 아니다. 운동을 잘하기 위해서 훈련이 필요하듯 건강한 까칠함을 얻기 위해서도 역시 훈련이 필요하다. 필자는 요즘 남몰래 혼자서 하는 훈련이 있다. 바로 말을 아끼기. 특히나 상대방에 대한 비판을 하고싶을 때 말을 아끼는 훈련을 하고있다. 당신의 의견은 완전히 틀렸어! 그건 말도 안돼! 대체 무슨 소리를 하는 거야? 라는 말을 하고싶을 때마다 그에 대해선 침묵으로써 반대 의견을 대신하는 것이다. 이와 관련해서는 지난번에 읽었던 데일카네기의 인간관계론과도 연결되는 부분이 굉장히 많다. 이렇게 직접적인 비난을 하지 않는 것만으로도 예전에 비해 상대방과의 관계가 훨씬 건강해지는 느낌이다. 물론 무조건적인 침묵은 오히려 독이 될 수 있기에 적당한 피드백과 부드럽지만 단호하고 간단명료한 나의 주장도 반드시 필요하다. 그럼에도 불구하고 비난을 참을 수 없게 만드는 사람은 반드시 있게 마련이지만, 이런 사람들은 최대한 피하는 것이 정신건강에 좋은 것 같다. 


지난 강의 Lecture 21-(1)에 이어 고유값(eigenvalue)과 고유벡터(eigenvector)에 대한 두 번째 강의다. 이번 포스팅에서는 고유값과 고유벡터에 대한 실제 계산법과 유용한 공식, 그리고 여러 가지 행렬들에 대한 고유값/고유벡터에 대해 알아보도록 하겠다. 지난 첫 번째 강의에서 주로 개념 위주의 설명을 했기 때문에 앞 강의를 먼저 공부하고 오는 것을 추천한다. 

 

 

3. 고유값(Eigenvalue)과 고유 벡터(Eigenvector)의 계산 방법

 

- How to get eigenvalues/eigenvectors?

 

앞선 포스팅을 통해 우리는 고유값과 고유벡터에 대한 전반적인 개념을 파악하였다. 어떤 선형시스템 A에 의해 변환 되는 수많은 벡터들 중, 변환 전과 변환 후가 평행한(parallel), 다른 말로 표현하면 변환 전/후의 벡터가 동일한 부분공간(subspace)에 존재하는 벡터들을 고유벡터(eigenvector)라고 한다. 그리고 그 변하는 정도를 나타내는 scale값을 고유값(eigenvalue)이라 한다. 지난 포스팅에서 다뤘던 것들 중에 이 고유값과 고유벡터를 이해하는데에 가장 중요한 식이 바로 식 (2)이다. 이를 다시 한 번 써보자. 

 

 

어느 정도 개념 파악을 했으니 이제 실제로 고유값과 고유벡터를 어떻게 계산하는지를 식 (2)로부터 유도하여 알아보자. 우선 식 (2)의 우변의 λx를 좌변으로 이항하면 아래 식과 같이 된다. 

 

 

※ (식 번호가 11부터 시작하는 이유는 지난 강의와 연결되는 강의이기 때문)

식 (2)의 우변을 좌변으로 이항하여 (11.2)와 같이 만들었다. 그런데 식 (11.1)까지는 이해가 가지만, x텀을 묶어서 식을 다시 쓰는 과정에서 원래 없던 단위행렬(Identity matrix) I가 붙었다. 이게 붙는게 맞는 것일까? 람다(lambda)가 단위행렬과 곱해지게 되면 대각 원소에만 람다 값이 곱해지게 되고 결국 A의 대각 원소들의 값에서 람다 만큼 뺀 것과 같다. 이것이 식 (11.1)과 같은 결과를 보이는지 알아보자. A를 2x2로 가정하고 식을 풀어서 쓰면 아래와 같다. 

 

 

식 (11.1)을 풀어서 정리했더니 식 (12)의 맨 아래와 같은 결과가 나왔다. 이번엔 식 (11.2)를 풀어서 써보자. 

 

 

식을 풀어서 다시 정리한 결과, (12)와 (13)이 같음을 알 수 있다. 따라서 식 (11.2)에서 x를 중심으로 묶어줄 때 반드시 단위행렬을 람다(lambda)에 곱해줘야 한다

 

람다에 단위행렬을 곱해줘야 한다는 사실을 알았으니 다시 식 (11.2)를 보도록 하자. 이 식을 다시 이해해보면 일단 괄호 안의 식은 원래의 행렬 A의 대각 원소들을 람다(lambda)만큼 이동(shift)시킨 행렬이다. 이 대각 원소들을 shift시킨 행렬에 벡터 x를 곱하면 그 결과가 영벡터(zero vector)가 된다. 이는 Ax=0의 꼴이며, null space에 대한 해를 찾는 과정이다.(이때 단순히 x가 영벡터인 것은 제외하고 생각하자) 이 말은 무엇을 의미할까? 

 

Ax=0를 만족시키는 해를 찾는 다는 것은 행렬 A의 null space를 찾는 것인데, 이때 행렬 A의 null space가 존재하기 위해선 행렬 A가 반드시 특이행렬(singular matrix)이어야 한다. 결국 식 (11.2)의 좌변의 괄호 안 식, 즉 A의 대각 원소들을 람다만큼 쉬프트 시킨 행렬은 특이 행렬이 되어야만 한다는 의미다. 만약 식 (11.2)의 괄호 안의 식이 특이행렬이 아니라면, 이 식을 만족시키는 유일한 해(solution) x는 오직 영벡터(zero vector)만이 존재한다. 따라서 이 식은 특이 행렬이 되어야한다. 

 

식 (11.2)의 괄호안의 식이 특이행렬이 되어야 한다는 것은 알았다. 그런데 특이 행렬 하면 떠오르는 특성이 있을것이다. 바로 특이행렬(singular matrix)의 행렬식(determinant)은 0이라는 것이다. 이 특성을 이용해서 고유값 문제를 해결할 수 있다. 식으로 써보면 아래와 같다. 

 

 

식 (14)는 식 (11.2)의 괄호 안의 식에 대한 determinant를 나타낸 것이다. 그런데 가만히 보면 x가 없고 람다만이 남았다. 즉 원래 식 (11.2)에서는 미지수가 x와 람다(lambda) 두 개였는데, determinant에 관한 식으로 정리하면서 미지수가 람다 한 개만 남게된 것이다. 결국 이 determinant의 식으로 정리하는 아이디어는 두 개의 미지수 x와 람다중, 고유값(eigenvalue)인 람다(lambda)를 먼저 찾겠다는 아이디어이다. 이때 찾을 람다(lambda)값은 한 개가 아니라 n개의 람다(고유값)이다. n개의 람다가 전부 다른 값을 가질 수도 있지만, 동일한 값을 가질 수도 있다. 만약 람다가 동일한 값을 가진다면 문제가 발생할 수도 있다. 고유값이 동일한경우 왜 문제가 발생하는지 이 포스팅 마지막 부분에서 언급하도록 하겠다. 

 

고유값(eigenvalue)인 람다를 구한 다음엔 고유벡터(eigenvector)를 구해야 한다. 일단 고유값을 찾으면 고유벡터 구하기는 그리 어렵지 않다. 고유벡터 x를 찾는 것은 우리가 지금까지 많이 해왔던 null space를 찾는 것이기 때문이다. 먼저 구한 고유값을 식 (13)에 차례로 대입한 뒤, 가우스소거(Gauss Elimination)를 통해 pivot을 찾고 free variable을 찾은 다음, free variable에 값을 설정하여 null space를 찾으면 된다. null space를 구하는 방법은 Lecture 7을 참고하기 바란다. 

 

 

eigenvalues/eigenvectors calculation method 

 

지난번 포스팅에서 예로 들었던 식 (3)의 선형시스템 A의 고유값(eigenvalue)과 고유벡터(eigenvector)를 실제로 계산해보자. 우선 A에 대한 고유값/고유벡터 식을 다시 써보면 다음과 같다. 

 

 

식 (11.1)과 (11.2)와 같이 우변을 좌변으로 이항시키고 x로 묶어주면 아래와 같은 식이 된다. 

 

 

식 (16.3)이 (A-λI)x=0을 의미한다. 이제 식 (14)와 같이 괄호 안의 식에 대한 determinant식을 세워보자. 

 

 

determinant의 계산 방법은 Lecture 19를 참고하기 바란다. determinant를 계산하면 (17.2)를 거쳐 식 (17.3)과 같이 식이 만들어진다. (17.3)을 보면 중학교때 배웠던 이차식의 인수분해 방법으로는 풀기가 어렵다. 근의 공식(quadratic formula)을 이용하여 해를 구해보자. 

 

 

식 (18)은 근의 공식을 이용하여 식 (17.3)의 람다(lambda)에 대한 이차방정식의 해를 구한것이다. 이전 포스팅의 고유값과 같음을 알 수 있다. 이렇게 하여 고유값(eigenvalue)은 어렵지 않게 구하였다. 이제 고유 벡터(eigenvector)를 구할 차례이다. 

 

고유벡터를 구하기 위해선 먼저 구한 고유값을 식에 대입하여 미지수를 한 개로 만들어야 한다. 식 (16.3)에 첫 번째 고유값인 람다1을 대입해보자. 

 

 

식이 조금 복잡해졌지만 (19)와 같이 고유값을 대입한 Ax=0꼴의 식을 만들었다. 이제 이 식을 만족시키는 고유벡터를 구해보자. 다시 한 번 말하지만 대각 원소들에서 람다 값을 빼준 형태인  (19)의 행렬 A는 특이행렬(singular matrix)이다. 따라서 null space가 존재하고, null space가 곧 고유벡터가 된다. null space를 구하기 위해 차례로 가우스소거(Gauss Elimination)를 해보도록 하자. 

 

 

먼저 식 (19)의 A의 a11의 원소를 pivot으로 설정하고, row2를 제거해주기 위해서는 pivot원소를 1로 만들어서 row2에서 row1을 빼줘야 한다. row1에 a11의 역수를 곱해서 pivot을 1로 만든 뒤, row2에서 빼주면 아래와 같은 결과가 나온다. 

 

 

결과적으로 람다1에 대한 고유벡터는 식 (20)과 같다. 가우스소거를 한 다음, free variable에 임의의 값을 대입하여 해를 구했으며 임의의 값은 간단히 1을 대입하였고, 이때 이 식을 만족시키는 벡터 x는 식 (20)의 맨 마지막과 같다. 지난 포스팅에서 그래프로 표현했던 고유벡터와 같은 결과임을 볼 수 있다. 

 

마찬가지로 람다2에 대한 고유벡터를 계산하면 아래와 같은 결과가 나온다. 동일한 절차이기 때문에 자세한 계산 과정은 생략하겠다. 

 

 

 

이렇게하여 식 (3)에 대한 고유값과 고유벡터를 구하는 법을 배웠다. 앞서 언급했듯이 고유값(eigenvalue)은 유일하지만, 고유벡터(eigenvector)는 무수히 많은 수가 존재할 수 있기 때문에 고유공간(eigenspace)라는 공간이 존재한다고 배웠다. 이는 고유벡터를 계산할 때 free variable에 어떤 값을 넣고 푸는지에 따라 달라진다. 실제로 MATLAB과 같은 프로그램을 통해 계산한 고유벡터의 값은 조금씩 달라질 수 있는데, 이는 free variable에 대한 설정 기준이 다르기 때문이다. 비록 고유벡터의 결과가 달라질 수는 있으나, 동일한 eigenspace상에 존재하기 때문에 어떤 것이 더 옳다고 볼 수는 없다. 

 

이번 포스팅에서 배운 고유값/고유벡터의 계산 방법은 2x2행렬을 기준으로 하였다. 그러나 3x3, 4x4, nxn의 고유값/고유벡터 역시 계산방법은 동일한 절차에 의해 진행된다. 다만 처음에 고유값을 구할 때 determinant를 계산하는 과정이 복잡할 수는 있다. 그러나 지난 포스팅(Lecture 19)에서 배운 여인수(cofactor)를 통한 nxn 행렬의 determinant를 계산하고, 람다에 대한 n차방정식을 풀면 된다. 그리고 마찬가지로 가우스소거를 통해 소거된 행렬을 만들고, pivot을 제외한 free variable에 1과 같은 간단한 숫자를 대입하여 해당 행렬의 null space를 계산하면 된다. 3x3이상의 행렬에 대한 행렬식 계산방법은 인터넷에 많이 존재하고 푸는 개념은 2x2와 동일하기 때문에 여기서 따로 다루지는 않겠다. 3x3행렬의 determinant계산 방법만 잘 숙지하고 있으면 어렵지 않게 구할 수 있다. 

 

사실 다른 것들도 마찬가지 겠지만, 고유값이나 고유벡터는 어떤 개념인지를 아는 것이 중요하지 푸는 방법은 그렇게 중요하지 않을 수 있다. 실전에서 계산은 컴퓨터가 다 하기 때문이다. 그래도 어떤 개념과 철학에 의해 고유값과 고유벡터가 계산되는지는 알아둘 필요가 있다

 

 

 

4. 여러 가지 행렬의 고유값(Eigenvalue)과 고유 벡터(Eigenvector)

 

- permutation matrix

 

일반적인 행렬 외에 몇 가지 특수한 형태의 행렬에 대한 고유값과 고유벡터에 대해 알아보자. 먼저 다음의 치환행렬(permutation matrix)에 대해 알아보자. 

 

 

치환행렬의 역할은 무엇일까? 지난 포스팅(Lecture 5)을 통해 치환행렬이 어떤 행렬의 앞에 곱해지면, 행 교환(row exchange)이 일어난다는 것을 배웠다. 마찬가지로 임의의 벡터를 곱했을 때 벡터의 각 컴포넌트들의 위치를 변화시킨다. 식 (22)의 행렬 A의 경우, 어떤 벡터 x를 A를 통해 선형변환(Linear transformation)을 시켜주면 x1 컴포넌트와 x2 컴포넌트가 뒤바뀐다. 예를 들어 x=[-2 3]T를 A에 곱해주면 아래와 같이 변환된다. 

 

 

그렇다면 이 치환행렬이 공간상에서 갖는 의미는 무엇일까? 아래 그림을 보자. 

 

 

Fig. 9 치환행렬의 변환 예시

 

 

Fig. 9는 식 (22)의 치환행렬의 벡터의 변환 예시를 보여주고 있다. 빨간색과 파란색 실선 화살표가 변환 이전의 벡터들이고, 점선으로 표현된 화살표가 변환된 벡터들을 나타낸다. 변환 전과 후를 살펴보면 대각선인 y=x의 직선을 기준으로 마치 데칼코마니(decalcomanie)를 하는 것과 같이 벡터들을 변환 시킨다. 

 

그렇다면 식 (22)의 행렬 A의 고유값과 고유벡터는 어떤 것들일까? 사실 앞서 배웠던 계산 방법들을 통해 계산을 하지 않아도 Fig. 9를 보면 유추할 수 있다. 일단 먼저 보이는 고유벡터는 y=x선상에 존재하는 벡터, 즉 x=[1 1]T이다. 여기에 대응되는 고유값은 당연히 λ=1일 것이다. 이 대각선에 존재하는 모든 벡터들은 A의 고유벡터일텐데, 변환 후에도 벡터의 크기나 혹은 반대방향으로 변환시키지는 않기 때문이다. 

 

식 (22)의 A는 2x2크기이고, 따라서 고유값과 고유벡터를 각각 두 개씩 가진다. 나머지 고유값과 고유벡터는 어떤 것일까? 힌트는 Fig. 9의 빨간색 벡터 x1이다. 변환 전과 변환 후를 보면 방향이 반대 방향이긴 하지만 방향을 약간만 틀면 같은 Line선상에 존재할 것이다. 결국 y=x의 직선과 직교(orthogonal)하는 Line에 존재하는 벡터들이 A의 두 번째 고유벡터가 되고, 이 Line상에 존재하는 벡터들은 변환 후에 크기는 그대로이지만, 방향이 반대 방향으로 변하기 때문에 고유값은 λ=-1이 될 것이다. 이제 앞서 배웠던 계산방법을 통해 실제 고유값과 고유벡터를 계산해보자. 

 

 

 

식 (24)를 통해 고유값 λ1=1, λ2=-1을 구했다. 이제 각 고유값에 해당하는 고유벡터를 구해보자. 

 

 

 

계산 결과 우리가 예상했던 것과 일치하는 것을 알 수 있다. 사실 2x2 치환행렬은 간단해서 이런 계산 과정을 거치지 않아도 쉽게 유추할 수 있다. 그러나 계산 방법을 한 번더 상기시키고자 자세한 풀이를 시도하였다. 

 

어쨋든 이 치환행렬의 고유값과 고유벡터를 그래프로 다시 표현해보면 아래 그림과 같다. 

 

 

 

Fig. 10 치환행렬의 고유값과 고유벡터의 그래프 표현

 

 

Fig. 10의 청록색(cyan) 벡터가 λ1=1일때의 고유벡터(eigenvector), 녹색 벡터가 λ2=-1일때의 고유벡터이다. λ1=1의 고유벡터는 변환 전과 후가 완전히 같다. 따라서 변환 후의 고유벡터를 같은 색깔의 점선으로 표현했지만 겹쳐서 보이지 않는다. λ2=-1의 고유벡터의 경우엔 변환 전과 후가 동일한 1차원 공간(eigenspace)에 존재하지만, 그 방향이 고유값에 의해 반대방향으로 변한다. Fig. 10의 녹색 점선 화살표는 녹색 실선 화살표를 A를 통해 변환 시킨 결과, 혹은 고유값을 곱해서 변환시킨 결과를 나타낸다. 결과적으로 식 (22)의 치환행렬(permutation matrix)의 고유벡터들이 존재하는 2개의 부분 공간인 eigenspace는 y=x와 y=-x의 직선이고, 이 둘은 서로 직교(orthogonal)한다. 이 둘이 직교하는지 확인하기 위해선 간단히 내적(dot product)을 해서 0이 되는지를 확인하면 알 수 있다. 

 

 

- some rules of eigenvalues

 

여기서 고유값(eigenvalue)에 대한 한 가지 흥미로운 규칙을 알아보자. 식 (25)를 통해 구한 행렬 A의 고유값은 각각 λ1=1과 λ2=-1이다. 이 두 고유값을 더하면 그 결과는 0이 된다. 그런데 놀랍게도 고유값들의 합은 식 (22)의 행렬 A의 대각 원소(diagonal elements)들의 합, 즉 trace와 같다. A의 대각 원소들은 전부 0이고, 이들을 모두 더하면 결과는 동일하게 0이 된다. 

 

 

식 (26)의 규칙을 알고있다면 식 (22)의 행렬 A에 대한 고유값을 구할 때, 첫 번째 고유값만 구해도 나머지는 바로 알 수 있다. 이는 임의의 크기의 nxn행렬에 대해서도 동일하게 적용된다. 

 

또 하나의 규칙은 임의의 nxn 행렬 A의 행렬식(determinant)이 바로 고유값들의 곱(product of eigenvalues)과 같다는 것이다. 

 

 

앞서 구한 식 (22)의 행렬 A의 고유값들에 대해서 이 규칙들이 맞는지 검증해보도록 하자. 

 

 

식 (28)을 통해 A의 trace와 고유값들의 합이 같은 것과, A의 determinant와 고유값들의 곱이 같음을 확인하였다. 이 두 가지 규칙을 알아두면 고유값을 계산하거나 검증할 때 유용하게 사용할 수 있으니 잘 기억하도록 하자. 

 

 

- symmetric matrix

 

다음으로 알아볼 행렬은 대칭행렬(Symmetric matrix)이다. 아래의 행렬을 보자. 

 

 

식 (29)은 대각 원소를 기준으로 상삼각원소들과 하삼각원소들이 같은 대칭행렬이다. 우선 이 행렬은 공간상에서 어떤 변환을 일으키는지 아래 그림을 통해 확인해보자. 

 

 

Fig. 11 식 (27)의 대칭행렬의 변환 그래프

 

 

Fig. 11은 식 (29)의 행렬 A의 변환 모습을 나타낸 것이다. 파란색 벡터는 원래의 벡터 x를, 빨간색 점선 벡터는 A에 의해 변환된 Ax를 나타낸다. 그림에서 보다시피 A는 원래의 벡터를 원점을 중심으로 양쪽 대각선 방향으로 잡고 늘리는 변환을 수행한다. 각각의 빨간색 점선 벡터의 끝에는 어떤 벡터 x로부터 변환되었는지가 표시되어 있다. 이제 식 (29)의 행렬 A의 고유값과 고유벡터를 구해보자. 벌써 눈치 채신 분들도 있겠지만 Fig. 11을 보면 A의 고유값과 고유벡터, 그리고 고유공간(eigenspace)이 무엇인지 파악할 수 있다. 어쨋든 계산해보자. 

 

 

식 (30)은 식 (29)의 행렬 A의 고유값(eigenvalue) 계산과정을 나타낸다. 고유벡터(eigenvector)를 구하기 전에 여기서 한 가지 재미있는 규칙을 알아보자. 식 (30.4)는 (A-λI)의 determinant를 계산하여 얻은 람다에 대한 이차방정식이다. 여기서 재밌는 규칙은 식 (30.4)의 1차항의 계수 6은 원래의 행렬 A의 trace와 같고, 상수항인 8은 원래의 행렬 A의 determinant와 같다. 원래 행렬 A의 trace는 3+3=6이고, determinant는 ad-bc=3x3-1x1=9-1=8인데, 식 (30.4)의 1차항 계수, 상수항 계수와 같음을 볼 수 있다. 결과적으로 2x2의 고유값에 대한 이차방정식의 계수는 원래 행렬 A와 아래와 같은 관계를 가진다. 

 

 

 

식 (31)는 아주 중요한 것은 아니고 고유값의 방정식과 행렬 A와 이러한 관계가 있다 정도만 알아둬도 좋을 것 같다. 이제 고유벡터를 계산해보자. 계산 결과는 아래 식과 같다. 

 

 

결과적으로 식 (29)의 대칭행렬에 대한 고유벡터(eigenvector)는 식 (32)의 두 벡터 x=[1 1]T와 x=[-1 1]T과 같으며, 이 두 고유벡터는 Line의 형태로 표현되는 고유벡터들의 1차원 부분 공간(subspace)인 eigenspace의 기저(basis)가 된다. 이때의 고유공간(eigenspace)은 y=x와 y=-x의 두 Line이 된다. 

 

 

- Relationship between diagonal components of a matrix and eigenvalues

 

우리는 앞서 대칭행렬(symmetric matrix)에 대한 고유값을 먼저 구하고, 이를 이용하여 고유벡터(eigenvector)를 계산하였다. 그런데 막상 고유 벡터를 구하고보니 어디서 많이 봤던 고유벡터이다. 바로 앞서 계산했던 치환행렬(permutation matrix)의 고유 벡터와 같음을 알 수 있다. 그렇다면 이 두 행렬, 식 (22)의 치환행렬과 식 (29)의 대칭행렬은 어떤 관련이 있는 것일까? 일단 두 행렬과 고유값/고유벡터를 다시 써보자. 

 

 

식 (33.1)은 치환행렬(permutation matrix)과 그의 고유값, 고유벡터를, 식 (33.2)는 대칭행렬(symmetric matrix)과 그의 고유값, 고유벡터를 각각 나타낸다. 고유값은 다르지만 고유벡터는 같다. 이 두 행렬은 어떤 관계가 있을까? 그것은 바로 대칭행렬은 기존의 치환행렬에 3I(3 x Identity matrix)를 더한 것과 같다. 즉 치환행렬의 대각 원소들에 3씩 각각 더한 것이 식 (33.2)의 대칭행렬이다. 

 

기존의 행렬의 대각원소들에 어떤 동일한 특정 값을 더한 것은 고유값/고유벡터에 어떠한 영향을 줄까? 보다시피 고유벡터에는 영향을 주지 않는다. 그러나 고유값에는 바로 이 더한 만큼의 차이가 난다. 즉 치환행렬의 대각 원소에 3을 더했다면, 고유값에도 3을 더한 것과 같다는 것이다. 치환행렬의 첫 번째 고유값인 λ1=1에 3을 더하면 대각행렬의 첫 번째 고유값인 λ1=4와 같아진다. 마찬가지로 치환행렬의 두 번째 고유값 λ2=-1에 3을 더하면 대칭행렬의 두 번째 고유값 λ2=2와 같아진다. 정리하자면 다음과 같다. 

 

 

만약 Axx를 만족하는 고유값과 고유벡터가 존재한다고 했을 때, 양변에 같은 값을 더해줘도 그 식은 성립한다. 이때 좌변의 행렬에 더해지는 3x는 식 (13)과 같이 단위행렬의 곱이 포함되고, 결과적으로 행렬 A의 대각 원소들에게만 영향을 미치게된다. 따라서 어떤 행렬의 대각원소에 어떤 값을 더하거나 빼주게 되면, 그 값만큼 고유값에 영향을 미치게되고, 고유벡터에는 영향을 주지 않는다. 고유값과 고유벡터는 행렬의 중요한 정보들을 포함하고 있기 때문에 만약 행렬에 어떤 변화를 가했을 때, 그에 따른 고유값과 고유벡터에 어떠한 영향을 주는지를 잘 알아둘 필요가 있다. 

 

 

- Caution in eigenvalues/eigenvectors

 

이번에 알아볼 내용은 행렬들의 고유값을 다룰 때 유의해야할 점이다. 어떤 정방행렬 A와 B가 있고, 각 행렬에 대한 고유값을 알고 있다고 가정해보자. 이때의 고유값들을 람다(lambda)와 알파(alpha)라 하자. 

 

 

여기서 알아보고 싶은 것은 식 (35)과 같이 A와 B의 고유값과 고유벡터가 각각 존재한다고 했을 때, A+B는 람다+알파와 같을 수 있을까?이다. 즉 Ax+Byx+αy은 성립하는 식인가? 결론부터 말하자면 성립하지 않는다. A와 B는 완전히 다른 행렬이기 때문에 고유값과 고유벡터가 완전히 다를 것이다. 즉 B가 A와 다른 행렬인 경우 고유벡터 자체가 바뀌어버리게 된다. A의 고유벡터가 x라면, B는 y라는 전혀 다른 고유벡터를 갖게 된다. 결국 어떤 행렬 A와 B를 더했을 때, 고유값과 고유벡터가 달라지기 때문에 선형성(Linearity)을 만족하지 않는다. 

 

마찬가지로 행렬 A와 B의 곱셉인 AB도 이 선형성을 만족하지는 않는다. 다만 여기서 B가 단위행렬(Identity matrix)이라면 이야기는 달라진다. B가 만약 단위행렬이라면, 식 (34)와 같은 경우이기 때문에 식이 성립하게 된다. 결론적으로 고유값/고유벡터에 있어서 행렬끼리의 덧셈, 곱셈은 선형성(Linearity)를 만족하지 않는다

 

 

 

- Rotation matrix

 

다음으로 살펴볼 행렬은 회전 행렬(Rotation matrix)이다. 이번 소단원에서 고유값과 고유벡터에 대한 흥미로운 내용이 많이 나오므로 집중해서 보도록하자. 우선 아래의 회전 행렬을 살펴보자. 

 

 

식 (37.1)은 우리에게 익숙한 2차원 평면의 회전 행렬(Rotation matrix) R이다. 여기서 문제를 쉽게 만들기 위해 회전각도(theta)를 +90도(deg)로 가정한다면, 실제 행렬의 값은 식 (37.2)과 같이 될 것이다. 이때 기존의 문자 R을 사용하지 않고 Q를 사용한 것은 회전 행렬이 기본적으로 Lecture 17-(1)에서 배웠던 직교 행렬(orthogonal matrix)의 대표적인 예이기 때문이다. 직교 행렬을 알파벳으로 표기할 때 Q로 나타내었으며, 회전 행렬이 곧 직교 행렬임을 강조하기 위해 Q로 표현했다는 것을 알아두자. 

 

이제 식 (37.2)의 90도를 회전시키는 회전 행렬의 고유값(eigenvalue)과 고유벡터(eigenvector)에 대해 알아보자. 계산부터 하기 전에, 고유값에 대한 규칙인 식 (26)과 (27)을 적용해보자. 

 

 

고유값 규칙을 적용한 결과, 식 (38.1)을 통해 λ1+λ2=0임을 알았고, 두 고유값을 더해서 0이 되려면 λ1과 λ2가 부호가 반대이면서 같은 값을 갖겠구나! 하고 예상할 수 있다. 그런데 그 아래의 식 (38.2)를 보니 이번엔 λ1*λ2=1이라고 한다. 곱해서 1이 되려면 λ1과 λ2가 모두 +부호를 갖거나, 모두 -부호를 가져야한다. 뭔가 앞뒤가 맞지 않는다. 고유값 규칙이 애초에 틀린걸까? 고유값에 뭔가 문제가 있다는 것은 알았고, 회전 행렬의 고유벡터에 대해서도 생각해보자. 

 

 

우선 고유벡터(eigenvector)에 대한 정의를 다시 생각해보자. 어떤 행렬 A의 고유벡터는 A를 통해 변환을 시켜도 그 방향성이 변환 이전의 자기 자신과 같거나 평행(parallel)한 벡터여야 한다. 그런데 회전 행렬의 경우, 어떤 벡터를 무조건 정해진 각도 theta만큼 회전시키는데, 상식적으로 생각해보면 회전된 이후에도 원래 자기자신과 같거나 평행한 벡터가 존재할 수 있을까? 싶다. 결론부터 말하자면 회전 행렬(rotation matrix)에서 회전 각도가 0도와 180도인 경우에는 고유벡터가 존재한다. 그러나 이 부분은 잠시 후에 다루도록 하고, 0도와 180도를 제외한 나머지 각도에 대한 회전 행렬의 고유벡터가 존재하는지에 대한 의구심이 드는 것은 상식적으로 그럴만한 일이다. 

 

0도와 180도를 제외한 회전 행렬의 고유값과 고유벡터에 문제가 있음을 인지했다. 그렇다면 이들은 정말 고유값과 고유벡터를 정의할 수 없는 걸까? 당연히 정의할 수 있다. 우선 원래의 방식대로 회전 행렬의 고유값을 계산해보자. 

 

 

식 (39)는 기존의 방식대로 고유값을 구하는 과정을 보여준다. 회전 행렬(rotation matrix)의 고유값은 식 (39)의 2차 방정식을 만족시키는 람다인데, 제곱해서 -1이 되려면 답은 복소수(complex number)밖에 없다. 결국 회전 행렬의 고유값은 복소수의 형태를 띄며, 1i와 허수부(Imaginary part)의 부호가 반대인 켤레복소수(complex conjugate number) -1i이다. 식 (39)에서 구한 고유값으로 식 (38)의 조건을 다시 계산해보면 trace Q의 경우 i-i=0, det Q의 경우 i(-i)=-(-1)=1로 규칙을 만족하는 것을 확인할 수 있다. 

 

그런데 생각해보면 약간 신기한 면도 있다. 분명 식 (37.2)의 원래의 행렬의 원소들은 모두 실수(real number)인데, 어떻게 고유값이 허수가 나올 수 있을까? 앞서 언급했듯이 고유값과 고유벡터는 행렬의 많은 정보들을 담고 있다고 했다. 어떤 행렬의 고유값이 허수가 나왔다는 사실로부터 우리는 이 행렬이 어떤 특성을 가지고 있는지를 파악할 수 있다. 

 

다시 식 (37.2)의 행렬 Q를 보면 뭔가 익숙한 형태라는 느낌이 들 것이다. 바로 앞서 공부했던 식 (22)의 치환 행렬(permutation matrix)과 거의 유사한 형태인 것을 알 수 있다. 다만 a12의 원소의 부호가 -인 것만 빼면 말이다. 즉 a12와 대칭 관계인 a21의 원소는 +1인데, a12는 완전 반대 부호인 -1이다. 이것은 무엇을 의미할까? 치환 행렬이 대칭 행렬(symmetric matrix)의 형태인 것과는 달리, 90도의 회전 행렬(rotation matrix)은 대칭과는 거리가 멀다. 즉 식 (37.2)의 Q는 비대칭행렬(anti-symmetric matrix)이다. 여기서 알 수 있는 것은 대칭행렬(symmetric matrix)에 가까울 수록 고유값은 실수의 형태로 나오고, 비대칭행렬(anti-symmetric matrix)에 가까울 수록 복소수 형태의 고유값이 나온다는 것이다. 결국 고유값이 실수냐, 허수냐에 따라 원래의 행렬이 대칭이냐 비대칭이냐를 판단할 수 있다. 참고로 비대칭행렬은 아래와 같이 전치(transpose)시킨 것이 -부호를 취한 것과 같다

 

 

 

다시 계산 문제로 넘어가서, 앞서 구한 고유값을 이용하여 이제 회전 행렬의 고유벡터를 구해보자. 

 

 

 

행렬 계산에 복소수가 등장하다보니 계산식이 약간 복잡해보인다. 그러나 계산 과정이 번거로울 뿐이지 복잡할건 없다. 실수(real number)와 허수(imaginary number)를 구분하여 원래 방식대로 잘 계산하면 된다. 단지 연산이 복소수에 대한 사칙 연산일 뿐이다. 복소수의 사칙 연산과 관련된 내용은 위키(wiki)를 참고하자. 식 (41)에서 구한 고유벡터가 맞는지 확인해보면 다음과 같다. 

 

 

 

식 (42)는 회전 행렬 Q로 각 고유벡터를 변환시킨 결과와 고유값과 고유벡터의 곱의 결과가 일치함을 보여준다. 이렇게하여 회전행렬(rotation matrix)의 복소수(complex number)로 표현된 고유값과 고유벡터를 계산하였다. 

 

 

- Rotation matrix(180 deg)

 

2x2 회전행렬(rotation matrix)은 0도와 180도를 제외한 나머지 각도에서는 고유값과 고유벡터가 비대칭성(anti-symmetric)으로 인해 복소수 형태로 표현됨을 배웠다. 그렇다면 같은 회전행렬이라도 0도와 180도는 대칭성을 보이며 실수로 표현이 될까? 답은 YES이다. 일단 0도에 대한 회전행렬은 단위행렬(identity matrix)이기 때문에 따로 설명을 하진 않겠다. 아래의 180도에 대한 회전행렬을 보자. 

 

 

식 (43)을 보면 theta가 180도일 때의 회전행렬 값을 나타낸다. 보다시피 대칭 행렬의 형태이며 고유값과 고유벡터가 모두 실수(real number)형태로 나타난다. 이를 좌표평면에 표현해보자. 

 

 

Fig. 12 180도 회전행렬의 변환과 고유벡터 

 

 

Fig. 12는 180도 회전행렬(rotation matrix)의 변환과 그의 고유벡터를 그래프로 표현한 것이다. 실선 화살표는 변환 전의 벡터와 고유벡터들을 나타내고, 점선 화살표는 변환 후의 벡터들을 의미한다. 빨간색 벡터는 x=[-2 3]T 벡터로써 180도 회전행렬에 의한 변환을 나타낸다. 180도 회전했기 때문에 원래와는 반대방향으로 바뀌었다. 마찬가지로 녹색과 파란색으로 표현된 고유벡터들도 변환 이후 180도로 회전한 모습을 보인다. 

 

그런데 여기서 한 가지 짚고 넘어가야 할 부분이 있다. 고유벡터는 분명 녹색과 청색으로 표현된 벡터들이다. 이들은 변환 이후에도 원래 자기 자신과 평행(parallel)하다. 그런데 붉은색으로 표현된 벡터 역시 변환 전과 후가 평행하다. 어떻게 된걸까? 사실 0도나 180도는 고유벡터 측면에서 특수한 각이다. 즉 이 특수각에 해당하는 2차원 회전행렬은 2차원 평면에 존재하는 모든 벡터가 전부 고유벡터가 될 수 있다. 즉 2차원 평면 공간이 전부 고유공간(eigenspace)이 되는 셈이다. 단지 2차원 평면에 존재하는 무수히 많은 벡터중에 가장 심플하고 기본적이며 연산에 있어 효율적인 벡터가 x=[1 0]T, x=[0 1]T이기 때문에 일반적으로 이 기저벡터들을 180도 회전행렬의 고유벡터로 사용하는 것이다. 회전행렬에서 이러한 특수각의 경우를 잘 알아두자. 

 

참고로 회전행렬의 임의의 각도는 그 원소들의 값이 소수의 형태로 나오게 되는데, 컴퓨터를 이용하여 회전 함수를 구현할 때 0도, 90도, 180도, 270도 등의 각도에 대한 회전행렬값은 삼각함수를 이용하여 계산하는 것 보단 theta값이 정확히 이들 각도면 상수값을 대입하여 회전 행렬을 만드는 것이 효과적이다. 일단 계산과정이 생략되므로 속도가 훨씬 빠르고, 또한 컴퓨터의 부동소수점 방식의 수치 계산상의 오류로 인해 프로그램이 오작동하는 경우를 방지해준다. 예를 들면 실제로 MATLAB에서 삼각함수를 이용하여 180도에 대한 회전행렬을 계산했을 때, 0을 완전한 0으로 인식하지 못하고 0.0000000214와 같은 굉장히 작은 소수로 인식하게 된다. 이 경우 고유값/고유벡터가 복소수의 형태로 나오는 오류가 발생한다. 따라서 특수각들에 대한 회전행렬은 미리 구현하여 사용하도록 하자. 

 

 

- Triangular matrix

 

마지막으로 살펴볼 행렬은 삼각행렬(triangular matrix)의 형태이다. 앞서 대칭행렬(symmetric matrix)에서 봤던 식 (29)의 행렬에서 a21의 원소를 0으로 만들어서 상삼각행렬(upper triangular matrix)을 만들어보자. 

 

 

식 (44)와 같은 삼각행렬형태의 행렬들은 굉장히 유용한 특성을 가지고 있다. 바로 고유값을 구하기가 매우 쉽다는 것이다. 대각 원소들 그 자체가 바로 고유값이다. 식 (44)의 행렬 A의 고유값은 대각 원소와 같은 λ1=a11=3,  λ2=a22=3이다. 왜 이와 같이 계산이 되는지 알아보자. 

 

 

식 (45)와 같이 determinant를 계산해보니 방정식 자체가 대각 원소들에 대한 것들만 포함된다. 따라서 대각 원소들이 곧 고유값이 되는 것이다. 결국 삼각행렬에 대한 고유값은 곧 원래 행렬의 대각 원소로써 굉장히 쉽게 구할 수 있다. 

 

또 한 가지 알아둘 특징은 삼각행렬인데 대각 원소가 같은 경우 고유벡터가 오직 하나만 존재한다는 것이다. 아래 식을 보자. 

 

 

λ=3일때 고유벡터를 구했더니 x=[1 0]T가 나왔다. 그리고 두 번째 고유벡터를 구하려고 보니 값이 같다. 결국 식 (46)으로 고유벡터를 한 번더 구하는 셈이 되어 서로 독립인 두 번째 고유벡터를 구할 수 없다. 이러한 특징들을 잘 알아두도록 하자. 

 

 

 

5. 마치며

 

지난 포스팅에 이어 고유값과 고유벡터에 대해 알아보는 두 번째 시간이었다. 이번 포스팅에선 고유값/고유벡터의 실제 계산법과 여러 가지 형태의 행렬의 고유값/고유벡터에 대해 공부하였다. 또한 그래프를 통해 고유값과 고유벡터의 기하학적 의미와 그 이해도를 높이고자 하였다. 모든 것을 변화시키는 와중에 변하지 않는 속성, 그리고 이 속성을 통한 시스템의 특성 해석 및 응용 등이 고유값/고유벡터 단원에서 중요하다 할 수 있겠다. 

 

이번 시간에는 2x2크기의 행렬 위주로 공부를 하였지만, 나중에 기회가 된다면 3x3행렬에 대한 고유값/고유벡터의 포스팅을 하도록 하겠습니다. 다음 포스팅 역시 고유값/고유벡터에 관련된 내용이 될 예정입니다. 

 

이번 시간에 다룰 내용은 고유값(eigenvalues)고유벡터(eigenvectors)이다. 고유값과 고유벡터에 대한 관련 내용도 꽤 방대하기 때문에 몇 개로 나누어서 다루도록 하겠다. 고유값과 고유벡터에 대한 중요성이나 필요성은 이 포스팅을 찾아온 분들이라면 굳이 설명하지 않아도 이미 알고 있을 것이다. 

임의의 정방행렬(square matrix) A에 대한 특별한 숫자가 고유값(eigenvalue)이고, A에 대한 특별한 벡터가 고유벡터(eigenvector)이다. 이들은 행렬 A에 대한 많은 정보를 내포하고 있으며, 이들은 파악하는 것은 A라는 시스템을 파악하는 데에 있어 굉장히 중요하다. 이번 포스팅에서는 이들이 의미하는 것이 무엇인지 알아보고, 이후 포스팅에선 이들을 어디에 어떻게 응용할 수 있는지를 다루도록 하겠다. 

 

 

1. 고유값(Eigenvalue)과 고유 벡터(Eigenvector)

 

- What is the eigenvalue and eigenvector?

 

임의의 정방행렬(square matrix) A가 있다고 하자. 이 행렬 A가 하는 역할은 무엇일까? A는 임의의 벡터 x에 함수(function)처럼 작용한다. 즉 어떤 벡터 x에 곱해져서 Ax라는 결과를 도출시킨다. 미적분학(calculus)을 통해 설명하자면 x는 입력 파라미터 값 x에 해당하고, Ax는 입력 파라미터를 적용한 어떤 함수의 결과값 f(x)에 해당한다. 선형 대수(Linear Algebra)에서는 x, f(x)보다 높은 차원의 식 x와 Ax를 다룬다. 

 

대부분의 경우 행렬 A에 의해 변환되는 벡터 x, 즉 Ax는 원래의 x와는 다른 방향으로 변환된다. 그러나 수많은 벡터 중에 어떤 벡터는 A에 의해 변환된 결과 벡터, 즉 Ax가 변환되기 이전의 벡터인 x평행(parallel)한 벡터들이 존재한다. 이렇게 A에 의해 변환 전과 변환 후가 평행한 벡터들이 우리가 관심을 가져야 하는 벡터들이고, 이것이 곧 고유벡터(eigenvector)이다. 고유벡터는 아래와 같이 정의할 수 있다.

 

 

그렇다면 식 (1)의 평행(parallel)하다 라는 것은 정확히 어떤 의미일까? 이는 아래의 방정식으로 정의할 수 있다. 

 




 

식 (2)는 수업시간에 고유값과 고유 벡터를 배울 때 많이 봤던 식일 것이다. 고유값, 고유벡터를 정의하는 가장 중요하고도 시작이 되는 식이며, 이를 이해하는 것은 매우 중요하다. 너무 중요하기 때문에 노란색 상자 안에 표시하였다. 식 (2)를 말로 풀어서 설명해보면 어떤 정방행렬 A는 임의의 벡터 x에 곱해져서 x의 위치나 방향을 변환시키는 역할을 한다. 그런데 수많은 벡터들 중 어떤 특정 벡터들은 A에 곱해져서 그 위치나 방향이 바뀌어도 원래 자기 자신과 동일한, 혹은 평행한 방향을 갖는다. 이러한 벡터들을 고유벡터(eigenvectors)라 한다. 이때 변환 전의 x와 A에 곱해져서 변환된 x의 크기는 다를 수 있으며, 그 크기는 특정 상수를 곱한 만큼의 차이가 존재할 뿐이다. 여기서 크기를 나타내는 특정 상수는 람다(λlambda)로 표현되었으며, 람다가 바로 고유값(eigenvalue)이다

 

정리하자면 고유벡터(eigenvector)라는 것은 어떤 선형시스템 방정식(Linear system equation) A에 의해 변환되는 수 많은 벡터들 중에 곱하기 전과 곱한 후의 벡터 방향이 똑같은 벡터이다. 즉 A가 어떤 짓을 하던간에 방향에 영향을 받지 않는 벡터를 의미한다. 고유벡터는 방향은 변하지 않지만, 원래의 벡터와 A에 의해 변환된 벡터의 크기가 어떤 상수배 만큼 다르다. 여기서 상수는 식 (2)에서 람다(lambda)를 의미한다. A는 고정된 것이고, 두 개의 미지수가 x람다(lambda)이다. 결국 식 (2)를 만족시키는 벡터 x들이 고유벡터(eigenvector)가 된다. 곱해지는 모든 벡터 x들을 변화시키지만, 변하는 와중에 변하지 않는 성분이 존재하기 마련이고, 선형시스템 A의 그 변하지 않는 성분, 혹은 속성이 고유값(eigenvalues)과 고유벡터(eigenvectors)라는 형태로 표현된 것이다

 

일단 말로 설명을 했지만 잘 이해가 가지 않을 수 있다. 그림을 통해 이해를 해보자. 우선 아래의 2x2크기의 선형시스템 방정식(Linear system equation) A를 보자. 

 

 

앞서 설명했던 것처럼 행렬 A를 어떤 함수 f(x)라고 생각해보자. 이 함수 f(x)의 기능은 x를 입력 받아 이를 변형시키는 역할을 한다. 즉 함수 역할을 하는 행렬 A에 어떤 파라미터값 x를 곱하면 이 x를 A의 특성에 맞춰 변형시켜 x'(x prime)이라는 새로운 벡터를 만들어내는 것이다. 나중에 따로 다루겠지만, 이를 선형변환(Linear Transformation)이라 한다. 실제로 x가 어떻게 변하는지 직접 살펴보자. 아래 그림은 A에 x=[1 1]T를 곱한 것이다. 

 

 

Fig. 1 행렬 A를 이용한 x의 변환

 

 

Fig. 1에서 원래의 벡터 x는 파란색 화살표로 표현되었으며, A에 곱해져서 변환된 벡터는 하늘색 점선 벡터로 표현되었다. 원래의 벡터 좌표 x=[1 1]이 A에 곱해져서 Ax=[3 0]이 되었다. 임의의 숫자를 무작위로 사용하다보니 식 (3)의 A의 벡터는 일반적이지 않은 복잡한 변환이 되었다. A의 변환을 간단히 설명하자면 공간을 양손으로 잡고 좌우로 잡아당기면서 아래/위로 뒤집은 방향으로 변환을 시킨다. 그러나 이것은 지금 당장 중요한 것이 아니기 때문에 일단 변환 자체에 관한 내용은 넘어가도록 하자. 

 

 

x=[1 1] 이외에도 다른 수많은 벡터들을 A에 곱해도 Fig. 1에 나타난 것과 같이 원래의 벡터방향과는 다른 쪽으로 변환이 이루어질 것이다. 그러나 그 수많은 벡터들 가운데 어떤 벡터들은 A에 곱해도 그 방향이 변하지 않거나 원래 자기 자신과 평행한 벡터들이 있다. 이러한 벡터들이 바로 그 행렬 A의 고유벡터(eigenvector)이다. 아래 그림은 식 (3)의 행렬 A에 대한 고유벡터를 나타낸다. 

 

 

Fig. 2 행렬 A의 고유벡터

 

 

Fig. 2는 식 (3)의 행렬 A의 고유벡터(eigenvector)를 그래프로 표현한 것이다. 일반적으로 nxn크기의 행렬은 n개의 고유벡터를 갖는다. A는 2x2크기이기 때문에 2개의 고유벡터를 가지며, 첫 번째 고유벡터 x1이 빨간색 벡터로, 두 번재 고유벡터 x2가 녹색 벡터로 각각 표현되었다. 실제 계산 방법은 이후에 알아보기로 하고, 일단 고유벡터 x1과 x2의 실제 값은 아래와 같다. 

 

 

미리 말하자면 식(4)는 손으로 계산한 결과이며, 정규화(normalized)되지 않은 상태이다. 고유벡터를 응용함에 있어 방향성분만을 적용하기 위해선 반드시 정규화를 해줘야 한다. MATLAB 등의 소프트웨어의 내장함수를 이용하여 고유벡터를 계산하면 알고리즘에 따라 값이 약간은 바뀔 수 있음을 유의하자. 어쨋든 x1과 x2가 정말로 행렬 A의 고유벡터라면, A에 곱했을 때도 그 방향이 변하지 않아야 한다. 정말로 방향이 변하는지, 변하지 않는지 한 번 곱해보자. 

 

 

식 (5)는 행렬 A와 아까 구한 고유벡터(eigenvector)를 각각 곱하여 분수식을 계산하고 분모의 유리화(rationalization)를 통해 계산한 결과 값을 나타낸다. 벡터의 값만 가지고는 원래의 x들과 방향이 같은지 알기 힘들다. 그래프를 통해 알아보도록 하자. 

 

Fig. 3 고유벡터와 A에 의한 변환 결과

 

 

Fig. 3은 A의 고유벡터 x1과 x2가 실제로 A에 의해 변환된 이후에도 원래 자기 자신과 비교해 봤을 때 방향이 바뀌지 않는지를 시험해보기 위해 그래프를 통해 변환된 고유벡터들을 표현한 것이다. 고유벡터 x1과 A에 의해 변환된 Ax1을 비교해보면 비록 크기가 약간 다르고 반대 방향이긴 하지만, 그 방향의 축은 변하지 않았다. x2와 Ax2는 벡터의 크기는 다르지만 방향은 같은 것을 볼 수 있다. 

 

 

x2는 변환 이후에도 방향이 같기 때문에 그럭저럭 이해할 수 있을 것 같긴 한데, x1의 경우는 방향의 축은 같지만 반대방향이기 때문에 고유벡터가 맞나? 하는 생각이 들 수 있다. 하지만 식 (2)의 정의에 의하면 x1은 분명 고유벡터가 맞다. 다만 우리가 아직 고려하지 않은 한 가지가 있을 뿐이다. 바로 고유값(eigenvalue)이다. 식 (2)를 다시 곱씹어보면 "행렬 A에 의해 변환된 고유벡터 x는 원래의 벡터에 어떤 상수 람다(lambda)를 곱한 것과 같다"이다. 여기서 람다(lambda)가 고유값을 의미하며, Fig. 3의 고유벡터 x1과 x2가 변환된 결과와 완전히 같아지기 위해선 여기에 고유값 람다를 곱해야 한다. x1과 x2에 대한 고유값은 아래와 같다. 

 

 

λ1은 x1에 대한 고유값을, λ2는 x2에 대한 고유값을 각각 의미한다. 여기서 λ1을 가만히 보면 부호가 음수(-)인 것을 볼 수 있으며, 값은 약 1.3정도 된다. 즉 Fig. 3에서 x1에 λ1을 곱하면 원래의 방향에서 반대방향으로 벡터가 바뀌며, 그 크기는 약 1.3배 정도 커진다는 의미다. Fig. 3을 봤을 때 빨간색 고유벡터 x1에 해당 고유값 λ1=-1.3028을 곱해주면 왠지 검은색 벡터 Ax1과 같아질 것만 같다. 마찬가지로 녹색 고유벡터 x2에도 λ2인 2.3028을 곱해주면 자홍색(magenta) Ax2와 같아질 것 같다. 정말로 그런지 그래프를 통해 확인해보자. 

 

Fig. 4 고유값과 고유벡터와 A를 통한 선형변환의 비교

 

 

Fig. 4는 Fig. 3의 고유벡터에 각각의 고유값을 곱하여 A의 선형변환과 비교한 그래프이다. Ax1과 x1는 원래 방향이 반대이고 길이가 달랐지만, λ1을 곱하고나니 같아졌다. λ1x1은 노란색 벡터로 검은색 벡터 위에 표시되었으며, Ax1벡터와 일치하는 것을 볼 수 있다. 마찬가지로 Ax2와 x2의 경우 x2의 길이가 짧았으나, λ2를 곱하고난 뒤 길이가 같아진 것을 볼 수 있다. λ2x2는 청록색(cyan)벡터로 표시되었으며, Ax2의 벡터와 겹쳐서 그려졌다. 따라서 우리는 Fig. 4를 통해 식 (2)로 정의된 고유값과 고유벡터에 대한 정의를 눈으로 확인하고 증명하였다. 아래 그림은 MATLAB 구현 코드이다. 참고로 MATLAB의 고유값/고유벡터 계산 내장 함수 명령어는 아래와 같다. 

 

[V D] = eig(A);

 

eig()함수는 행렬 A를 파라미터로 받아 고유값/고유벡터를 계산한다. V에는 고유벡터가 column vector 형식으로 저장되고, D에는 고유값들이 차례로 대각 원소로 저장된다. 

 

 

 

 

 

- eigenspace

 

Fig. 4에서 고유벡터(eigenvector)들은 고유값(eigenvalue)과 곱해져서 A에 의해 변환된 이후에도 원래 자기 자신과 같음을 보였다. 그렇다면 A의 고유벡터와 고유값은 유일할까? A의 고유벡터는 오직 Fig. 4에서 표시된 x1과 x2만 존재하고, A의 고유값은 오직 λ1과 λ2만 존재하는 걸까? 결론부터 말하자면 고유값은 유일하며, 고유벡터는 무수히 많다. 아래 식을 보자. 

 

 

식 (7.1)은 고유값(eigenvalue)에 임의의 상수를 곱한 식이다. 고유값이 유일하지 않음을 가정하고 만든 식이다. 이 경우 식은 성립할까? 당연히 성립하지 않을 것이다. 한쪽 변에만 임의의 상수를 곱해주면 당연히 식은 성립하지 않는다. 따라서 어떤 행렬 A의 고유값은 유일하다

 

식 (7.2)는 고유벡터(eigenvector)가 무수히 많을 것이라는 가정하에 만든 식이다. 식의 양변의 벡터 x에 각각 임의의 동일한 상수 c를 곱했다. 이 상수값은 양수(+), 혹은 음수(-), 심지어 0이 될 수도 있다. 어떤 상수를 곱해주던간에 양변에 동일한 상수를 곱해줬기 때문에 식은 성립할 것이다. 따라서 행렬 A의 고유벡터는 무수히 많으며, 어떤 하나의 부분 공간(subspace)를 형성한다. 이 고유벡터들이 형성하는 부분공간이 바로 고유공간(eigenspace)이다. 일반적으로 고유공간은 어떤 nxn크기의 행렬에서 동일한 고유값에 대응되는 고유벡터들의 집합 혹은 부분공간으로 정의할 수 있다. Fig. 4를 기준으로 보면 고유값 λ1에 대응되는 고유벡터 x1과, 고유값 λ2에 대응되는 x2를 기준으로 형성되는 Line이 A의 두 개의 부분 공간이 된다. 아래 그림은 고유공간을 나타낸다.

 

Fig. 5 행렬 A의 eigenspace

 

 

따라서 행렬 A의 고유벡터들은 고유공간(eigenspace)상에 존재하는 무수히 많은 벡터들이다. 이 eigenspace들은 λ1, λ2에 각각 대응되는 부분 공간(subspace)이며, 각 eigenspace에 존재하는 고유벡터(eigenvector)들의 선형결합(Linear combination)으로 정의할 수 있다. 결국 nxn 행렬에서 고유공간(eigenspace)의 수는 동일한 고유값에 대응되는 고유벡터들의 집합의 수 만큼 정의될 수 있다.

 

 

- eigenvalues and eigenvectors in null space

 

이미 언급했듯이 선형시스템 A에 곱해지는 대부분의 벡터 x는 고유벡터가 될 수 없으며, 우리는 그 안에서 고유벡터들을 찾아야 한다. 고유벡터는 A에 의해 변환되어도 원래와 동일한 방향성을 가지는 것이라 했는데, 이때 앞서 확인했듯이 그 방향은 반대방향이 될 수도, 혹은 아예 방향이 없을 수도 있다. 따라서 고유값인 람다는 양수(positive), 음수(negative), 0(zero), 심지어 복소수(imaginary number)도 될 수 있다. 

 

여기서 한 가지 짚고 넘어가자면, 고유값(eigenvalues)인 람다가 0인 경우의 고유벡터는 어떤 경우일까? 람다가 0이면 식은 Ax=0가 된다. 즉 이때의 고유벡터(eigenvector)는 영공간(null space)에 존재하는 것이다. 다시 말하면 행렬 A가 특이 행렬(singular matrix)이라는 것이다 (정방행렬에서 null space가 존재하기 위해선 free variable이 존재하는 행렬, 즉 full rank가 아니어야한다. 자세한 것은 Lecture 6, Lecture 7참조). A가 특이 행렬인 경우null space가 존재할 수 있고, A는 일부 영벡터(zero vector)가 아닌 벡터들을 영벡터(zero vector)로 보낼 수 있다. 여기서 그 "일부"에 해당하는 벡터들이 바로 고유벡터가 된다. 이를 식으로 나타내면 아래와 같다. 

 

 

A가 특이 행렬인 경우 null space가 존재하고, 이때의 고유값인 람다는 0이 된다. 이것이 식 (8)이고, 이를 만족하는 x가 바로 고유벡터이다. A가 정방행렬이며 특이행렬이고, 람다가 0일 때의 eigenvector는 null space그 자체가 된다. 

 

null space가 존재하는 행렬의 고유값(eigenvalue)과 고유벡터(eigenvalue)의 예를 한 번 들어보자. 지난 강의 Lecture 15-(2)에서 우리는 투영행렬(projection matrix)을 공부했었는데, 그때 공부했었던 투영행렬에 관한 내용을 다시 가져와보자. 

 

 

위의 문제를 간단히 설명하자면 식 (9.1)은 3차원 공간에서 2차원 평면에 관한 부분 공간(subspace)을 나타내는 선형방정식을 나타내며, 미지수보다 방정식이 더 많은 overdetermined case인 문제이다. 우변의 벡터 b는 A의 column space에 존재하지 않기 때문에 사실상 해(solution)가 존재하지 않는다. 그러나 근사하게나마 해를 구하기 위해 우변의 벡터 b를 column space에 존재하는 수많은 벡터들 중 가장 유사한 벡터로 대체하기 위해서 식 (9.2)와 같이 투영행렬(projection matrix)을 만든 것이다. 이 투영행렬을 통해 식 (9.3)과 같이 벡터 b를 A의 column space로 투영(projection)시킬 수 있다. 아래 그림은 이 문제에 대한 그림을 나타낸다. 

 

Fig. 6 A의 column space와 투영행렬

 

 

Fig. 6에서 파란색 벡터 b는 투영행렬 P에 의해 베이지색으로 표시된 A의 column space로 투영되어 녹색 벡터 p가 된다. a1과 a2벡터는 각각 A의 column1, column2를 의미하며, column space의 기저(basis)역할을 하기 때문에 a1과 a2의 선형결합(Linear combination)을 통해 column space를 형성할 수 있다. 

 

 

우리가 여기서 찾고자 하는 것은 투영행렬 P의 고유값(eigenvalue)과 고유벡터(eigenvector)이다. 이미 알고있겠지만, 식 (9.3)의 투영행렬은 3차원 벡터를 2차원 공간으로 투영시키는 역할을 하기 때문에 3x3크기에 rank는 2이고, 특이 행렬(singular matrix)이다. 따라서 null space가 존재하고 고유값이 0일 것이라는 추측은 해볼 수 있다. 

 

그렇다면 투영행렬 P의 고유값과 고유벡터는 어떤 것들일까? Fig. 6에서 파란색 벡터 b는 투영행렬 P의 고유벡터일까? 고유벡터의 정의는 원래 자신의 방향성과 행렬에 의해 변환된 결과가 변하지 않아야 한다. 그러나 b는 P에 의해 녹색벡터 p로 변환되고, 원래 자신과 완전히 다른 방향이 되기 때문에 P의 고유벡터가 아니다. 

 

이번엔 a1을 P에 곱해보자. 결과는 a1=Pa1과 같이 그대로 자기 자신이 나온다. a2도 곱해보면 a2=Pa2와 같이 그대로 자기 자신이 나온다. 애초에 투영행렬은 투영시키고자 하는 평면에 이미 존재하는 벡터들을 곱했을 때, 아무런 변화도 일으키지 않는다. 이 말은 column space인 평면에 존재하는 모든 벡터들은 전부 투영행렬 P의 고유벡터(eigenvector)가 된다는 의미이다. 즉 평면 자체가 하나의 고유공간(eigenspace)가 되고, 이때의 고유값은 1이 될 것이며, 아래와 같이 정의할 수 있다. 

 

 

 

 

아래 그림은 식 (10)의 투영행렬의 고유벡터들을 실제로 MATLAB을 이용하여 그래프로 표현한 결과이다. 

 

 

 

Fig. 7 투영행렬(projection matrix)의 고유벡터들(eigenvectors)

 

 

이미 언급했듯이 투영행렬 P의 고유벡터(eigenvector)들은 Fig. 7에서 노란색으로 표시된 평면(원래는 무한대로 봐야함)에 존재하는 모든 벡터들이다. 이는 다시말하면 람다(λ)=1에 해당하는 고유공간(eigenspace)라고 할 수 있다. 이들이 정말 고유벡터들이 맞는지 확인하기 위해 그래프를 통해 검증하였다. Fig. 7에서 Pa1=a1, Pa2=a2와 같이 원래 벡터와 변환 결과가 같음을 확인할 수 있다. a1과 a2외에도 평면에 존재하는 다른 벡터도 고유벡터가 될 수 있는지 확인하기 위해 a1과 a2의 선형결합(Linear combination)을 이용하여 변환 결과가 같음을 확인하였다. P(0.5a1+0.4a2)=0.5a1+0.4a2 임을 그래프를 통해 확인하였고, 결과적으로 평면에 존재하는 모든 벡터들이 투영행렬(projection matrix)의 고유벡터(eigenvector)가 됨을 검증하였다. 

 

Fig. 7의 노란색 평면은 식 (9.1)의 A의 column space라고 했지만, 투영행렬이 A를 기반으로 만들어졌고, 또 임의의 3차원 벡터를 노란 평면의 공간으로 보내는 역할을 하기 때문에 이 평면 자체가 투영행렬의 column space라고 할 수 있다. 투영행렬의 크기가 비록 3x3이지만 rank=2이기 때문에 선형 독립(Linearly independent)인 기저벡터(basis vector)가 두 개인 셈이다. 따라서 3차원 공간에서 2차원 평면 부분공간(subspace)을 정의하기 때문에 Fig. 7의 노란평면이 투영행렬 P의 column space가 된다. 

 

 

평면을 정의하기 위해선 독립(independent)인 벡터 2개가 필요한데, 우리는 이미 Fig. 7을 통해 투영행렬의 평면을 정의하였다. 3x3크기의 행렬은 3개의 고유값(eigenvalue)과 고유벡터(eigenvector)를 가지는데, 이미 평면을 정의했기 때문에 결과적으로 3개의 고유벡터중, 2개의 고유벡터를 찾은 셈이다. 그럼 나머지 한 개의 고유벡터는 어디에 있을까? 투영행렬 P는 3x3이지만 rank=2이고 따라서 free variable을 갖는다. 즉 투영행렬이 특이 행렬(singular matrix)이자 null space를 갖는다는 말이다. 투영행렬의 null space는 Px=0과 같이 정의할 수 있고, 식 (8)에 의해서 람다(λ)는 0이 된다. 이 말은 투영행렬의 나머지 고유벡터가 null space에 존재하며, 사실은 null space 그 자체가 된다는 의미이다. 이를 (10.1)에 이어 식으로 정리하면 아래와 같다. 

 

 

그런데 식 (10.2)를 보면 null space에 존재하는 고유벡터들을 평면에 수직(perpendicular)한 벡터들로 정의하였다. 한 가지 의문이 들만한 것은 Fig. 7에선 분명 평면을 column space라고 했는데, column space에 수직한 공간은 Left null space라고 Lecture 10에서 공부하였다. 그렇다면 정의가 틀린 것일까? 그렇지 않다. Lecture 15-(2)에서 투영행렬 P는 전치(transpose)를 시켜도 변하지 않음을 보였다. 따라서 Fig. 7의 노란 평면은 투영행렬의 column space이자 동시에 row space이고, 여기에 수직인 null space가 정의될 수 있는 것이다. 아래 그림은 null space와 나머지 eigenvector를 그래프로 표현한 것이다.

 

 

Fig. 8 Null space에 존재하는 고유벡터와 고유값

 

 

Fig. 8의 노란 평면을 수직으로 관통하는 검은색 Line이 null space이다. 자홍색(magenta) 벡터는 이 null space상에 존재하는 고유벡터(eigenvector)를 나타내며, MATLAB의 내장 함수로 계산한 결과이다. 이 고유벡터에 해당하는 고유값은 0이며, 식 (2)에 따라 고유값인 0을 해당 고유벡터에 곱해주면 우변이 0이 되어 null space를 정의하게 된다. 따라서 Fig. 8에 검은색 Line으로 표현된 null space는 투영행렬 P의 λ=0에 해당하는 eigenspace라고 할 수 있다. 사실 꼭 λ=0를 고려하지 않더라도, 검은색 Line상에 존재하는 어떠한 벡터를 P에 곱해도 결과값은 0이 나오기 때문이다. 실제로도 Fig. 8의 투영행렬 P와 MATLAB의 내장함수로 구한 λ=0에 해당하는 고유벡터 x를 곱해주면 Px=0으로 0이 나온다. 스케일을 고려한 P(cx)=0도 마찬가지이다. 

 

정리하자면 투영행렬(projection matrix)은 해가 존재하지 않는 overdetermined case인 Ax=b의 근사해를 구하기 위해 만들어졌으며, 우변의 벡터 b를 A의 column space로 투영하여 근사해를 구할 수 있도록 해준다. 이때 투영행렬 P는 full rank가 아닌 특이행렬(singular matrix)이고, free variable을 가지기 때문에 null space를 가진다. 투영행렬이 3x3인 경우 3개의 고유값(eigenvalue)과 3개의 고유벡터(eigenvector)를 가지는데, rank의 수 r만큼 column space 혹은 row space에서의 0이 아닌 고유값과 그에 대한 고유벡터를 가지며, n-r만큼 null space상에서 0인 고유값과 그에 대한 고유벡터를 가진다. 아래는 MATLAB구현 코드이다. 

 

 

 

 

 

2. 마치며 (continue)

 

이번 포스팅에선 고유값과 고유벡터에 대한 개념을 위주로 다루었다. 기본적인 식과 예를 통해 고유값과 고유벡터가 공간상에서 어떻게 표현되는지, 어떤 의미를 갖는지를 공부하였다. 고유벡터(eigenvector)와 고유값(eigenvalue)에서 가장 중요한 것은 식 (2)를 이해하는 것이다. 어떤 행렬의 고유값과 고유벡터는 그 행렬의 굉장히 중요한 정보를 담고 있다. 임의의 벡터를 어느 방향으로 얼마만큼 변화시키는지, 변환과정에서 변화 없이 유지되는 부분은 어느 부분인지 등이다. 사실 이 포스팅에선 변환 자체를 단일 벡터들을 기준으로 설명했지만, 실제 응용단계에서는 어떤 물체나 영상 등을 변환시키는데, 이러한 영상이나 물체등은 무수히 많은 벡터들의 뭉치라고 할 수 있다. 따라서 영상이나 물체가 어떤 식으로 변환되고 중심축은 어디인지 등에 관한 중요한 정보들을 파악할 수 있다. 

이 외에도 PCA(Principal Component Analysis), 영상에서 EigenFace, 진동 분석(Vibration Analysis)등 다양한 분야에 응용된다. 

 

다음 포스팅은 고유값과 고유벡터의 실제 계산 방법과 다양한 행렬들의 고유값/고유벡터, 그리고 여러 가지 관련 특성들에 대해서 포스팅 하도록 하겠습니다. 

 

+ Recent posts