이번 포스팅에서 다룰 내용은 바로 행렬의 대각화(Diagonalization)이다. 행렬의 대각화는 지난 시간에 배운 고유값(eigenvalue)과 고유벡터(eigenvector)를 활용하기 위한 하나의 방법이라고 할 수 있으며, 다른 말로는 고유값분해(Eigendecomposition)라고도 불린다. 또한 행렬의 대각화를 통해 LU 분해, QR분해와 같이 행렬을 고유값과 고유벡터로 구성된 부분 행렬들로 분해할 수 있으며, 이는 어떤 반복적인 선형방정식을 풀 때 굉장히 유용한 특성을 가지고 있다. 대각화에 대해 공부해보자. 

 

 

1. 행렬의 대각화(Diagonalization)

 

- Diagonalizing a matrix

 

지난 시간에 우리는 고유값(eigenvalue)과 고유벡터(eigenvector)에 대한 내용을 배웠다. 일단 관련 식을 다시 써보자. 

 

 

식 (1)을 다시 한 번 설명해보면 람다(lambda, λ)는 고유값을, x는 고유벡터를 각각 나타내며, 행렬 A에 의해 선형 변환(Linear transformation)을 시켜도 변환 전과 후가 평행한(parallel) 벡터를 고유벡터, 그리고 길이 변화량의 정도를 나타낸 것이 고유값이다. 이 고유값/고유벡터를 알면 행렬 A의 중요한 특성과 정보를 알 수 있으며 다양한 곳에 응용할 수 있다. 그 중 하나가 바로 행렬의 대각화(diagonalization)이다. 그렇다면 고유값과 고유벡터를 이용하여 행렬 A를 어떻게 대각화 할 수 있는 걸까? 

 

우선 식 (1)은 하나의 고유벡터와 고유값에 대한 식이다. 그러나 일부 경우를 제외하곤 대부분의 nxn크기의 행렬은 n개의 고유값과 고유벡터를 갖는다. 어떤 행렬 A의 n개의 고유값과 고유벡터를 찾은 뒤엔 아래의 식에 따라 대각화를 수행하면 된다. 

 

 

식 (2)는 대각화에 대한 식이며, 이번 포스팅의 핵심적인 식이라고 보면 된다. 식 (2)에서 A는 원래의 행렬을 의미하고, 행렬 S는 A의 고유벡터들을 column vector형태로 차례로 끼워 넣은 nxn크기의 고유벡터 행렬이다. 이때 A의 앞에는 S의 역행렬이, A의 뒤에는 S가 각각 곱해진다. 이렇게 좌변을 계산하면 우변의 Λ (대문자 람다)행렬이 만들어지는데, 이 람다 행렬(Λ)은 대각 행렬(diagonal matrix)이고 각각의 대각 원소들은 고유값들로 차례로 채워져있다. 이제 식 (2)가 대충 뭘 나타내는지는 알겠는데, 도대체 저게 어떻게 만들어졌고, 무슨 의미가 있다는 걸까? 이제부터 차근차근 알아보도록 하자. 

 

그 전에 먼저 식 (2)에서 눈여겨봐야할 것이 있다. 앞에서 S는 A의 고유벡터들로 이루어진 고유벡터행렬(eigenvector matrix) 이라고 배웠다. 그런데 식 (2)의 A앞에 S의 역행렬(Inverse matrix)이 곱해져 있는 것을 볼 수 있다. 이것이 의미하는 것은 무엇일까? 바로 S가 역행렬을 가질 수 있어야 하고, 이는 S가 특이 행렬(singular matrix)이 아니어야 함을 의미하며, 결국 A의 고유벡터들이 n개의 독립(independent)인 벡터를 가져야 한다는 것이다

 

일단 A가 n개의 독립인 고유벡터를 가진다고 가정할 때, 이 고유벡터들을 column vector의 형태로 차례로 붙여서 S를 만들었다고 해보자. 이때 A와 S를 곱하면 어떤 일이 벌어질까? 아래의 수식을 통해 확인해보자. 

 

 

식 (3)은 행렬 A와 그의 고유벡터(eigenvector)들로 만들어진 행렬 S와의 곱을 나타낸다. S에서 x1, x2, ... xn은 각 고유벡터들을 column 형태로 삽입한 것이다. A와 S를 곱할 때 지난 강의(행렬 곱셈) Lecture 3에서와 같이 column-wise로 생각할 수 있다. 즉 A와 S의 첫 번째 column vector x1과 곱해져서 Ax1이라는 하나의 column vector가 만들어지고, 차례로 Ax2, ... Axn이 계산되어 결과적으로 이들 Ax1, Ax2, 등의 column vector들로 이루어진 동일한 크기의 행렬이 만들어진다. 

 

그런데 가만히 보면 Ax1은 원래의 행렬 A와 그의 첫 번째 고유벡터와의 곱이다. 여기서 우리는 식 (1)을 떠올릴 수 있다. Ax1은  λ1x1이다. 따라서 (3.2)와 같이 쓸 수 있다. 결국 AS의 곱을 (3.2)와 같이 각 column vector들을 고유값과 고유벡터들의 곱으로 표현할 수 있으며, 이는 식 (1)의 개념으로부터 나온 것이다. 

 

최초에 AS의 곱을 (3.2)와 같이 표현하였다. 여기서 고유값들을 고유벡터로부터 한 번 더 분리하여 나타낼 수 있다. 이때 중요한 것은 (3.2)를 S와 고유값들과의 곱으로 분리할 때 행렬끼리의 곱으로 나타내고 싶다는 것이다. 어떻게 할 수 있을까? 다시 한 번 column-wise의 행렬곱을 생각해보자. S를 고유벡터행렬, 여기에 곱해질 어떤 행렬을 가령 V라고 생각해 봤을 때, Sv1이 (3.2)의 첫 번째 column vector인 λ1x1이 되어야한다. 이렇게 되기 위해선 v1의 첫 번째 component만 λ1이고 나머지 component들은 모두 0이어야 한다.  λ2x2가 되기 위해선 v2의 두 번째 component만 λ2이고 나머지는 0이어야 한다. 이런식으로 만든 행렬이 바로 (3.3)의 오른쪽 고유값(eigenvalue)들로 이루어진 행렬이고, 대각 행렬(diagonal matrix)의 형태이다. 우린 이 고유값들로 이루어진 행렬을 대문자 람다(capital lambda)를 써서 Λ라고 표현한다. (※ 일반적으로 대문자는 행렬을, 소문자 볼드체는 벡터를, 소문자는 벡터의 원소나 스칼라 값을 나타냄)

 

결과적으로 (3.1)에 표현된 최초의 AS의 행렬곱셈을 (3.3)과 같이 SΛ로 표현할 수 있으며 AS=SΛ이다. 이렇게 표현할 수 있는 근간에는 우리가 지금까지 공부해왔던 고유값/고유벡터에 대한 식 (1)이 있다. 즉 식 (3)은 식 (1)의 확장판이라고 생각하면 된다. 식 (3)에서 얻은 결론을 다시 써보면 아래의 식과 같다. 

 

 

식 (4)가 의미하는 것은 어떤 행렬 A에 고유벡터행렬 S를 곱하면, 고유벡터행렬에 고유값행렬을 곱한 것과 같다, 즉 식 (1)을 모든 고유값/고유벡터에 대해서 한번에 정리한 식이라고 할 수 있다. 결국 식 (1)로부터 (4)를 유도한 셈이다. 식 (4)로부터 우리는 다양한 식을 유도할 수 있다. 양변의 왼쪽에 S의 역행렬(inverse matrix)을 곱해보자. 

 

 

식 (4)의 양변의 왼쪽에 S의 역행렬을 곱했더니 우리가 처음에 핵심적인 식이라고 배웠던 식 (2)가 만들어졌다. 이 과정이 임의의 정방행렬 A를 대각화(diagonalization)하는 과정이다. 여기서 중요한 것은 양변에 S 역행렬을 곱했는데, 이것은 S가 역행렬을 가질 수 있어야 한다는 조건을 만족해야 하며, A가 n개의 독립인 고유벡터를 가져야 함을 의미한다. 지난 강의 Lecture 21-(2)의 마지막에 n개의 독립인 고유벡터(eigenvector)를 가지지 못하는 행렬(triangular matrix)에 대해서 알아봤다. 그러나 이러한 경우는 일부이며, 대부분의 행렬은 n개의 독립인 벡터를 가지기 때문에 여기서는 고유벡터행렬(eigenvector matrix)이 역행렬을 가질 수 있음을 가정하겠다. 

 

 

- Factorization of a matrix

 

우리는 식 (4)로부터 행렬 A를 대각화(diagonalization)하여 고유값들로만 이루어진 식 (2)와 같은 대각 행렬을 만들었다. 그런데 이런 고유값행렬(eigenvalue matrix)말고도 다른 형태의 행렬을 만들 수 있다. 식 (4)에서 양변의 좌측에 S의 역행렬을 곱했다면, 이번에는 양변의 우측에 역행렬을 곱하는 것이다. 아래 식을 보자. 

 

 

식 (5.1)로부터 양변의 우측에 S의 역행렬을 곱했더니 식 (5.2)와 같은 식을 만들어냈다. 즉 A를 고유벡터행렬(eigenvector matrix)인 S와 고유값행렬(eigenvalue matrix)인 Λ, 그리고 고유벡터행렬의 역행렬의 곱으로 정의한 것이다. 이는 결국 A를 이전에 공부했던 LU factorization(가우스 소거로부터 행렬을 분해하는 방법, Lecture 4), QR decomposition(그람 슈미트 정규 직교화 방법으로 행렬을 분해하는 방법, Lecture 17-(2))과 같이 행렬을 분해하는 하나의 방법이며, 고유값과 고유벡터들의 행렬의 조합으로 행렬을 인수 분해(factorization)하는 방법이다. 조합되는 방법이 S와 대각 행렬, 그리고 다시 S의 역행렬이 반복됨을 주목하자. 

 

 

- Useful attribute

 

이제 이 행렬이 얼마나 유용한 특성을 가지는지 알아보도록 하자. 우리가 어떤 문제를 풀때 선형대수를 이용하여 선형연립방정식을 세우고, 이를 반복적으로 곱해서 계산해야 할 때가 있다. 이런 경우 A를 제곱, 3제곱, ... n제곱 과 같은 식으로 반복해서 곱해야할 때가 있는데, 이렇게 반복하여 자기 자신을 곱해야할 때 대각화에 의한 행렬 분해가 굉장히 유용한 특성을 가진다. 먼저 이 분해가 고유값과 고유벡터 식으로부터 유도된 만큼 A를 제곱했을 때 고유값/고유벡터 식 (1)이 어떻게 변하는지 알아보자. 

 

 

식 (6.1)은 고유값/고유벡터 식이다. 여기서 A를 제곱했다는 것은 식 (6.1)의 양변의 좌측에 각각 행렬 A를 곱한 것과 같다. 이렇게 양변에 A를 곱하면 식 (6.2)가 만들어지는데, (6.2)에서 우변의 람다는 상수이기 때문에 앞으로 빼서 정리했다. 이때 (6.2)의 우변에서 Ax는 λx와 같기 때문에 바꿔서 써주면 λλx가 되고, 최종적으로 (6.3)과 같이 정리할 수 있다. 결국 고유값/고유벡터 식에서 A를 제곱하면 우변의 고유값(eigenvalue)인 람다(λ)가 제곱이 된다. 이때 고유벡터는 A의 제곱과는 무관하게 변함없이 그대로이다. 

 

식 (6)에서 단일 고유값/고유벡터 식의 A제곱에 대한 내용을 살펴봤으니 이번에는 고유값행렬과 고유벡터행렬에 대한 식 (5)를 가지고 A의 제곱을 하면 어떤 결과가 나오는지 살펴보자. 식 (5.2)의 A를 제곱한 결과는 아래 식과 같다. 

 

 

