고급 선형 대수 Lecture 4: 고유값, 고유벡터와 대각화

전체 목차 · 이전: Lecture 3 · 다음: Lecture 5

책과 강의

구분 출처와 범위
교재 Gilbert Strang, Linear Algebra and Learning from Data, 2019. Part I — Highlights of Linear Algebra, I.6 — Eigenvalues and Eigenvectors, pp. 36–43
강의 MIT 18.065, Spring 2018. Lecture 4 — Eigenvalues and Eigenvectors
지정 문제 I.6의 2, 11, 15번, pp. 41–42. 강의 페이지와 전체 문제집 참조

쪽수는 인쇄쪽수입니다. 해당 절은 제공된 스캔본의 PDF 26–29번째 페이지에 있습니다. 본문 예제는 설명을 위해 구성했고, 지정 문제는 절 번호와 문제 번호를 별도로 표시했습니다.

행렬을 여러 번 곱하면 계산은 빠르게 복잡해집니다. 그러나 어떤 벡터는 행렬을 곱해도 자신이 놓인 직선을 벗어나지 않습니다. 이 특별한 방향을 기저로 사용할 수 있으면, 행렬의 반복 작용을 숫자의 거듭제곱으로 바꿀 수 있습니다.

1. Ax = λx에서 x는 영벡터가 아니다

정사각행렬 A∈Rn×nA\in\mathbb R^{n\times n}에 대해

Ax=λx,x≠0Ax=\lambda x,\qquad x\ne0

이면 λ\lambda를 고유값, xx를 그 고유값의 고유벡터라고 합니다. λ<0\lambda<0이면 방향이 뒤집히므로, 고유벡터의 방향이 그대로라는 말은 같은 직선 위에 남는다는 의미로 읽어야 합니다.

고유값은 0이어도 됩니다. λ=0\lambda=0인 고유벡터는 영공간의 영이 아닌 벡터입니다. 하지만 영벡터 자체는 모든 λ\lambda에 대해 식을 만족하므로 고유벡터에서 제외합니다.

고유벡터의 0이 아닌 배수도 같은 고유값의 고유벡터입니다. 특정 고유값에 대한 모든 해를 영벡터까지 포함해서 모으면 고유공간 N(A−λI)\mathcal N(A-\lambda I)가 됩니다.

2. 손으로 계산하는 순서

고유벡터가 존재하려면 (A−λI)x=0(A-\lambda I)x=0에 영이 아닌 해가 있어야 합니다. 따라서

det⁡(A−λI)=0.\det(A-\lambda I)=0.

이 식으로 고유값을 구한 뒤 각 λ\lambda에 대해 영공간을 구합니다. 예를 들어

A=[4213]A=\begin{bmatrix}4&2\\1&3\end{bmatrix}

에서는

det⁡(A−λI)=(4−λ)(3−λ)−2=λ2−7λ+10=(λ−5)(λ−2).\det(A-\lambda I)=(4-\lambda)(3-\lambda)-2 =\lambda^2-7\lambda+10=(\lambda-5)(\lambda-2).

고유값 5에는 x1=(2,1)Tx_1=(2,1)^T, 고유값 2에는 x2=(−1,1)Tx_2=(-1,1)^T를 선택할 수 있습니다.

Ax1=5x1,Ax2=2x2.Ax_1=5x_1,\qquad Ax_2=2x_2.

두 벡터는 독립이지만 직교하지는 않습니다. 일반 행렬의 고유벡터에 직교성을 가정하면 안 됩니다.

큰 행렬의 고유값을 실제로 구할 때에는 특성다항식의 모든 계수를 전개하는 방식보다 행렬 구조를 유지하는 수치 알고리즘을 사용합니다. 여기서 행렬식은 작은 예제와 이론을 이해하는 도구입니다.

3. 합과 곱으로 검산하기

고유값을 대수적 중복도만큼 세면

tr⁡(A)=∑i=1nλi,det⁡(A)=∏i=1nλi.\operatorname{tr}(A)=\sum_{i=1}^n\lambda_i,\qquad \det(A)=\prod_{i=1}^n\lambda_i.

