지난 강의 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행렬에 대한 고유값/고유벡터의 포스팅을 하도록 하겠습니다. 다음 포스팅 역시 고유값/고유벡터에 관련된 내용이 될 예정입니다. 

 

+ Recent posts