식 (7.1)의 A를 제곱하면 식 (7.2)의 밑줄 친 부분이 단위행렬(identity matrix)이 되어 소거(cancel)되고, 결국 (7.3)과 같이 고유값행렬인 Λ의 제곱이 된다. 이는 단일 고유값/고유벡터에 대한 A제곱식 (6)과 같은 꼴이며 다만 그 형태가 n개의 고유값/고유벡터에 대한 행렬의 형식인 것이다. (6)과 마찬가지로 A를 제곱해도 고유벡터행렬(eigenvector matrix)은 그대로 유지되며 고유값행렬(eigenvalue)만 제곱의 형태로 나타난다. 

 

그런데 제곱이 아니라 세제곱, 네제곱, k제곱을 한다면 어떻게 될까? 실제로 계산을 해보면 세제곱을 하는 경우 역시 중간의 고유벡터행렬들은 단위행렬로써 소거되고, 우변의 고유값행렬만 세제곱이 된다. 결과적으로 A가 k번의 거듭제곱(power)를 하는 경우, 우변에서 고유벡터행렬(eigenvector matrix)은 그대로 유지되고 고유값행렬(eigenvalue matrix)만이 k번의 거듭제곱이 일어난다는 일반적인 식을 도출할 수 있다. 아래의 식 (8)은 이러한 일반식을 나타낸다. 

 

 

식 (8)을 잘 곱씹어보면 다음과 같은 통찰력을 얻을 수 있다. 어떤 행렬 A의 고유값(eigenvalue)과 고유벡터(eigenvector)는 A의 k번의 거듭제곱을 이해하는데에 아주 좋은 방법을 제공해준다. 예를 들어 LU분해나 QR분해 등의 방법을 이용하여 행렬을 인수분해 했을 경우, A를 1000제곱하면 LU*LU*...를 1000번 수행한 행렬이나 QR*QR*...를 1000번 수행한 행렬을 가지고 A의 1000제곱이 어떤 결과를 보일지를 예측하거나 A가 어떤 행렬인지를 분석해야 한다. 이들 분해 방법으로는 거의 불가능하다. 그러나 고유값행렬과 고유벡터행렬로 분해한 식 (8)의 방법은 A의 1000제곱에 대해서 단지 고유값행렬(eigenvalue matrix)의 1000제곱만 분석하면 된다. 이마저도 고유값행렬의 1000제곱을 할 필요도 없이 각 고유값들의 제곱을 계산해도 된다. 

 

 

식 (9)는 고유값행렬의 제곱을 나타내며, 그 결과는 대각 원소들인 각 고유값들이 자기자신을 제곱한 것과 같은 것을 볼 수 있다. 따라서 A의 거듭제곱에 대한 계산이 훨씬 쉽고 효율적으로 진행된다. 

 

또한 행렬 A를 고유값행렬과 고유벡터행렬로 대각화(diagonolization)하면 A가 어떤 특성을 가지는지, 혹은 k번의 거듭제곱을 했을 때, 어떤 결과가 나올지를 대략 유추해 볼수도 있다. 가령 아래와 같은 조건을 갖출 경우, 우리는 행렬 A를 안정 행렬(stable matrix)라고 할 수 있다. 

 

 

식 (10)의 조건에 따르면 어떤 행렬 A의 모든 고유값의 절대값이 1보다 작을 때 A의 거듭제곱(power)을 지속해 나갈 수록 A는 0으로 수렴한다. 이때 A는 stable하다 라고 할 수 있다. 그 아래 예를 보면 행렬 A의 고유값은 각각 λ1=0.4172, λ2=0.9828인데 둘 다 절대값이 1보다 작다. 이때 A를 거듭제곱한 결과가 그 아래 나와있는데, A의 10제곱, 50제곱, 100제곱을 거듭 할수록 A의 원소의 값들이 점점 작아지는 것을 볼 수 있다. 결국 어떤 행렬의 고유값(eigenvalues)들의 상태를 보고 해당 행렬의 특성이나 거듭제곱을 무한대로 반복했을 때의 결과를 끝까지 해보지 않아도 예측할 수 있는 것이다. 

 

 

2. 대각화 가능한 행렬(Diagonalizable matrices)

 

- Which matrices are diagonalizable?

 

지금까지 우리는 어떤 행렬 A를 대각화(diagonolization)과정을 통해 고유값행렬(eigenvalue matrix)과 고유벡터행렬(eigenvalue matrix)로 분해한다면 A의 거듭제곱을 계산하는데에 있어 굉장히 유용한 특성이 있음을 배웠다. 다시 한 번 강조하지만 대각화(diagonalization)를 위해 가장 중요한것은 A가 n개의 독립(independent)인 고유값과 고유벡터를 가지고 있어야 이 모든 것이 성립한다는 것이다. 그렇다면 어떤 행렬들이 대각화가 가능할까? 바로 아래의 정의를 만족시키는 행렬들이 대각화 가능한(diagonalizable)행렬들이다. 

 

 



대각화 가능한(diagonalizable) 행렬의 조건:
    • 어떤 행렬 A의 고유값(lambda, λ)들이 전부 서로 다른 값을 가진다면, 즉 반복되는 고유값이 없다면, A는 반드시 n개의 독립인 고유벡터(eigenvectors)를 가지며 대각화가 가능하다(diagonalizable)

 

위의 노란 박스안에 정의된 조건을 만족하는 행렬은 대각화가 가능한 행렬이다. 위의 정의에 대한 증명이 궁금하다면 여기를 참조하기 바란다. 혹시나 위의 정의가 맞는지 의심이 들 수도 있기에 MATLAB을 이용하여 실험을 해보았다. MATLAB의 랜덤 함수 rand()를 이용하여 20x20크기의 랜덤값을 가진 행렬을 만들고, 고유값행렬(eigenvalue matrix)과 고유벡터행렬(eigenvector matrix)을 eig()함수를 이용하여 구한 다음 고유값행렬에서 같은 고유값이 존재하는지 확인한다. 그 다음으로 n개의 독립인 고유벡터를 가지는지 확인하기 위해 고유벡터행렬의 rank를 계산하여 n보다 작은지를 검사하여 그 횟수를 세는 간단한 프로그램이다. for문을 이용하여 1000번 반복하였다. 아래 그림은 MATLAB코드와 그 결과를 캡쳐한 화면이다. 

 

 

 

 

Fig. 1 MATLAB코드와 n개의 서로 다른 고유값 실험

 

실험 결과 1000번의 반복에도 단 한번의 카운트가 되지 않았음을 알 수 있다. 이는 결국 서로 다른 n개의 고유값을 가지면 n개의 독립(independent)인 고유벡터가 존재함을 실험적으로 보인 것이다. 물론 완벽한 증명법은 아니겠지만, 이미 수학적으로 증명된 정의를 실험을 통해 한 번 더 확인하는 과정이라고 생각해도 좋을것이다. 

 

 

- When A has repeated eigenvalues (positive case)

 

A가 만약 반복되는 고유값을 가진다면 무조건 n개의 독립인 벡터를 가질 수 없는 걸까? 반드시 그렇지는 않다. 다만 반복되는 고유값을 가진 경우, 좀 더 면밀히 살펴봐야한다. 즉 아래의 정의로 설명할 수 있다. 

 



    • A가 반복되는 고유값(eigenvalues, lambdas)을 가진 경우, A는 n개의 독립(independent)인 고유벡터(eigenvectors)를 가질 수도, 혹은 가지지 않을 수도 있다.  

 

 

그렇다면 어떤 행렬이 반복되는 고유값을 가져도 n개의 독립인 고유벡터를 가질까? 한 예가 바로 단위 행렬(identity matrix)이다. 아래 단위 행렬의 고유값/고유벡터 예를 보자. 

 

 

 

 

식 (11)에서 2x2크기의 단위 행렬의 2개의 고유값은 1로 반복되었다. 그런데 고유값이 반복되었음에도 불구하고 고유벡터는 2개의 독립인 고유벡터가 나왔다. 이는 단위행렬이 어떤 벡터를 곱하여 변형시켜도 자기 자신이 나오게 만드는 특성을 고려해보면 당연한 것이다. 이 단위 행렬을 식 (2)와 같이 대각화(diagonalization)를 하면 어떻게 되는지 살펴보자. 

 

 

 

식 (12)와 같이 대각화에 대한 식에도 성립하는 것을 알 수 있다. 사실 식 (11)에서 계산한 고유벡터 말고도 단위행렬에 대한 2차원 공간의 무수히 많은 고유벡터가 존재한다. 2x2 이외에도 nxn크기의 단위행렬의 경우에도 마찬가지로 모두 동일한 고유값을 가지지만, n개의 독립인 고유벡터가 존재한다. 결과적으로 단위 행렬의 경우 동일한 고유값을 가졌음에도 n개의 독립인 고유벡터가 존재하는 case이다. 

 

또 한 가지 예를 살펴보자. 두 번째로 살펴볼 예는 지난 강의 Lecture 21-(2)에서 살펴봤던 180도에 대한 회전행렬(rotation matrix)이다. 자세한 관련 내용은 전 강의를 참고하도록 하고, 식을 다시 써보면 다음과 같다. 

 

 

단위 행렬과 마찬가지로 고유값은 -1로 동일하게 두 번 반복됐지만, 고유벡터는 2개의 독립인 벡터가 존재함을 볼 수 있다. 지난 강의에서 봤겠지만 180도를 회전시키는 행렬의 경우 변환 전과 후의 벡터가 비록 방향은 완전히 반대로 바뀌지만 평행(parallel)하기 때문에 역시 무수히 많은 고유벡터들이 존재하게 된다. 

 

 

- When A has repeated eigenvalues (negative case)

 

이번엔 고유값이 반복되었을 때 n개의 독립인 고유벡터가 존재하지 않는 경우를 살펴보자. 사실 이 역시 지난 강의 Lecture 21-(2)에서 이미 본 적이 있는 행렬이다. 바로 삼각행렬(triangular matrix)이다. 아래 식을 보자. 

 

 

 

식 (14)의 행렬 A는 삼각행렬의 형태를 띄고 있으며, 고유값은 전부 2로 같다. 지난 강의에서 배웠듯이 삼각행렬은 대각 원소들이 곧 고유값이 됨을 기억하자. det(A-λI)를 계산할 때 아래쪽 원소들 값이 모두 0이기 때문에 반대편(cross) 대각 원소들은 방정식에 포함되지 않는다. 따라서 대각 원소들만이 방정식 계산에 포함되기 때문에 대각 원소들 값이 곧 고유값이 된다. 

 

고유벡터를 구해보면 식 (14)의 아래와 같이 되는데, 보다시피 한 개의 고유벡터만이 존재한다. (A-λI)의 null space인 고유벡터를 구할 때, 식을 만족시키기 위해서는 x2에는 어떤 값도 들어가서는 안된다. 따라서 무조건 0이 되어야 하고 x1에만 임의의 값을 넣을 수 있다. 그런데 이렇게 되면 x는 1차원 공간에 존재하게 되고, 결국 두 고유벡터가 같은 부분 공간에 존재하게 된다. 따라서 2x2행렬에서 단 1개의 고유벡터만 존재하게 된다. 이렇게 되면 n개의 독립인 고유벡터가 존재하지 않기 때문에 삼각행렬의 경우 대각화(diagonolization)가 불가능한 경우다. 

 

 

정리해보면 어떤 행렬 A가 n개의 서로 다른 고유값을 가지는 경우엔 A는 반드시 서로 다른 독립인 고유 벡터를 가지며, A는 대각화가 가능하다. 