위 예제에서 대각합은 4+3=7=5+24+3=7=5+2, 행렬식은 12−2=10=5⋅212-2=10=5\cdot2입니다. 삼각행렬의 고유값은 대각 성분들입니다. A−λIA-\lambda I 역시 삼각행렬이어서 행렬식이 대각 성분의 곱이기 때문입니다.

이 공식은 대각화가 불가능한 행렬에도 성립합니다. 다만 고차원에서는 합과 곱이 맞는 것만으로 모든 고유값을 정확히 계산했다고 보장하지는 못합니다.

4. 고유벡터 좌표로 바꾸면 대각화된다

nn개의 독립인 고유벡터를 모아 X=[x1 ⋯ xn]X=[x_1\ \cdots\ x_n]로 놓으면

AX=XΛ,Λ=diag⁡(λ1,…,λn).AX=X\Lambda,\qquad \Lambda=\operatorname{diag}(\lambda_1,\ldots,\lambda_n).

XX가 가역이므로

A=XΛX−1.\boxed{A=X\Lambda X^{-1}}.

변환 순서는 X−1X^{-1}로 고유벡터 좌표를 구하고, Λ\Lambda로 각 좌표를 배율만큼 바꾸고, XX로 원래 좌표에 돌아오는 것입니다.

위 예제에서는

X=[2−111],X−1=13[11−12],Λ=[5002].X=\begin{bmatrix}2&-1\\1&1\end{bmatrix},\quad X^{-1}=\frac13\begin{bmatrix}1&1\\-1&2\end{bmatrix},\quad \Lambda=\begin{bmatrix}5&0\\0&2\end{bmatrix}.

X−1X^{-1}의 ii번째 행을 yiTy_i^T라 쓰면 외적 형태 A=∑iλixiyiTA=\sum_i\lambda_i x_i y_i^T도 얻습니다. 일반적으로 yiy_i는 xix_i와 같지 않습니다. 대칭행렬에서 정규직교 고유벡터를 선택했을 때에야 X−1=XTX^{-1}=X^T로 단순해집니다.

5. 거듭제곱, 역행렬과 이동

같은 고유벡터에 대해

Akx=λkx,(A+sI)x=(λ+s)x.A^kx=\lambda^k x,\qquad (A+sI)x=(\lambda+s)x.

AA가 가역이면 A−1x=λ−1xA^{-1}x=\lambda^{-1}x입니다. 특정 고유값 하나가 0이 아니라는 사실만으로 행렬 전체의 역행렬이 존재하는 것은 아닙니다. 모든 고유값이 0이 아니어야 합니다.

대각화가 가능하면 중간의 X−1XX^{-1}X가 약분되어

Ak=XΛkX−1,A−1=XΛ−1X−1A^k=X\Lambda^kX^{-1},\qquad A^{-1}=X\Lambda^{-1}X^{-1}

가 됩니다. 일반 벡터 v=∑icixiv=\sum_i c_ix_i에도

Akv=∑iciλikxiA^kv=\sum_i c_i\lambda_i^k x_i

가 성립합니다. ∣λi∣<1|\lambda_i|<1인 성분은 줄어들고, ∣λi∣>1|\lambda_i|>1인 성분은 커집니다. λi=−1\lambda_i=-1인 성분은 부호가 번갈아 바뀌므로 수렴하지 않을 수 있습니다.

6. 닮음은 같은 변환을 다른 좌표로 표현한다

가역행렬 MM으로

B=M−1AMB=M^{-1}AM

를 만들면 A,BA,B는 닮음 관계입니다. Ax=λxAx=\lambda x이면

B(M−1x)=M−1Ax=λ(M−1x).B(M^{-1}x)=M^{-1}Ax=\lambda(M^{-1}x).

고유값은 같고 고유벡터의 좌표가 바뀝니다. 특성다항식도

det⁡(B−λI)=det⁡(M−1(A−λI)M)=det⁡(A−λI)\det(B-\lambda I) =\det\bigl(M^{-1}(A-\lambda I)M\bigr) =\det(A-\lambda I)

로 같습니다. 대각화는 닮음변환의 결과를 대각행렬로 만드는 특별한 경우입니다.

단순한 행 소거는 보통 EAEA 형태이므로 닮음변환이 아닙니다. 소거법이 고유값까지 보존한다고 생각해서는 안 됩니다.

7. 실수 행렬에도 복소 고유값이 생긴다

90도 회전

R=[0−110]R=\begin{bmatrix}0&-1\\1&0\end{bmatrix}

은 영이 아닌 실수 벡터를 같은 직선에 남겨 두지 않습니다. 특성방정식은 λ2+1=0\lambda^2+1=0이므로 고유값은 i,−ii,-i입니다. 대응하는 벡터로 (1,−i)T(1,-i)^T, (1,i)T(1,i)^T를 선택할 수 있습니다.

이 벡터들은 켤레 내적에서 직교합니다.

[1i][1i]=1+i2=0.\begin{bmatrix}1&i\end{bmatrix} \begin{bmatrix}1\\i\end{bmatrix}=1+i^2=0.

일반 회전의 고유값은 eiθ,e−iθe^{i\theta},e^{-i\theta}이고 절댓값은 1입니다. 정사각 직교행렬 QQ에서는 복소 고유벡터까지 허용하면 ∥Qz∥2=∥z∥2\|Qz\|_2=\|z\|_2이므로 모든 고유값이 ∣λ∣=1|\lambda|=1을 만족합니다.

8. 중복 고유값과 대각화 실패

서로 다른 고유값에 대응하는 고유벡터들은 독립입니다. 따라서 nn개의 서로 다른 고유값이 있으면 해당 수 체계에서 대각화할 수 있습니다. 그러나 고유값이 반복될 때에는 추가 확인이 필요합니다.

  • 대수적 중복도: 특성다항식에서 그 근이 반복되는 횟수.
  • 기하적 중복도: 고유공간 N(A−λI)\mathcal N(A-\lambda I)의 차원.

기하적 중복도는 대수적 중복도를 넘지 못합니다. 모든 고유값에서 두 중복도가 같아 독립인 고유벡터가 총 nn개 모이면 대각화가 가능합니다.

예를 들어

J=[1101]J=\begin{bmatrix}1&1\\0&1\end{bmatrix}

는 고유값 1의 대수적 중복도가 2지만, (J−I)x=0(J-I)x=0에서 x2=0x_2=0이므로 고유공간은 1차원입니다. 대각화할 수 없으며

Jk=[1k01]J^k=\begin{bmatrix}1&k\\0&1\end{bmatrix}

로 거듭제곱이 커집니다. 고유값의 절댓값이 모두 1이라고 해서 거듭제곱이 항상 유계인 것은 아닙니다. 반면 I2I_2 역시 고유값 1이 두 번 나오지만 고유공간이 2차원이므로 대각화됩니다.

9. 대칭행렬은 정규직교 고유기저를 갖는다

실수 대칭행렬 S=STS=S^T에는 실수 고유값과 정규직교 고유기저가 존재합니다. 따라서

S=QΛQT.S=Q\Lambda Q^T.

서로 다른 고유값의 고유벡터가 직교하는 이유는

λxTy=(Sx)Ty=xTSy=μxTy\lambda x^Ty=(Sx)^Ty=x^TSy=\mu x^Ty

이기 때문입니다. λ≠μ\lambda\ne\mu이면 xTy=0x^Ty=0입니다. 같은 고유값의 고유공간 안에서도 정규직교 기저를 선택할 수 있습니다.

대칭이라고 해서 고유값이 모두 양수인 것은 아닙니다. [0110]\begin{bmatrix}0&1\\1&0\end{bmatrix}의 고유값은 1,−11,-1입니다. 고유값이 모두 양수인 대칭행렬이 다음 글의 양의 정부호 행렬입니다.