반면 A가 어떤 반복되는 고유값을 가지는 경우엔 독립인 고유벡터를 가질 수도 있지만(단위 행렬, 회전 행렬), 그렇지 않을 경우도 존재한다(삼각 행렬)

 

 

 

3. 대각화와 차분방정식(Diagonalization and Difference Equation)

 

- Difference Equation

 

앞서 배운 대각화를 이용하면 방정식(equation)을 손쉽게 풀 수 있다. 지금껏 공부한 선형대수(Linear Algebra)가 선형연립방정식을 손쉽게 풀기 위함인데 갑자기 방정식이라니? 그냥 방정식이 아니라 우리나라말로 차분 방정식, 혹은 계차방정식이라 불리는 Difference equation이다. 계차방정식(difference equation)은 시간이 지남에 따라 상태가 변화하는 문제를 방정식으로 만들어놓은 것이다. 이를테면 바이러스가 1초마다 자기 자신을 둘로 분열시킨다고 했을 때, 처음 1마리가 1000초 후엔 몇 마리가 되어 있는가? 와 같은 문제들 말이다. 즉 방정식(equation)시간(time)과 그에 따른 미분(derivative)의 개념이 들어가 있는 것이다. 

 

여기서 어떤 사람은 "그렇다면 계차방정식이 결국 미분방정식(differential equation) 아닌가?"라고 생각할지도 모르겠다. 이 둘은 비슷해보이지만 약간 다르다. 둘 다 미분(derivative)이라는 개념이 들어가 있지만, 시간을 어떻게 보느냐에 따라 달라진다계차방정식(difference equation)은 시간을 정수단위로 끊어서 생각하는, 즉 이산적인(discrete)개념이고, 미분방정식(differential equation)은 시간을 끊어지지 않고 쭈욱 이어지는 개념, 즉 연속적인(continuous) 개념으로 생각하는 것이다. 아래 식은 똑같은 개념을 각각 계차방정식과 미분방정식의 방법으로 표현한 것이다. 

 

 

식 (15)에서 계차방정식(Difference equation)의 경우 a의 시간에 따른 변화를 n으로 표현하였다. n에 들어갈 수 있는 숫자는 오직 정수뿐이며 소수 등의 다른 숫자는 들어갈 수 없다. 계차방정식이 말하고자 하는 것은 a가 n일때를 기준으로 a의 이전 상태(n-1)는 a의 바로 앞의 상태(n+1)에서 현재 상태(n)를 뺀 값이 되며, 이것이 계속 반복된다는 것이다. n이 +1씩 변화할 때 그에 따라 a가 어떻게 변화는지를 보는 것, 즉 미분(derivative)을 이산적(discrete)으로 나타낸 것이다. n는 보통 시간이나 시퀀스(sequence)를 나타내는데 결국에는 시간(time)의 개념이 들어갈 수밖에 없다. 

 

반면 식 (15)의 우측의 미분방정식(differential equation)을 보면, 여기서 dx는 delta x를 의미하고 x의 변화를 의미한다. dy도 마찬가지로 delta y를 의미하는데, 이때 변화량을 의미하는 delta가 나타내는 그 "변화량"은 무한대로 작은 값을 의미한다. 즉 상상하기 힘들 정도로 아주 찰나의 순간을 의미하며, 결국 이 변화량은 끊어지지 않고 연속적인(continuous) 개념이 된다. dx는 시간일수도 있고 혹은 다른 물리량을 의미할 수도 있다. 여기서는 일단 시간으로 생각해보자. dy는 dx, 즉 x가 아주 찰나의 순간의 변화가 발생했을 때 y가 얼마만큼 변하는지를 나타내며, dy/dx의 나눗셈을 했기 때문에 결국 x가 변화했을 때 y가 얼만큼 변하는지에 대한 비율(ratio)을 의미하게 된다. 계차방정식(difference equation)과의 관계를 살펴보면 x는 n과 관련이 있고, y는 a와 관련이 있다. 식 (15)는 미분에 대한 똑같은 내용을 계차방정식과 미분방정식으로 각각 다르게 표현한 것이다. 

 

사실 현실세계의 문제는 미분방정식이지만, 이를 인간이 보다 이해하기 쉽고 무엇보다도 컴퓨터가 계산하기 좋게 만든 것이 계차방정식이다. 계차방정식도 n과 n+1사이의 간격(or 주기 등)이 짧으면 짧을수록 미분방정식에 가깝게 된다. 

 

 

다시 선형대수 문제로 돌아와서, 우리가 어떤 순서나 시간의 개념이 들어가있는 계차방정식(difference equation)을 선형대수를 이용하여 푼다고 가정해보자. 시간의 개념이 있기때문에 분명 초기값(initial value or initial condition)이라는 것이 존재할 것이다. 이 방정식을 u에 대한 계차방정식이라고 했을 때, 식은 아래와 같다. 

 

 

식 (16)은 u에 대한 계차방정식이며 k번째 u를 시스템 A를 통해 계산했을 때 k+1번째 u의 값을 계산하는 방정식이다. 여기서 u가 순차적으로 변화한다고 했을 때 어느 타이밍 혹은 어느 순서에서 어떤 값이 나올지를 계산하기 위함이므로 u는 초기값 u0상태에서 시작한다. 이를 실제 문제에 빗대어 설명하자면 어느 도시의 인구 증가율을 A라는 방정식으로 만들고, u0가 도시의 초기 인구, k를 초기 년도로부터 몇년 이후의 년도인지를 나타내는 인덱스라고 하자. uk는 도시의 초기 인구 u0로 부터 k년도가 지났을 시점의 인구의 값이다. 이와 같은 문제를 계차방정식(difference equation)으로 표현하면 아래의 식과 같다. 

 

 

식 (17.1)을 보면 초기값 u0에서 A라는 방정식을 통해 u의 다음 시점의 변화된 값 u1을 계산할 수 있다. u1은 다시 A를 통해 그 다음 시점의 값 u2가 되고, k번째 u의 값 uk는 A를 통해 그 다음 차례의 u값인 uk+1이 된다. 그런데 u2를 계산할 때를 보면 u1을 A에 곱하여 계산하는데, u1은 Au0이다. 따라서 식 (17.1)의 u1을 Au0로 치환시켜주면 u2=AAu0가 되고, 결국 A가 2번 거듭제곱 된 형태이다. 이 식을 일반적으로 쓰면 u의 k번째 값 uk를 계산하기 위해선 u0를 A의 k번째 거듭제곱식에 곱해주면 된다. 결국 식 (17.2)의 상자속 식과 같은 일반적인 식이 도출된다. 이 식이 바로 계차방정식(difference equation)을 나타내며, 1차 시스템(first order system)이다. 위의 식이 1차(first order)인 이유는 식 (17.1)과 같이 k에서 k+1로 딱 한 단계만을 연결시키기 때문이고, 시스템(system)이라고 부를 수 있는 것은 우리가 구하고자 하는 미지수(unknown) 단일 숫자가 아닌 벡터(vector)이기 때문이다. 

 

 

- Real solution of difference equation

 

결국 우리는 식 (17.2)의 상자속 식을 통해 u의 100번째, 혹은 1000번째 값을 u의 초기값 u0에 A의 거듭제곱을 곱해서 쉽게 구할 수 있다. 사실 A행렬을 직접 100번 곱해서 u100을 구할 수도 있지만, 앞서 배운 행렬의 대각화(diagonolization)를 이용하면 이 계차방정식을 진짜로 풀 수 있다. 여기서 진짜로 풀 수 있다는 의미는 이 계차방정식에서 k가 커질수록 미지수의 값이 얼마만큼 증가하고 감소하는지 그 증가폭을 알 수 있다는 것이다. 즉 이 계차방정식의 Dynamics를 아는 것이 우리가 구하고자 하는 진정한 해답이고 이를 대각화를 통해 알 수 있다. 단순히 A만 거듭해서 곱해서는 이 시스템에 대한 자세한 정보를 알 수 없다. 이제 계차방정식에 대한 진정한 해를 어떻게 구하는지 알아보자. 

 

우선 주어진 방정식은 초기값 u0가 주어진다. 계차방정식을 진짜로 푸는 과정은 이 초기값인 u0 벡터를 행렬 A의 고유벡터들의 선형 결합(Linear combination)으로 표현하는 것으로부터 시작한다. 아래 식을 보자. 

 

 

식 (18)은 초기값 벡터 u0를 행렬 A의 고유벡터(eigenvectors)들의 선형 결합으로 표현한 것이다(x는 고유벡터, c는 상수). 이를 행렬의 곱 형태로 나타내면 고유벡터행렬(eigenvector matrix)인 S와 상수값 벡터인 c와의 곱인 u0=Sc로 나타낼 수 있다. 그런데 u0는 A의 고유벡터들의 선형 결합으로 표현이 가능한가? 정답은 Yes이다. 단 A가 n개의 독립(independent)인 고유벡터를 가지고 있다는 전제가 있어야 한다. n개의 독립인 고유벡터는 n차원 공간인 Rn의 기저(basis)를 형성하기 때문이다. 따라서 u0는 어떤 값이던 Rn공간내에 존재하기 때문에 A의 고유벡터들의 선형결합으로 표현이 가능한다. 

 

이제 식 (18)의 u0에 행렬 A를 곱하면 어떻게 정리가 되는지 살펴보자. 

 

 

식 (18)의 u0에 행렬 A를 곱하면 (19)와 같이 각각의 분리된 파트에 A가 곱해지는 것과 같다. c는 상수이므로 앞으로 빼서 정리하면 (19.1)처럼 정리할 수 있다. 여기서 각 파트는 cAx의 형태가 되는데, Ax는 고유값/고유벡터 식 (1)에 의해 (19.2)와 같이 λx로 바꿔서 정리할 수 있다. 결국 초기값 u0를 A를 통해 변환시킨 결과를 식 (19)와 같이 고유값과 고유벡터의 선형결합으로 나타냈다. 그러나 우리가 알고자하는 것은 A를 지속적으로 곱했을 때의 결과, 즉 예를 들면 A의 100제곱을 하면 초기값 u0가 어떻게 변화하는지, 그 변화의 정도는 얼마만큼인지 등이다. 식 (19)에서 A의 100제곱을 했을 때 식이 어떻게 되는지 살펴보자. 

 

 

우선 식 (19)에서 A를 한 번 더 곱하면 상수인 c와 λ를 앞으로 빼서 정리하여 (20.1)과 같이 만들 수 있다. 다시 고유값/고유벡터 식을 통해 치환하여 정리하면 식 (20.2)와 같이 되고, 이는 A를 제곱한 수 만큼 각 파트의 람다값이 제곱되는 꼴이 된다. A의 100제곱은 식 (20.3)과 같이 각 파트의 고유값인 람다(lambda)가 100제곱이 되고 이들의 조합으로 정리할 수 있다. 

 

다음으로 식 (20.3)을 앞서 배웠던 행렬의 대각화(diagonalization)방법을 통해 정리해보자. 행렬 A를 대각화하고 u0를 Sc로 나타내면 가운데 S행렬이 단위행렬이 되어 소거되고 식 (20.4)와 같이 정리가 된다. 이를 행렬(matrix)의 형태로 나타낸 것이 식 (20.5)이며, 이 식을 정리하면 (20.3)과 같은 결과가 나오는 것을 알 수 있다. 이를 통해 우리는 초기값 u0가 어떤 방정식 시스템 A에 의해 100번 변환된 결과인 u100을 고유값과 고유벡터로 풀 수 있다. 결과적으로 초기값 u0를 A의 k거듭제곱번 변화시킨 계차방정식(difference equation)은 고유벡터행렬(eigenvector matrix)과 고유값 행렬(eigenvalue matrix)의 k거듭제곱, 그리고 상수벡터 c의 곱으로 식 (20.6)과 같이 정리할 수 있다. 

 