10. 이산 시간과 연속 시간의 변화

반복 곱과 정상 상태

직접 구성한 열 확률행렬

T=[0.70.20.30.8]T=\begin{bmatrix}0.7&0.2\\0.3&0.8\end{bmatrix}

의 고유값은 1,0.51,0.5입니다. 고유벡터로 확률벡터 π=(0.4,0.6)T\pi=(0.4,0.6)^T와 w=(1,−1)Tw=(1,-1)^T를 쓸 수 있습니다. 성분 합이 1인 초기 분포 p0p_0는 p0=π+cwp_0=\pi+cw로 표현되므로

Tkp0=π+c(0.5)kw⟶π.T^kp_0=\pi+c(0.5)^k w\longrightarrow\pi.

이 예제의 수렴은 나머지 고유값의 절댓값이 1보다 작기 때문입니다. 모든 확률행렬이 같은 방식으로 하나의 정상 상태에 수렴한다고 일반화할 수는 없습니다.

미분방정식

u′(t)=Au(t)u'(t)=Au(t)에서 고유벡터 방향의 해는 u(t)=eλtxu(t)=e^{\lambda t}x입니다. 대각화가 가능하고 u(0)=∑icixiu(0)=\sum_i c_ix_i이면

u(t)=∑icieλitxi.u(t)=\sum_i c_i e^{\lambda_i t}x_i.

이산 시간에서는 ∣λ∣|\lambda|가 1보다 작은지를 보고, 연속 시간에서는 Re⁡λ\operatorname{Re}\lambda가 0보다 작은지를 봅니다. 복소수 λ=a+ib\lambda=a+ib는 eate^{at}에 따른 크기 변화와 eibte^{ibt}에 따른 진동을 함께 나타냅니다.

11. 고유값을 성분처럼 더하거나 곱하면 안 된다

A+BA+B의 고유값이 A,BA,B의 고유값을 각각 더한 값인 것은 아닙니다. 예를 들어

A=[1101],B=[1011]A=\begin{bmatrix}1&1\\0&1\end{bmatrix},\qquad B=\begin{bmatrix}1&0\\1&1\end{bmatrix}

는 둘 다 고유값이 1,11,1이지만, A+BA+B의 고유값은 3,13,1입니다. ABAB의 고유값도 일반적으로 고유값끼리의 곱이 아닙니다.

공통 고유벡터 xx가 있어 Ax=λxAx=\lambda x, Bx=μxBx=\mu x라면 그 방향에서는 (A+B)x=(λ+μ)x(A+B)x=(\lambda+\mu)x, ABx=λμxABx=\lambda\mu x가 맞습니다. 공통 방향이라는 조건이 계산을 가능하게 합니다.

12. 지정 문제 풀이 — I.6의 2, 11, 15번

2번: A와 역행렬의 고유값

A=[0211],A−1=[−1/211/20].A=\begin{bmatrix}0&2\\1&1\end{bmatrix},\qquad A^{-1}=\begin{bmatrix}-1/2&1\\1/2&0\end{bmatrix}.

det⁡(A−λI)=λ2−λ−2\det(A-\lambda I)=\lambda^2-\lambda-2이므로 고유값은 2,−12,-1입니다. 대응하는 고유벡터는 (1,1)T(1,1)^T, (−2,1)T(-2,1)^T로 선택할 수 있습니다. 역행렬은 같은 고유벡터를 갖고 고유값은 1/2,−11/2,-1입니다.

tr⁡(A)=1=2−1\operatorname{tr}(A)=1=2-1, tr⁡(A−1)=−1/2=1/2−1\operatorname{tr}(A^{-1})=-1/2=1/2-1로 검산합니다.

11번: 전치하면 고유값은 같고 고유벡터는 달라질 수 있다

det⁡(AT−λI)=det⁡((A−λI)T)=det⁡(A−λI).\det(A^T-\lambda I)=\det((A-\lambda I)^T)=\det(A-\lambda I).

따라서 중복도까지 포함한 고유값이 같습니다. 하지만 예를 들어 A=[1102]A=\begin{bmatrix}1&1\\0&2\end{bmatrix}에서 고유값 1의 고유벡터는 (1,0)T(1,0)^T이고, ATA^T에서는 (1,−1)T(1,-1)^T를 선택해야 합니다. 같은 고유값 목록이 같은 고유벡터를 뜻하지 않습니다.

15번: 두 행렬을 대각화하기

첫 번째 행렬은

[1203]=[1101][1003][1−101].\begin{bmatrix}1&2\\0&3\end{bmatrix} =\begin{bmatrix}1&1\\0&1\end{bmatrix} \begin{bmatrix}1&0\\0&3\end{bmatrix} \begin{bmatrix}1&-1\\0&1\end{bmatrix}.

두 번째 행렬은

[1133]=[113−1][4000]14[113−1].\begin{bmatrix}1&1\\3&3\end{bmatrix} =\begin{bmatrix}1&1\\3&-1\end{bmatrix} \begin{bmatrix}4&0\\0&0\end{bmatrix} \frac14\begin{bmatrix}1&1\\3&-1\end{bmatrix}.

둘 다 대각화됩니다. 그러나 두 번째 행렬은 고유값 0을 가지므로 역행렬이 없습니다. 대각화 가능성과 가역성은 별개의 조건입니다.

두 경우 모두 A3=XΛ3X−1A^3=X\Lambda^3X^{-1}을 사용할 수 있습니다. 첫 번째의 세제곱은 [126027]\begin{bmatrix}1&26\\0&27\end{bmatrix}이고, 두 번째의 세제곱은 16A16A입니다. 역행렬 공식 XΛ−1X−1X\Lambda^{-1}X^{-1}은 첫 번째에만 적용됩니다.

13. NumPy로 확인하기

import numpy as np

A = np.array([[4., 2.], [1., 3.]])
X = np.array([[2., -1.], [1., 1.]])
lam = np.array([5., 2.])
assert np.allclose(A @ X, X @ np.diag(lam))
assert np.allclose(A, X @ np.diag(lam) @ np.linalg.inv(X))
assert np.allclose(np.linalg.matrix_power(A, 5),
X @ np.diag(lam**5) @ np.linalg.inv(X))

J = np.array([[1., 1.], [0., 1.]])
assert np.allclose(np.linalg.matrix_power(J, 7), [[1., 7.], [0., 1.]])
T = np.array([[.7, .2], [.3, .8]])
steady = np.array([.4, .6])
assert np.allclose(T @ steady, steady)
assert np.allclose(np.linalg.matrix_power(T, 40) @ [1., 0.], steady)

problem = np.array([[0., 2.], [1., 1.]])
vectors = np.array([[1., -2.], [1., 1.]])
assert np.allclose(problem @ vectors, vectors @ np.diag([2., -1.]))
assert np.allclose(np.linalg.inv(problem) @ vectors,
vectors @ np.diag([.5, -1.]))
first = np.array([[1., 2.], [0., 3.]])
second = np.array([[1., 1.], [3., 3.]])
assert np.allclose(np.linalg.matrix_power(first, 3), [[1., 26.], [0., 27.]])
assert np.allclose(np.linalg.matrix_power(second, 3), 16 * second)
print("Eigenvector, diagonalization, and dynamics checks passed.")

14. 복습 질문

  1. 영벡터를 고유벡터에서 제외하면서 고유값 0은 허용하는 이유는 무엇인가?
  2. 대각화 가능성과 가역성이 서로 다른 조건임을 예로 설명할 수 있는가?
  3. 닮음변환과 일반적인 행 소거는 어떻게 다른가?
  4. 중복 고유값이 있어도 대각화가 가능한 경우와 불가능한 경우를 구별할 수 있는가?
  5. 이산 시간과 연속 시간에서 감소를 판정하는 기준은 어떻게 다른가?

참고 자료

이전: Lecture 3 · 전체 목차 · 다음: Lecture 5