정리해보면 어떤 계차방정식을 제대로 푼다는 것은 이를 고유값과 고유벡터로 풀어내는 것을 의미하며, 여기서 중요한 것은 고유값을 통해 우리는 이 계차방정식의 변화의 추이를 가늠해볼 수 있다는 것이다. 이는 단순히 A를 k번 거듭제곱하여 결과값만을 도출하는 것과는 달리 해당 시스템의 특성을 정확하게 파악하는데에 그 의의가 있다고 볼 수 있다. 다음 section에서 실제 예를 통해 이에 대한 이해를 높여보자. 

 

 

4. 대각화의 응용(Application of the Diagonalization)

 

- Fibonacci number

 

대각화(diagonalization)를 피보나치 수열(Fibonacci sequence)에 응용해보도록 하자. 피보나치 수열은 맨 처음 0과 1로 시작해서 다음 숫자는 앞의 숫자 두 개의 합이 되는 규칙을 가지고 있다. 

 

 

식 (21)은 피보나치 수열을 나타내며 F1, F2는 피보나치 수열에서 각 원소의 인덱스를 나타낸다. 여기서 우리가 알고자하는 것은 이런식으로 수열이 지속적으로 증가할 때 F100번째 값은 무엇인지, 그리고 얼마나 빠르게 값이 증가하는지 이다. 피보나치 수열은 보다시피 F1, F2, ... 와 같이 순서가 더해질 수록 값이 증가하는 체제이다. 이와 같이 시간이나 순서에 따라 특정 규칙으로 값이 변화하는 체제를 우리는 앞서 배웠던 계차방정식(Difference equation)으로 만들 수 있고, 대각화를 통해 고유값과 고유벡터들의 조합으로 표현할 수 있다. 피보나치 수열을 계차방정식으로 만들면 특정 인덱스에서의 값이 무엇인지 알 수 있고, 고유값을 통해 이 계차방정식의 증가/감소 폭이 얼마나 되는지 알 수 있다. 이제 피보나치 수열의 계차방정식을 만들어보자. 

 

피보나치 수열의 규칙은 다음과 같이 정리할 수 있다. 

 

 

식 (22)와 같이 Fk+2는 이전의 두 개의 값 Fk+1과 Fk의 합으로 나타낼 수 있다. 이제 이 수식을 식 (17.1)과 같이 선형계차방정식(Linear Difference Equation)으로 만들어보자. 그런데 두 가지 문제가 있다. 일단 현재로썬 식이 (22) 하나뿐이다. 어떤 시스템이 되기 위해선 식이 두 개 이상 존재해야 하고, 해(solution)도 벡터로써 존재해야 한다. 또 하나의 문제는 식 (22)가 2차미분방정식(second-order differential equation)과 같다는 것이다(여기서 식 자체는 계차방정식으로 표현함). 식을 보면 Fk가 두 단계 이후의 Fk+2와 연결되어 있고 영향을 미치게 된다. 따라서 k가 두 번에 걸쳐 변화할 때 그 값에 대한 변화가 어떻게 이루어지는지 보기 때문에 이차미분과 같다. 식 (17.1)과 같이 1차식의 시스템으로 만들기 위해선 약간의 트릭이 필요하다. 먼저 시스템의 입력값인 uk가 필요한데, 벡터형태여야 한다. 이 문제에서 uk벡터는 어떤식으로 만들어야 할까? 

 

피보나치 수열을 정의한 식 (22)를 보면 Fk+2라는 결과값은 Fk+1 + Fk의 이전 두 개의 입력값으로 정의되어 있다. 즉 입력값은 Fk+1과 Fk가 될 것이고 이들을 uk벡터로 정의하면 될 것이다. 또한 식 (17.1)과 같이 1차 시스템이 되기 위해선 어떤 선형시스템 A에 uk를 곱했을 때 uk+1이 나와야한다. 즉 uk+1은 uk의 원소들인 Fk+1과 Fk가 각각 한 단계씩 더 나아간 상태, 즉 Fk+2와 Fk+1이 될 것이다. 이를 식으로 정리하면 아래와 같다. 

 

 

uk와 uk+1를 만들었으니 다음 단계는 시스템 행렬 A를 만드는 것이다. 우리가 현재 하고 있는 작업은 단일 방정식으로 구성된 2차 미분방정식 (22)를 1차 선형계차방정식으로 만드는 것이다. 따라서 식 (22)의 내용이 그대로 반영이 된 1차 시스템식이 나와야 한다. 그렇다면 식 (23)의 uk를 곱했을 때 uk+1이 되면서 식 (22)의 내용이 반영되기 위해선 시스템 A가 어떻게 구성되어야 할까? 아래의 식을 보자. 

 

 

식 (24.1)이 피보나치 수열의 시스템 방정식(system equation)이다. 첫 번째 줄은 식 (22)와 동일하고 두 번째 줄은 1차식으로 만들기 위한 트릭이다. (24.1)의 좌변이 결국 uk+1이 되는 것을 볼 수 있다. 우변의 식들은 미지수(unknown) uk가 어떤 시스템 행렬 A에 곱해져서 만들어지는 행렬인데, 이와 같은 식이 되기 위해서는 식 (24.2)의 A와 같은 식이 만들어지면 된다. 

 

이렇게 하여 우리는 단일 식으로 구성된 2차 미분방정식의 꼴인 피보나치 수열 문제를 1차 시스템으로 바꾸었다. 이제 다음으로 할 일은 이 1차 선형방정식을 풀기 위해 식 (20.6)과 같이 고유값과 고유벡터로 표현하는 것이다. 먼저 행렬 A의 고유값과 고유벡터를 구해보자. 

 

 

우선 식 (25.1)의 행렬 A를 보면 대각 행렬(diagonal matrix)형태인 것을 알 수 있다. Lecture 21-(2)에서 배웠듯이 대각 행렬의 고유값은 허수(imaginary number)가 아닌 실수(real number)가 나온다. 또한 trace A가 고유값들의 합과 같은 규칙을 통해 고유값들의 합이 1이 된다는 것을 알 수 있고, det A가 고유값들의 곱과 같다는 규칙을 통해 고유값들의 곱이 -1이 됨을 알 수 있다. 실제로 식 (25.2)와 같이 고유값을 계산하여 더하고 곱해보면 trace A=1, det A=-1와 각각 같음을 알 수 있다. 

 

여기서 한 가지 주목할 점은 (25.1)의 고유값에 대한 2차식이다. 이 고유값의 방정식은 피보나치 수열의 계차방정식 행렬 A를 통해 만든 것이고, 행렬 A는 피보나치 수열의 규칙을 나타내는 식 (22)에 약간의 트릭을 써서 1차식으로 만든 것이다. 결국 최초의 2차 미분 방정식 (22)로부터 만들어온 것인데, 실제로 고유값에 대한 식을 구해보니 이 최초의 식과 같은 양상을 보인다. 

 

 

결국 행렬 A의 고유값에 대한 det(A-λI)는 A의 특성방정식(characteristic equation)을 만들어내고, 이 특성방정식은 해당 행렬이 수행하는 어떤 작업에 대한 특성을 나타내는 식이 된다. 최초의 피보나치 수열에 대한 식 (22)의 형태가 행렬 A의 특성방정식으로 고스란히 드러남을 통해 이러한 사실을 알 수 있다

 

이렇게 하여 식 (25.2)와 같이 2x2행렬 A에 대한 2개의 고유값을 구했다. 첫 번재 고유값 λ1은 1보다 크고, λ2는 1보다 작다. 이와 같이 2개의 고유값이 서로 다르기 때문에 A는 2개의 독립인 고유벡터가 존재하며, 대각화(diagonalization)가 가능하다

 

 

이제 처음에 가졌던 질문을 다시 생각해보자. 피보나치 수열은 계속 증가하는 함수이다. 그렇다면 얼마나 빠르게 증가하는가? 그리고 임의의 순서의 수열의 값, 예를 들어 F100의 값은 얼마가 되는가? 첫 번째 질문에 대한 답은 고유값에 있다. 얼마나 빠르게 증가하는지, 즉 피보나치 수열의 Dynamics는 고유값(eigenvalue)에 있다. 두 번째 질문에 대한 답은 앞서 정리했던 식 (17.2)를 활용하면 된다. 식 (17.2)를 다시 고유값과 고유벡터에 대한 식 (20.3)으로 분리하면 아래의 식과 같이 정리할 수 있다. 

 

 

F100의 값은 초기값 u0에 A의 100제곱을 곱한 u100을 구하는 것과 같다. 이 식은 (27.2)와 같이 고유값과 고유벡터들의 선형 조합으로 정리할 수 있고, 실제 고유값을 넣어서 (27.3)과 같이 정리할 수 있다. 이때 두 번째 고유값인 λ2는 1보다 작은 수이기 때문에 거듭제곱을 할 수록 0으로 수렴하여 실제로 F100에 미치는 영향은 0으로 봐도 무방하다. 따라서 (27.3)의 첫 번째 term만 고려해도 된다. 결국 위의 식에서 피보나치 수열의 값의 증가를 제어하는 요소는 고유값이고, 그 중에서도 1보다 큰 첫 번째 고유값이다. 이제 식을 완성시키기 위해 고유벡터(eigenvector)를 구해보자. 

 

 

기존에 고유벡터를 구하던 방법과 같이 각 고유값을 대입하고 가우스소거를 한 다음, free variable에 1을 설정하여 고유벡터를 구할 수도 있으나, 고유값을 뺀 행렬이 특이 행렬(singular matrix)이고, 곱한 결과가 영벡터가 되야 함을 염두해 봤을 때 고유벡터는 x=[λ 1]T임을 유추할 수 있다. 이때 식 (28.2)의 row1의 식은 식 (25.1)의 특성방정식이다. 고유벡터의 식에 고유값인 λ1, λ2를 각각 대입하면 (28.3)과 같이 고유벡터를 구할 수 있다. 

 

마지막으로 구할 파라미터는 계수값 c1과 c2이다. 이 둘은 아래의 식으로부터 구할 수 있다. 

 

 

먼저 우리가 이미 알고있는 초기값 u0를 구하는 계차방정식을 세운 다음, 이를 고유값과 고유벡터에 관한 식으로 정리한다. 초기값을 구하는 계차방정식은 행렬 A가 0제곱이기 때문에 식 (29.2)와 같이 고유값도 역시 0제곱이 되어 사라지고 u0=c1x1+c2x2만 남게 된다. 이를 (29.3)과 같이 고유벡터행렬(eigenvector matrix) S와 계수 벡터(coefficient vector) c의 곱으로 나타낼 수 있다. 이제 식 (29.3)을 가우스소거법(Gauss Elimination)으로 풀면 계수벡터 c를 구할 수 있다. S행렬의 소거 과정과 c의 값을 구하는 과정은 아래 식과 같다. 

 

 

식 (30.1)에서 S의 첫 번째 pivot원소가 있는 row1에 역수를 곱해 1을 만들어 주고, row2에서 row1빼주면 (30.2)와 같이 정리가 된다. 이때 식에 루트가 있기 때문에 계산 과정에서 분모의 유리화(Rationalization)를 해준다. 소거된 식으로부터 후방대입법(back-substitution)을 통해 c1과 c2를 각각 계산할 수 있다. 

 

필요한 파라미터들인 c, xλ들을 다 구했기 때문에 식 (27.3)에 이 값들을 대입하여 피보나치 수열의 100번째 값인 F100에 대한 값을 행렬 A를 100번 제곱하지 않아도 고유값의 100제곱을 통해 계산할 수 있다. 또한 고유값을 통해 해당 시스템(피보나치 수열)이 얼마나 빠르게 증가하는지를 파악할 수 있다.  

 

 

5. 마치며

 

이번 강좌에선 행렬의 대각화(diagonalization)에 대해 공부하였다. 대각화의 핵심엔 고유값(eigenvalue)과 고유벡터(eigenvector)가 있으며, 어떤 행렬을 고유값행렬(eigenvalue matrix)과 고유벡터행렬(eigenvalue matrix)로 분해하여 표현하는 방법이다. 대각화를 통해 어떤 반복적인 행렬곱셈(Matrix multiplication)을 해야 하는 문제를 훨씬 적은 계산량으로 효과적으로 풀 수 있으며, 이를 활용해 계차방정식(difference equation)의 형태로 정리한 피보나치 수열 문제를 해결하였다. 중요한것은 대각화를 통해 고유값/고유벡터로 분해하여 문제를 해결한다면 그 시스템 A에 대한 Dynamics를 파악할 수 있다는 것이다. 행렬 A의 거듭제곱(power)이 지속될 수록 얼마만큼 빠르게, 혹은 느리게 값이 증가 혹은 감소하는지에 대해서 분석할 수 있다. 

또한 행렬의 대각화는 다음 포스팅에서 다룰 미분방정식(differential equation)을 푸는 중요한 방법이 되므로 잘 공부하도록 하자. 

 

지난 강의 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)등 다양한 분야에 응용된다. 

 

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

 

이번 강의는 행렬식(Determinant)에 관한 마지막 강의다. 이번에 알아볼 내용은 determinant가 기하학적(geometrical)으로 어떤 의미를 갖는지에 대해서 알아볼 것이다. 미리 결론부터 언급하자면 행렬식(determinant)은 기하학적으로 부피(Volume)와 관련이 있다. 즉 2D에서는 넓이를, 3D에서는 부피를 각각 의미한다. 그러나 4차원 이상의 공간은 우리의 상상력을 필요로 하기 때문에 여기서는 2차원과 3차원 행렬에 대해서만 알아볼 것이다. 그 이상의 차원에 대해서는 여러분의 상상에 맡기도록 하겠다. determinant가 공간에서 어떤 의미를 갖는지, 또한 부호는 어떤 것을 의미하는지를 알아보도록 하자. 

 

 

1. 행렬식과 넓이(Determinant and Area)

 

- Area of parallelogram by determinant

 

앞서 언급했듯이 행렬식(Determinant)은 기하학적으로 부피(Volume)와 관련이 있다. determinant가 부피 그 자체이다. 넓게 보면 어떤 상자의 부피가 되지만, 2차원 공간에서는 두 row벡터로 형성되는 평행사변형(parallelogram) 넓이(area)로 표현된다. 정의는 아래와 같다. 

 

 

일단 바로 예를 들어보도록 하겠다. 다음의 2x2크기의 행렬 A를 보자. 

 

 

평행사변형(parallelogram)은 행렬 A의 row 벡터들을 이용하여 정의할 수 있다. 즉 row1이 벡터 v1이고 row2가 벡터 v2라고 생각하면 된다. 반대로 어떤 두 벡터 v1과 v2가 있을 때, 이를 행렬로 만든 것으로 생각해도 될 것 같다. 어쨋든 행렬 A의 row 벡터들을 이용하여 평행사변형을 표현하면 아래와 같다. 

 

Fig. 1 행렬 A의 row벡터들로 형성된 평행사변형(parallelogram)

 

 

Fig. 1의 빨간색 벡터는 행렬 A의 row1, 녹색 벡터는 row2이고, 이 두 벡터의 덧셈과 함께 형성되는 영역, 즉 그림에서 노란색 영역이 바로 두 벡터로 형성되는 평행사변형의 영역이다. 이때 노란색 평행사변형의 넓이는 바로 행렬 A의 determinant와 같다. determinant는 ad-bc=12-2=10이고, Fig.1 의 평행사변형의 넓이는 10인 것을 알 수 있다. 

 

 

 

- Proof 

 

그런데 식 (3)의 determinant가 정말 저 평행사변형의 넓이가 맞을까? 하는 의문이 드는 사람도 있을 것이다. 넓이가 정말 10이 맞는지 평행사변형 공식을 이용해 한 번 증명해보자. 일단 평행사변형의 넓이 공식은? (밑변) x (높이)다. Fig. 1에서 밑변은 v1벡터의 크기가 될 것이고, 높이는 v2에서 v1으로 수직으로 연결한 선이 될 것이다. 

 

Fig. 2 평행사변형의 높이와 넓이 계산

 

Fig. 2의 평행사변형의 높이 $l$은 벡터 v2를 v1에 투영시켰을 때 나오는 투영 벡터인 p를 v2에서 뺀 error벡터와 같다. 이는 Lecture 15-(2)에서 배웠던 투영(projection)을 통해 $l$을 계산하는 방법이다. 그러나 이번엔 간단하게 삼각함수를 이용하여 구해보도록 하자. $l$은 v2의 크기에 v1과 v2의 사잇각의 sin값을 곱해주면 된다. 그러나 여기서 v1과 v2의 벡터 좌표만 알고 두 벡터 사이의 각도는 알려져 있지 않다. 그러나 두 벡터의 내적(dot product)을 통해 사잇각을 구할 수 있다. 이와 관련된 내용은 앞서 언급했던 Lecture 15-(2)에 나타나있지만, 한 번 더 써보도록 하자. 

 

 

 

식 (4)을 보면 내적(dot product)공식을 이용해 두 벡터 v1과 v2사이의 각도 $\theta$를 알아냈다. 그리고 알아낸 

$\theta$와 v2의 크기, 그리고 삼각함수를 통해 평행사변형의 높이 $l$을 알아냈다. 이제 평행사변형의 밑변인 ||v1||과 곱해보자. 

 

 

계산 결과 평행사변형의 넓이는 10이다. 우리는 이미 식 (3)에서 행렬 A의 determinant를 통해 Fig. 1과 Fig. 2에서 보인 평행사변형의 넓이를 구하였고, 그 결과는 10이었다. 이는 삼각함수를 통해 계산한 결과와 같음을 알 수 있다. 결과적으로 아래와 같은 정의를 할 수 있다. 

 

 
임의의 2차원 정방행렬(square matrix) A의 행렬식(determinant)은 A의 row벡터들로 형성되는 평행사변형(parallelogram)의 넓이(area)와 같다. 
 


결과적으로 우리는 임의의 (직)사각형 (or 평행사변형)의 코너에 대한 좌표(coordinate)만 알면, determinant라는 훌륭한 공식을 통해 넓이를 간단히 구할 수 있다

 

 

- Area of triangle

 

위의 식 (6)의 정의를 응용하여 삼각형의 넓이도 간단히 구할 수 있다. 아래 그림을 보자. 

 

Fig. 3 평행사변형의 절반의 넓이인 삼각형

 

 

Fig. 3의 노란색 삼각형의 넓이는 평행사변형의 넓이의 정확히 절반에 해당하기 때문에 간단히 determinant에 1/2를 곱해주면 된다. 결과적으로 Fig. 3의 노란색 삼각형의 넓이는 5임을 알 수 있다. 

 

 

 

그런데 만약 삼각형이 원점으로부터 떨어져 있는 경우엔 어떻게 구할 수 있을까? 알다시피 삼각형은 세 개의 꼭지점을 가지고 있고, Fig. 3의 삼각형은 3개의 꼭지점 중에 첫 번째 점이 원점(0,0)에 있다고 볼 수 있다. 이 첫 번째 점이 원점이 아닌 (1,2)에 존재한다고 생각해보자. 아래 그림은 Fig. 3의 삼각형을 원점으로부터 [1, 2]만큼 떨어뜨린 것으로 생각하면 된다. 

 

Fig. 4 원점으로부터 떨어져있는 삼각형

 

 

Fig. 4의 삼각형은 첫 번째 꼭지점이 원점이 아니라 원점으로부터 (1, 2)만큼 떨어져 있다. 이 경우엔 삼각형의 넓이를 어떻게 구할 수 있을까? 일단 각 꼭지점은 원점으로부터의 벡터들로 볼 수 있다. v1, v2, v3가 바로 그것이다. 여기서 삼각형의 각 변의 길이인 a, b, c를 알 수 있다면, 헤론의 공식(Heron's formula)등을 이용하여 삼각형의 넓이는 어렵지 않게 구할 수 있다. 여기서 Fig. 4의 a, b, c는 아래와 같이 각 벡터의 뺄셈의 크기와 같다. 

 

 

 

헤론의 공식을 이용하면...

 

 

 

 

계산 결과 삼각형의 넓이는 5가 되고, 식(7)의 결과와 같은 것을 볼 수 있다. 

 

답을 구하긴 했지만 계산량이 너무 많다. 좀 더 간단하게 구할 수 있는 방법이 없을까? 당연히 있다. 방법은 바로 v1의 위치에 해당하는 꼭지점을 원점으로 끌고 온 뒤, 평행사변형의 넓이를 구하여 1/2를 곱해주는 것이다. 어떻게 끌고올 수 있을까? 벡터 뺄셈을 통해 간단히 끌고올 수 있다. v2-v1의 벡터와 v3-v1의 벡터가 각각 Fig. 3의 v1과 v2이다. 실제로 계산을 해봐도 같은 결과가 나옴을 알 수 있다. v2-v1=[5 3]-[1 2]=[4 1], v3-v1=[3 5]-[1 2]=[2 3]이다. 이들의 determinant를 구하면 평행사변형(parallelogram)의 넓이가 나오고, 1/2를 곱해주면 삼각형의 넓이가 나온다. 결론적으로 원점에서 떨어진 삼각형의 넓이는 벡터 뺄셈을 통해 첫 번째 꼭지점을 원점으로 끌고온 뒤, determinant의 계산을 통해 구한 평행사변형의 넓이에 1/2를 곱하여 계산할 수 있다

 

혹은 세 꼭지점을 나타내는 벡터들을 이용하여 아래와 같이 행렬에 대한 식을 세운 뒤 determinant를 계산하여 원점으로부터 떨어진 삼각형의 넓이를 계산할 수도 있다. 아래 식은 Fig. 4의 삼각형의 꼭지점들로 만든 행렬이다. 

 

 

 

식 (10)의 행렬 A는 각 row 벡터들이 원점으로부터 떨어진 삼각형의 3개의 꼭지점들로 이루어져 있다. 여기에 각 row 벡터의 마지막에 1을 붙여서 3x3행렬을 만들어준다. 그 다음 row1를 제외한 나머지 row 벡터에서 row1을 빼서 마지막 원소들을 0으로 만들어준다. 식 (10)의 우측의 A'은 각 row 벡터에서 row1을 빼서 만든 행렬이다. 다음으로 A'의 determinant를 계산하고 2로 나누어주면 삼각형의 넓이가 나온다. 

 

 

식 (9)에서 헤론의 공식을 이용한 방법보다 훨씬 간단하게 넓이를 계산했다. 식 (10)에서 삼각형의 꼭지점을 이용해 행렬을 만들 때 1을 붙인 이유는 넓이를 determinant의 계산을 통해 풀기 위함이다. 이렇게 하여 determinant를 통해 삼각형의 넓이를 구할 수 있었다

 

 

- Sign of Determinant

 

우리는 앞서 2x2크기의 정방행렬의 행렬식(determinant)이 row벡터들로 이루어지는 평행사변형의 넓이임을 알았다. 그런데 어떤 determinant는 부호가 +인 반면, 어떤 것은 -를 가진다. 넓이가 -값을 가진 다는 것이 언뜻 이해가 가지 않을 것이다. 그렇다면 determinant에서 부호가 의미하는 것은 무엇일까? 아래 그림을 보자. 

 

Fig. 5 determinant의 부호에 따른 좌표계. [Left] determinant의 부호가 +일 때 Right-handed. [Right] determinant의 부호가 -일 때 Left-handed

 

 

determinant의 부호는 volume의 좌표계를 결정짓는다. determinant의 부호가 +일 때 평행사변형은(혹은 사각형, 3차원에선 box) 오른손 좌표계(Right-handed)를, 부호가 -일 때 왼손 좌표계(Left-handed)가 된다

Fig. 5은 determinant의 부호에 따른 좌표계의 변화를 나타낸다. 왼쪽은 기존의 A행렬에 대한 평행사변형을 나타낸다. 이때의 determinant는 10이고 +부호를 가지기 때문에 평행사변형이 오른손 좌표계로 형성됨을 볼 수 있다. 반면 오른쪽은 기존 행렬 A의 row1의 4를 -4로 만들어주었으며, 이때의 determinant는 -4*3-2=-14가 된다. 부호가 -이기 때문에 왼손 좌표계가 됨을 볼 수 있다. 좌표계는 3차원에서 z축을 결정하기 때문에 중요하다. Fig. 5의 왼쪽의 오른손 좌표계는 z축이 화면에서 나오는 쪽으로 형성되고, 오른쪽 그림도 오른손 좌표계였다면 화면에서 들어가는 쪽으로 z축이 형성이 되겠지만, 왼손 좌표계이기 때문에 역시 화면에서 나오는 쪽으로 형성된다. 좌표계는 3차원 행렬에 대한 determinant를 설명할 때 다시 보도록 하겠다. 

 

 

- MATLAB Implementation

 

아래 그림은 MATLAB 구현 코드와 Plot 결과이다. 변수나 row 벡터들의 부호 등을 바꿔가며 테스트 해보길 바란다. 한 가지 더 알아둘 것은 우리는 지금까지 행렬 A의 row벡터들을 평행사변형의 정점으로 하여 넓이를 구하였다. 그렇다면 column 벡터는 정점이 안되는걸까? 물론 가능하다. MATLAB코드의 처음 부분에 주석 처리된 transpose코드 A=A'를 주석 해제하고 프로그램을 돌려보면 된다. 물론 모양은 약간 달라지겠지만, 그 넓이는 같다

 

Fig. 6 MATLAB Plot 결과

 

 

 

 

 

2. 행렬식과 부피(Determinant and Volume)

 

- Volume of a box by determinant

 

첫 번째 섹션에서는 2차원 공간에서 평행사변형(parallelogram)의 넓이(area)를 determinant를 통해 구할 수 있음을 배웠다. 이번 섹션에서는 n차원 공간의 경우를 살펴보자. n차원이라고는 하지만 실제 그림을 통한 표현은 3차원을 대상으로 한다. 4차원 이상에 대해서는 그림을 통해 표현할 길이 없고 그저 상상에 맡기도록 하겠다. 어쨋든 4차원 이상의 공간에서도 어떤 box의 volume으로 생각하자. 

 

어떤 임의의 정방행렬 A의 행렬식(determinant)은 행렬을 통해 표현되는 상자(box)의 부피(volume)을 나타낸다

 

 

우리는 여기서 3차원 공간에대한 것을 이야기 해보자. 어떤 3x3크기의 행렬의 행렬식(determinant)는 상자의 부피를 나타낸다. 아래의 3x3행렬을 생각해보자. 

 

 

행렬 A의 각 row벡터는 우리가 공간에서 나타내고자 하는 상자의 각 정점이 된다. 일단 식 (13)의 A를 공간상에 표현해보자. 

 

 

Fig. 7 행렬 A의 row벡터들이 형성하는 3차원 공간의 box

 

이번 강의에서 우리가 하고자하는 것은 이 row벡터들이 형성하는 어떤 box의 부피를 determinant로 구할 수 있음을 보이는 것이다. 우선 해야할 일은 row벡터들이 형성하는 box가 공간상에서 어떤 모양으로 표현되는지를 알아야 한다. Fig. 7은 식 (13)의 행렬 A의 row벡터들이 형성하는 상자(box)를 3차원 공간에 표현한 것이다. v1은 빨간색, v2는 녹색, v3는 파란색 벡터로 각각 표현하였다. 또한 노란색 영역은 v1과 v2가 형성하는 평행사변형을 의미한다. 파란색 점선 벡터로 표현된 선들을 통해 행렬 A의 row벡터들이 형성하는 상자의 모양을 눈으로 확인할 수 있다. 보다시피 일반적인 cube형태의 상자가 아닌 기울어져 있는 모습이다. 

 

행렬식(determinant)을 계산하여 식 (13)의 행렬 A로 형성되는 상자의 부피를 계산하면 다음과 같다. 

 

 

 

- Proof

 

3차원 공간의 어떤 상자의 부피를 계산하기 위해선 (가로)x(세로)x(높이)를 계산하면 된다. 그러나 Fig. 7에서 보이듯이 일반적인 cube형태의 직사각형 모양이 아니다. 평행사변형 모양으로 벡터들이 기울어져있는 형태이다. 이 경우엔 부피(volume)를 어떻게 구하면 될까? 우선 v1과 v2로 만들어지는 평행사변형의 넓이를 구한 뒤, 높이를 곱해주면 된다. 평행사변형의 넓이는 앞서 구한 것과 같은 방법으로 계산하면 된다. 즉 내적(dot product)을 이용하여 v1과 v2사이의 각도를 알아내고, 두 벡터의 크기와 사잇각에 대한 sin값을 곱해주면 된다. 자세한 방법은 식 (4)와 같은 방법이기 때문에 이를 참고하도록 하고, 값을 계산해보면 아래와 같다. 

 

 

Fig. 7의 평행사변형의 넓이는 9.4868임을 알았다. 이제 높이를 구해서 곱해주면 상자의 부피를 구할 수 있다. 그런데 그냥 단순히 v3의 크기를 곱해주면 되는 걸까? 결론적으로 그냥 곱해서는 안된다. 물론 v3 벡터가 v1과 v2로 만들어지는 평행사변형에 수직(orthogonal)하다면 그냥 v3의 크기를 곱해줘도 무관하다. 그러나 이 경우엔 v3가 수직이 아니기 때문에 그냥 곱해서는 안된다. 실제로 v3가 v1과 v2에 수직이 아님을 알아보는 방법은 v3와 v1, v3와 v2를 각각 내적하여 각도를 알아보면 된다. 

 

 

v3와 v1, v2가 이루는 각도가 각각 59.21도, 97.44도 이기 때문에 수직이 아니다. 그렇다면 실제 높이를 구하기 위해선 어떻게 해야할까? 바로 Lecture 15-(2)에서 배웠던 투영(projection)을 이용하는 것이다. 즉 v3를 v1과 v2로 이루어지는 평면에 투영시켜서 얻을 수 있는 error벡터가 바로 높이가 되는 것이다. Lecture 15-(2)에서 투영을 할 때 우리는 투영 시키는 평면을 column space로 간주했었다. 여기에서도 마찬가지로 v3를 v1과 v2로 형성되는 평행사변형에 투영하는 것이기 때문에 v1과 v2를 column space의 기저(basis)로 간주하고 계산하면 된다. 아래와 같은 식으로 3차원 평행사변형의 높이(height)를 계산하면 된다. 투영에 대한 자세한 사항은 Lecture 15-(2)를 참고하기 바란다. 

 

 

아래 그림은 식 (17)으로 구한 error벡터, 즉 평행사변형의 높이를 나타낸 것이다. 

 

 

Fig. 8 투영(Projection)을 통해 구한 error 벡터. 평행사변형의 높이(보라색)

 

Fig. 8의 보라색 벡터가 v3의 투영을 통해 구한 error벡터이자 평행사변형의 높이를 나타낸다. error벡터는 평행사변형에 수직임을 알 수 있다. 이제 식 (15)에서 구한 노란색 영역의 평행사변형의 넓이와 높이인 error벡터의 크기를 곱해주면 행렬 A로 형성되는 상자의 부피를 구할 수 있다. 

 

 

벡터 연산과 삼각함수를 통해 계산한 상자의 부피는 24이며, determinant를 통해 구한 식 (14)의 부피와 같은 값을 가진다. 따라서 determinant가 상자의 부피를 나타냄을 증명하였다. 

 

 

- Sign of Determinant in box

 

우리는 앞서 행렬식(determinant)의 부호가 좌표계를 결정한다고 배웠다. 즉 determinant의 부호가 +이면 오른손 좌표계(Right-handed)를, 부호가 -이면 왼손 좌표계(Left-handed)를 나타낸다. 예제를 통해 바로 확인해보자. 

 

 

Fig. 9 determinant의 부호에 따른 좌표계 변화

 

Fig. 9는 determinant의 부호에 따른 좌표계의 변화를 나타낸다. 왼쪽은 determinant가 24이고 부호는 +이며 좌표계는 오른손 좌표계(Right-handed)가 된다. 반면 오른쪽은 determinant가 -48이며, 부호가 -이기 때문에 왼손좌표계가 된다. 앞서 설명을 했기 때문에 따로 부연설명을 하진 않겠다. 

 

 

 

3. 행렬식의 특성에 따른 부피(Volume with respect to the Properties of Determinant)

 

우리는 지난 강의 Lecture 18에서 행렬식의 특성 10가지를 배웠다. 이 특성 10가지는 처음 3개의 특성으로부터 유도 됨을 배웠다. 이 3개의 특성이 기하학적으로 어떻게 표현되는지 알아보도록 하자. 

 

 

- prop.(1) :

 

 

첫 번째 특성은 단위 행렬(Identity)의 행렬식(determinant)는 1이라는 것이다. 3x3단위 행렬을 예로 들어보자. 

 

 

행렬 A의 각 row벡터는 식 (19)와 같이 v1, v2, v3가 되고, 이들은 서로 직교(orthogonal)하며 크기가 1인 벡터들이다. 이 벡터들로 형성되는 상자(box)는 어떤 모양일까? 바로 정육면체(cube)의 모습이다. 정육면체의 부피(volume)는 마찬가지로 (가로)x(세로)x(높이)로 구할 수 있는데, 각각의 수치가 모두 1이기 때문에 결과적으로 부피는 1이 된다. prop.(1)을 통해 단위 행렬의 determinant가 1임을 보였고, 단위 행렬로 만들어지는 상자가 기하학적으로도 동일하게 1의 부피(volume)를 갖는 것을 보였다. 결과적으로 임의의 차원의 단위행렬의 determinant는 공간상에서 cube형태의 상자를 나타내고, 이것의 부피는 항상 1임을 알 수 있다. 이를 통해 determinant는 어떤 상자의 부피(volume)와 같음을 알 수 있다. 

 

약간 비슷한 경우의 행렬을 살펴보도록 하자. 우리는 Lecture 17-(2)에서 Q행렬에 대해 배웠다. Q행렬은 알다시피 기존의 특이 행렬(singular matrix)이 아닌 행렬 A로부터 정규직교(orthonormal)한 행렬을 만든 것이다. 그렇다면 이러한 Q행렬은 공간상에서 어떤 모양으로 나타날까? 역시 cube모양이다. 즉 단위행렬로 정의된 cube와 같은 모양이다. 그러나 다른 것은 바로 회전이 된 cube라는 것이다. 아래 그림을 통해 차이점을 확인하자. 

 

 

Fig. 10 단위 행렬(Identity Matrix)과 Q행렬의 기하학적 표현

 

Fig. 10의 왼쪽은 단위행렬을, 오른쪽은 식 (13)의 Q행렬을 3차원 공간상에 표현한 것이다. Q행렬의 cube는 단위 행렬의 cube와 모양이나 크기, 부피 등은 똑같지만, 원점을 중심으로 회전한 형태이다. 결국 단위행렬과 모든 것이 같지만, 회전했다는 것이 다르다. 그러므로 Q의 determinant는 단위 행렬의 determinant와 같이 1이 되어야 한다. Q행렬의 determinant가 1이 된다는 것을 식으로 증명해보자. 

 

 

식 (20.1)에서 Q는 정규직교행렬(orthonormal matrix)이기 때문에 전치(transpose)가 곧 역행렬이 된다. 따라서 이는 단위행렬이 된다. 다음으로 양변에 determinant를 취해주면 식 (20.2)와 같이 되고, (20.3)에서 좌편은 prop. (9)에 의해 분리가 되고, 우변은 prop. (1)에 의해 1이 된다. 마지막으로 식 (20.4)에서는 prop. (10)에 의해 transpose의 determinant도 원래와 같기 때문에 Q의 제곱이 된다. 따라서 Q의 determinant는 1이 된다. 사실 복소수(complex number)까지 고려한다면, 식 (20.4)에 의해 Q의 determinant가 -1이 되기도 한다. 일단 복소수도 고려는 하되, 기본적으로 Q의 determinant는 1이 된다는 것을 알아두자

 

- prop.(2) :

 

다음으로 보일 determinant의 특성은 row을 교환했을 때 부호가 바뀐다는 특성이다. 

 

 

사실 이건 간단하다. 3x3 단위 행렬 A의 row1과 row2를 바꾼 것은 위의 Fig. 10의 왼쪽 cube에서 v1과 v2를 바꾼 것과 같다. 또는 row2와 row3를 바꾸면 Fig. 10에서 v2와 v3를 바꾼 것과 같다. 이렇게 행교환(row exchange)을 한 번만 할 경우, 오른손 좌표계(right-handed)에서 왼손 좌표계(left-handed)로 바뀌는 것을 볼 수 있다. 

 

 

- prop.(3)-1 :

 

prop.(3)-1은 행렬식의 어느 한 row에 상수 t를 곱한 것은 전체 determinant를 구한 다음 거기에 t를 곱해준 것과 같다는 것이다. 

 

 

아래 그림은 단위 행렬을 이용하여 이 특성을 보인 것이다. 

 

 

Fig. 11 determinant의 prop.(3)-1의 기하학적 특성

 

Fig. 11의 왼쪽 그림은 row1에 상수 2를 곱한 것을 나타낸 것이다. row1은 v1에 해당하기 때문에 v1축의 길이가 두 배로 늘어난 것을 볼 수 있다. 직관적으로 생각해봐도 v1의 길이가 두 배로 늘어나면 부피 1의 cube가 두 개인 것과 마찬가지이기 때문에 총 부피는 2인 것을 쉽게 유추할 수 있다. 실제 계산 결과도 2가 나온다. 오른쪽 그림은 row2에 상수 2를 곱한 결과이며, 마찬가지로 총 부피가 2가 되는 것을 볼 수 있다. 

 

 

- prop.(3)-2 :

 

마지막으로 prop.(3)-2를 기하학적으로 어떻게 표현되는지 살펴보자. 

 

 

prop.(3)-2는 3차원으로 표현해도 알아보기 쉽지 않기 때문에 2차원 그래프로 표현하도록 하겠다. 식은 (2)에서 사용했던 행렬을 그대로 이용할 것이다. 우선 식으로 표현하면 아래와 같다. 

 

 

식 (21)은 원래 행렬식(determinant) A의 row1에 [-2  1]벡터를 더한 식을 나타낸 것이다. 이때 두 개의 행렬로 분리한 것을 각각 행렬 A와 행렬 B라고 해보자. A는 기존의 행렬을, B는 [a'  b']과 row2로 만든 행렬을, F는 row1에 [a'  b']을 더한 행렬을 의미한다. det A와 det B는 각각 10과 -8이므로 결과적으로 행렬 F의 determinant는 2가 된다. 이를 그림으로 표현하면 아래와 같다. 

 

 

Fig. 12 행렬식의 특성 prop.(3)-2에 대한 그래프 표현

 

Fig. 12는 식 (21)의 각 넓이를 그래프로 표현한 것이다. 노란색 영역이 원래 행렬 A의 영역, 녹색이 분리된 행렬인 B, 그리고 마지막 하늘색 영역이 A와 B를 더한 결과이다. B를 보면 벡터가 -x방향으로 향해있으며 왼손좌표계(left-handed)의 형태를 보인다. 따라서 B의 넓이에 해당하는 녹색 영역은 음의 값(-)을 가지며, 양의 값을 가진 A의 넓이(determinant)와 더하면 결국 A의 넓이에서 B의 넓이를 빼는 셈이 된다. 결과적으로 식 (21)의 넓이는 하늘색 영역인 2가 된다. Fig. 12에 나타난 그림과 함께 prop.(3)-2를 잘 이해해 보도록 하자. 

 

 

- MATLAB Code

 

아래 MATLAB코드는 3차원 cube를 그리는 데에 사용된 코드이다. 최적화된 코드는 아니므로 참고만 하길 추천드립니다. 앞서 prop.(3)-2에 관련된 코드는 먼저 올린 코드를 약간만 수정하면 어렵지 않게 만들 수 있기 때문에 올리지 않겠습니다. 

 

 

 

 

4. 마치며

 

이번 포스팅에선 행렬식(determinant)의 기하학적 해석에 관한 내용을 다루었다. 기본적으로 2차원 행렬은 어떤 직사각형, 혹은 평행사변형의 정점(vertex)을 나타낼 수 있고, 3차원 행렬의 경우 상자(box)의 정점을 나타낸다. determinant를 이용하여 이 행렬이 형성하는 평행사변형의 넓이(area)나 상자의 부피(volume)를 구할 수 있음을 배웠다. 또한 determinant의 부호(sign)는 좌표계를 나타내는데, +부호인 경우 오른손 좌표계(right-handed)를, -부호인 경우엔 왼손 좌표계(left-handed)를 나타냄을 알았다. 마지막으로 행렬식의 특성 중 가장 중요한 3가지 특성이 공간상에서 어떤 의미를 갖는지 확인하였다. 

 

이상으로 determinant에 관한 포스팅을 마치도록 하겠습니다. determinant에 관한 내용들은 앞으로 다룰 eigenvalue, eigen vector 및 선형 변환(Linear Transformation)등에 대한 이해를 위해서 반드시 필요한 내용이므로 잘 이해하고 넘어가길 추천드립니다. 

다음 포스팅은 다양한 분야에서 응용되고 있는 중요한 개념인 고유값(eigenvalue)고유 벡터(eigen vector)등을 다루도록 하겠습니다. 

 

이번 시간에 다룰 내용은 행렬식(Determinant)과 역행렬(Inverse Matrix)의 관계, 그리고 크래머 공식(Cramer's Rule)에 관한 내용이다. 지난 Lecture 18, Lecture 19에 이어 행렬식을 다루는 세 번째 강의다. 앞의 내용을 잘 학습해 왔다면 어려움 없이 이해할 수 있을 것이다. 

 

1. 행렬식과 역행렬(Determinant and Inverse Matrix)

 

- Determinant with Inverse Matrix

 

행렬식(determinant)의 값은 해당 행렬에 관한 많은 정보를 압축하여 담고 있다. 이러한 determinant가 역행렬과 어떤 관계가 있는지 살펴보자. 우선 다음의 2x2 행렬 A의 역행렬에 관한 식을 살펴보자. 

 

 

식 (1)의 역행렬에 관한 공식은 이공계 학생이라면 한 번쯤 배웠던 공식일 것이다. 필자 역시 수업시간에 배웠다. 대각선 원소 위치를 서로 바꿔주고 b와 c에는 -부호 붙여주고 이 행렬을 ad-bc로 나눠주면 A의 역행렬이 나온다....라고 말이다... 그냥 이렇게 외워버렸다. 이유 따위는 필요 없고 그냥 이렇게 배웠고 이렇게 외워 왔다. 아마 많은 학생들이 이렇게 배워왔을 거라 생각한다. 이제 무작정 외우는 것은 그만하고 역행렬과 determinant가 어떤 관계인지 알아보도록 하자. 

 

식 (1)은 2x2행렬에 관한 식이다. 그런데 우리는 3x3, 4x4, 나아가 nxn의 행렬에 대한 일반적인 식을 알고싶을 것이다. 일단 2x2를 먼저 이해하면 3x3이나 nxn에 대한 실마리를 찾을 수 있다. 

 

식 (1)은 A의 역행렬에 대한 식이며 우변의 어떤 행렬을 A의 determinant로 나눠준다. 여기서 알 수 있는 것은 만약 determinant가 0이면 역행렬은 존재하지 않는다는 것이다. 우리는 지금까지 특이 행렬(singular matrix)인 경우, determinant가 0이 되고 역행렬은 존재하지 않는다고 배웠다. 이는 역행렬을 구할 때 determinant로 나누어주기 때문이다. 

 

이제 우변의 저 이상하게 생긴 행렬을 파악해 보자. 우변의 row1, col1에 위치한 d는 어디서부터 오게 된 것인가? 바로 cofactor이다. 우변의 d는 좌변의 a에 대한 cofactor인 것이다. 바로 지난 강의(Lecture 19)에서 배운대로 행렬 A의 a에 대한 cofactor를 구해보면 먼저 a를 선택하고 a를 중심으로 row와 column의 모든 원소를 지운다. 그럼 b와 c는 사라지고 d만 남는다. 이때 a는 row1, col1에 위치해있고(a11) 이 둘의 index를 더하면 1+1=2의 짝수가 되므로 부호는 +가 된다. 결국 a에 대한 cofactor가 우변의 a자리로 오게 된다. 

 

다음으로 좌변 행렬에서 row1, col2에 위치한 원소인 b의 cofactor를 구해보자. b를 중심으로 row와 column의 원소를 지우면 남는 것은 c인데, 이때 row1, col2이므로 index의 합이 1+2=3의 홀수가 된다. 따라서 b의 cofactor는 -c가 된다. 그런데 왠걸, b의 cofactor자리에는 -b가 자리잡고 있다. -c는 -b의 반대편 대각 원소에 위치해 있으며, -b는 c의 cofactor이다. 그렇다. 우변 행렬의 counter diagonal 원소들이 뒤집힌 것이다. 즉 우변의 행렬은 여인수 행렬(cofactor matrix)의 transpose이다. 식 (1)을 다시 써보면 아래와 같다. 

 

 

C는 원소들이 여인수(cofactor)들로 이루어진 여인수 행렬(cofactor matrix)이다. 원래는 A의 각 원소들의 cofactor가 C의 동일한 위치에 있어야 한다. 즉 a11의 cofactor는 C의 row1, col1에 위치해 있어야 하고, a12의 cofactor는 C의 row1, col2에 위치해 있어야 한다. 그러나 counter diagonal원소들은 전치(transpose)로 인해 뒤집혔다. 행렬 A에서 b의 cofactor는 우변 행렬에서 row2, col1의 위치로, c의 cofactor는 row1, col2의 위치로 말이다. 

 

2x2행렬인 경우엔 식 (2)가 맞음을 확인했다. 3x3인 경우엔 어떨지 확인해보자. 

 

 

식 (3)은 3x3행렬의 역행렬을 식 (2)를 통해 나타낸 것이다. 우변의 행렬은 여인수 행렬(cofactor matrix)이 이미 transpose가 된 행렬이다. 즉 원래의 C행렬에서 대각 원소들을 기준으로 상삼각 원소들과 하삼각 원소들이 뒤바뀐 것이다. 이와 같은 방식으로 nxn행렬의 역행렬도 구할 수 있다. 결국 식 (2)에서 det A부분은 n개 원소들의 곱들로 이루어져 있고, cofactor matrix는 (n-1)개의 원소들의 곱으로 형성된다. 다시말하면 식 (3)에서 det A는 aei -afh... 와 같이 3개 원소들의 곱들로 이루어져 있고, C는 ei-fh와 같이 2개 원소들의 곱으로 이루어진다. 

 

지난 강의(Lecture 3)에서 배운 역행렬(Inverse Matrix)계산 법을 기억하는가? 행렬 A의 우측에 단위 행렬(Identity)을 붙인 다음 가우스 소거(Gauss Elimination)를 통해 A가 단위 행렬이 될 때 까지 함께 소거를 하면, 처음에 붙였던 단위행렬이 A의 역행렬이 되는 방법 말이다. Lecture 3에서 배웠던 방법은 수치적(numerical) 알고리즘으로 역행렬을 구한 것이고, 식 (2)의 방법은 대수적(Algebraic)방법을 통해 구한 것이다. 결국 우리는 어떤 임의의 정방행렬의 역행렬에 대한 공식(Formula)을 구한 것이다. 

 

 

그렇다면 이 역행렬에 대한 공식은 어디서부터 유도 되었을까? 아래 식을 보도록 하자. 

 

 

식 (4)는 사실 식 (2)의 양변에 (det A)A 를 곱해준 식이다. 따라서 식 (4)가 참임을 증명해낸다면 식 (2)는 자연스레 증명이 된다. 일단 식 (4)를 행렬의 형태로 다시 써보면 아래와 같다.  

 

 

식 (5)에서 C transpose의 원소들은 transpose를 했을 때 원래의 원소들이 어디에 위치해 있는지를 표현한 것이다. 또한 일단 3x3으로 썼지만, nxn까지 확장해서 생각할 수 있다. A의 row1은 C transpose의 column 1과 곱해져서 det A가 된다. 이때 C의 column1은 원래는 C가 transpose되기 전의 C의 row1이며, 곧 A의 row1에 대한 cofactor들 이다. 결국 A의 row1과 C의 row1이 곱해져서 det A가 되는 것이며, 아래와 같이 쓸 수 있다. 

 

 

식 (6)을 자세히 보니 뭔가 익숙한 식이다. 바로 지난 강의에서 배웠던 cofactor로 표현한 A의 determinant에 대한 식이다. 결국 C를 transpose한 이유는 행렬의 계산식으로 표현하기 위함이다. 이때 식 (6)은 row1에 대한 determinant의 식이고, 지난 시간에 언급했듯이 어떠한 row라도 가능하다. 즉 A의 row2와 C transpose의 column 2, row3와 column 3와의 내적(dot product)도 동일하게 det A를 나타내는 식이다. 결국 row는 1에서 n까지 어떤 index를 통해서도 det A를 나타낼 수 있다. 

 

식 (6)을 자세히 보면 원소 a와 그의 cofactor를 곱할 때 column의 index는 각각 동일한 것을 볼 수 있다. 식 (5)를 기준으로 보면 대각 원소에 대한 곱은 det A를 나타내지만, column의 index가 다른 원소끼리의 내적은 0이 되는 것을 볼 수 있다. 즉 row1과 col2, row3와 col1과 같이 말이다. 대각 원소들을 제외한 나머지 원소끼리의 내적은 0이다. 왜일까? 왜 이런 일이 발생하는 것일까? 이는 서로 다른 index를 가진 row와 column을 곱하는 것은 똑같은 row를 두 개 이상 가진 특이 행렬(singular matrix)의 determinant를 구하는 것과 같기 때문이다. 맨 처음 2x2행렬에 대한 식 (1)을 식 (4)와 같이 표현해보자. 

 

 

식 (7.1)을 보면 counter diagonal원소들인 (det A)I12와 (det A)I21은 식 (7.2)와 같이 특이 행렬(singular matrix)의 determinant를 구하는 것과 결과가 같다. 따라서 A와 C transpose를 곱할 때 서로 다른 index를 가진 원소끼리 곱하는 것은 결국 어떤 행렬에서 동일한 row에 대한 cofactor를 구하는 것과 같기 때문에 0이 될 수 밖에 없는 것이다. 이는 2x2경우와 마찬가지로 3x3, nxn에서 동일한 규칙이 적용된다. A와 C transpose에 있어 다른 index를 가진 원소들의 내적은 식 (7.2)와 같이 동일한 row에 대해서 cofactor를 구한다는 것을 명심하자. 똑같은 말을 반복했지만,, 잘 이해하고 넘어가길 바란다. 

 

결과적으로 우리는 식 (4)가 옳다는 것을 증명했기 때문에 역행렬(inverse matrix)에 대한 대수적 공식(algebraic formula)인 식 (2)를 증명했다. 또한 우리는 식 (1)~(3)을 통해 다음의 사실도 알 수 있다. 

 

원래 행렬 A에서 어떤 원소 하나만 값이 바뀌어도 A의 역행렬에서 모든 원소가 영향을 받는다. 왜냐하면 determinant의 계산에는 A의 모든 원소의 값이 영향을 주고 있으며, 이 determinant로 여인수 행렬(cofactor matrix)의 모든 원소를 나누어 역행렬을 계산하기 때문이다

 

식 (2)를 잘 알아두자!

 

 

 

2. 크래머 공식(Cramer's Rule)

 

- Cramer's Rule

 

어떤 선형시스템 방정식(Linear system equation) Ax=b가 있다고 해보자. 우리가 구하고자 하는 해 x는 A행렬의 역행렬(Inverse Matrix)을 정의하여 아래와 같이 정의할 수 있다. 이때 앞서 배운 역행렬의 공식 (2)를 통해 역행렬을 다시 정리할 수 있다. (※ 역행렬 공식 (2)는 determinant를 이용하여 정의하기 때문에 정방행렬에만 해당 됨)

 

 

식 (8)과 같이 선형시스템 방정식의 해 x를 역행렬 공식을 통해 정리하였다. 해를 구하는데 있어 일단 determinant를 구해서 뒤의 모든 원소들을 나눠줘야 한다. 그렇다면 C transpose b가 의미하는 것이 무엇일까? 일단 식 (8)을 좀 더 풀어서 써보도록 하자. 

 

 

 

식 (9.1)에서 행렬 C는 transpose된 것을 표현한 것이니 혼동하지 않도록 하자. 이를 계산해보면 C transpose행렬의 row 원소들과 b원소들을 내적(dot product)한 것을 A의 determinant로 나눠준 것이다. 알다시피 C는 행렬 A의 여인수(cofactor)들의 원소들로 이루어져 있고, 결국 벡터 b와 cofactor들과의 내적을 한다. 이렇게 벡터 b와 cofactor들과 내021적을 하게 되면 어떤 식이 될까? 바로 b와 관련된 어떤 행렬 B의 determinant를 구하는 식이 된다. 결국 식 (9.2)와 같이 C transpose의 각 row와 b를 곱하여 x1, x2, ... xn까지 계산하고 해를 구할 수 있다. 그렇다면 이 B행렬은 어떤 행렬일까? 바로 A 행렬에서 하나의 column이 b로 대체된 행렬이다. 왜 그런지 아래 그림을 보자. 3x3행렬로 가정하고 예를 들어보도록 하겠다. 

 

 

x1에 대한 식을 보면 행렬 A에서 column 1이 b로 대체된 상태에서 determinant를 구하는 식이다. 애초에 (9.1)로부터 정리된 식 자체가 c11b1+c21b2+c31b3인데, c11은 사실 A의 a11에 대한 cofactor를 의미한다. a11의 cofactor는 a11을 기준으로하는 row와 column에 있는 원소들을 제외한 n-1크기의 나머지 원소들에 대한 determinant를 의미한다. 식 (10)의 행렬 A를 보면 a11의 cofactor인 c11은 a22a33-a23a32인데, det B1=c11b1+c21b2+c31b3와 같이 되려면 A의 column 1을 b로 교체한 형태의 식이 되어야만 식이 나올 수 있다. 

 

 

마찬가지로 x2와 x3, xn까지의 식들을 살펴보면 순서대로 행렬 A의 column이 순서대로 b로 대체된 형태어 되어야만 하는 것이다. 한 가지만 더 설명해보자면 x2의 식에서 det B2=c12b1+c22b2+c32b3을 보자. c22b2을 보면 c22은 행렬 A에서 a22에 대한 cofactor이다. 이는 식 (10)의 a22를 기준으로 한 row와 column 원소들을 제외한 나머지 원소들, a11, a13, a31, a33에 대한 determinant이다. 이와 같은 형태가 되기 위해선 x2를 구하기 위해선 A의 column 2가 b로 대체 되어야 하는 것이다. 3x3 행렬에 대한 역행렬 식인 (3)을 잘 살펴보면 이해에 도움이 될 것이다. 

 

정리해보면 크래머의 공식은 아래와 같이 정의할 수 있다. 

 



  •   크래머 공식(Cramer's Rule)
크래머 공식(Cramer's Rule)은 임의의 선형시스템 방정식(Linear System Equation) Ax=b의 해(solution) x를 행렬식(determinant)으로 유도된 공식을 통해 푸는 방법이다. 이때 determinant를 이용하여 해를 풀기 때문에 A는 정방행렬(square matrix)이어야 하며 특이 행렬(singular matrix)이 아니어야 한다. 


크래머 공식을 통해 해를 구하기 위해 먼저 아래와 같이 선형시스템 방정식에 대한 해를 A의 역행렬 대신 determinant와 여인수 행렬(cofactor matrix), 그리고 벡터 b의 곱으로 정의할 수 있다. 




해(solution) x의 각 원소들은 결과적으로 determinant들로 정의된 식으로 구할 수 있다. 여기서 det Bj는 원래 행렬 A의 각 column 벡터들을 순서대로 벡터 b로 대체한 행렬의 determinant를 의미하며, j는 1~n까지 지속된다. 



 

 

- Consideration of the Cramer's Rule

 

크래머의 공식은 행렬식(determinant)를 활용하여 A의 역행렬을 구하데에 그 목적이 있다. 역행렬을 구하는 방법 중 하나인 가우스 소거(Gauss Elimination)에 비해 대수적 공식(Algebraic Formula)으로 깔끔하게 정리된 것이다. 하지만 그 효율성 측면에 있어서 크래머 공식은 굉장히 비효율 적이다. 일단 행렬 A에 대한 determinant야 한 번만 계산해서 계속 써먹을 수 있다고 하지만, xn을 구하는 데에 있어서 A의 column을 순차적으로 b로 교체해서 최대 n번 만큼 determinant를 계속 구해야 하는 것이다. 만약 n이 100이라고 하면 최소 100번 이상 100x100짜리 determinant를 계산해야 한다. 아무리 빠른 컴퓨터로 계산한다고 해도 이는 너무 비효율적이다. 역행렬을 구하기엔 차라리 수치적 알고리즘(numerical algorithm)방법인 가우스 소거가 훨씬 빠르고 효율적이다. 따라서 이런 공식이 있다는 것 정도는 알아두면 좋지만, 실제 역행렬을 구할 때는 가우스 소거 방법을 사용하는 것을 추천한다. 

 

 

3. 마치며

 

이번 포스팅에선 행렬식(determinant)과 역행렬(Inverse Matrix)와의 관계를 알아봤다. 어떤 행렬 A의 역행렬은 A의 determinant와 여인수 행렬(cofactor matrix)을 이용하여 구할 수 있다. 이 관계로부터 선형방정식의 해 x를 대수적 방법(Algebraic way)으로 구할 수 있는 크래머 공식(Cramer's Rule)을 유도하였다. 크래머 공식은 determinant를 이용하여 해를 구하는 방법이며 기존의 가우스 소거 방법과는 달리 공식화해서 푸는 방법이다. 그러나 너무 많은 determinant를 계산해야 하기 때문에 계산 측면에서 비효율적이며 실제로는 많이 사용하지 않는다. 역행렬을 구하는 방법은 가우스 소거 방법이 훨씬 효율적이다. 

다음 시간엔 determinant에 대한 마지막 내용인 determinant의 기하학적 해석에 관한 내용을 다룰 예정이다. 

 

+ Recent posts