Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Lecture 34. 전체 정리 — 다섯 개의 분해

Five Decompositions, and the Map They Draw — 서술

서른세 편이 지났다.

우리는 연립방정식 하나에서 출발했다. 그것을 푸는 법을 배웠고, 해가 사는 공간의 모양을 배웠고, 해가 없을 때 가장 가까운 답을 찾는 법을 배웠다. 그다음에는 방향을 돌려 행렬 자체를 들여다보았다. 변하지 않는 방향을 찾았고, 시간의 흐름을 예측했고, 마침내 어떤 행렬이든 조건 없이 쪼갤 수 있는 도구에 닿았다.

그런데 이 많은 것이 결국 무엇이었는가. 한 장에 담을 수 있는가.

담을 수 있다. 다섯 개의 분해다. 이번 강의에서는 새로 배우는 것이 하나도 없다. 지금까지 만든 연장을 전부 꺼내 늘어놓고, 각각이 무엇을 요구하고 무엇을 돌려주는지 마지막으로 확인한다. 그리고 L10에서 뼈대만 그렸던 그림 한 장을 끝까지 채운다.


1. 다섯 개의 분해

후반부에서 만든 것을 한 표에 넣는다. 각 줄은 무엇을 요구하고 무엇을 돌려주는가로 읽으면 된다.

분해요구하는 것돌려주는 것강의파이썬
A=LUA = LU교환 없이 소거가 될 것피벗, 빠른 풀이, 행렬식L4scipy.linalg.lu
A=QRA = QR열이 독립일 것정규직교기저, 안정적인 최소제곱L17numpy.linalg.qr
S=QΛQTS = Q\Lambda Q^{\mathsf T}대칭일 것실수 고윳값, 직교 고유벡터, 부호 판정L25, L27numpy.linalg.eigh
A=SΛS1A = S\Lambda S^{-1}독립인 고유벡터가 nn 개일 것거듭제곱, eAte^{At}, 장기 거동L22~L24numpy.linalg.eig
A=UΣVTA = U\Sigma V^{\mathsf T}아무것도 없다랭크, 노름, 조건수, 최적 근사, A+A^{+}L29, L33numpy.linalg.svd

A=LUA = LU — 소거를 받아 적은 것

첫 줄은 L4의 것이다. 소거를 하며 쓴 곱수를 아래삼각행렬에 모으고, 소거가 끝난 모습을 위삼각행렬에 두면 그대로 분해가 된다.

A=LU,detA=k=1nukkA = LU, \qquad \det A = \prod_{k=1}^{n} u_{kk}

(1)의 오른쪽 등식이 이 분해의 부산물이다. LL 의 대각선이 전부 1이므로 detL=1\det L = 1 이고, 삼각행렬의 행렬식은 대각선의 곱이므로(L18) 피벗을 곱하면 행렬식이 나온다. 한 번의 소거로 해와 행렬식을 동시에 얻는 셈이다. 그리고 LLUU 를 쥐고 있으면 우변이 바뀔 때마다 n3/3n^3/3 을 다시 치를 필요 없이 n2n^2 으로 풀 수 있다.

A=QRA = QR — 열을 직각으로 세운 것

둘째 줄은 L17의 것이다. 그람-슈미트로 열을 하나씩 직교화하면 QQ 가 나오고, 그 과정에서 쓴 계수가 RR 에 남는다.

A=QR,QTQ=I,R 는 위삼각A = QR, \qquad Q^{\mathsf T}Q = I, \qquad R \ \text{는 위삼각}

(2)의 세 조건이 함께 있으면 최소제곱이 쉬워진다. 정규방정식에 A=QRA = QR 을 그대로 넣어 보자.

RTQTQ=IRx^=RTQTbRx^=QTbR^{\mathsf T}\underbrace{Q^{\mathsf T}Q}_{=\,I}R\,\hat{\vv{x}} = R^{\mathsf T}Q^{\mathsf T}\vv{b} \qquad\Longrightarrow\qquad R\,\hat{\vv{x}} = Q^{\mathsf T}\vv{b}

(3)의 화살표를 건너려면 양변 앞의 RTR^{\mathsf T} 를 지워야 하는데, 열이 독립이면 RR 이 가역이라 지울 수 있다. 남는 것은 후진 대입 한 번이다. ATAA^{\mathsf T}A 를 아예 만들지 않는다는 점이 L33에서 본 그 차이를 만든다.

S=QΛQTS = Q\Lambda Q^{\mathsf T} — 대칭이 받는 상

셋째 줄은 L25의 스펙트럼 정리다. 대칭이기만 하면 고윳값이 전부 실수이고 고유벡터를 직교로 고를 수 있다. 그래서 S1S^{-1}STS^{\mathsf T} 가 된다.

S=QΛQT=i=1nλiqiqiTS = Q\Lambda Q^{\mathsf T} = \sum_{i=1}^{n} \lambda_i \, \vv{q}_i \vv{q}_i^{\mathsf T}

(4)의 오른쪽은 이 분해를 다르게 읽은 것이다. qiqiT\vv{q}_i\vv{q}_i^{\mathsf T}qi\vv{q}_i 방향으로의 투영행렬이므로(L15), 대칭행렬은 서로 직교하는 투영들을 λi\lambda_i 로 가중해 더한 것이 된다. 여기에 고윳값의 부호만 얹으면 L27의 양정치 판정이 그대로 나온다. 전부 양수면 그릇이고 섞이면 안장이다.

A=SΛS1A = S\Lambda S^{-1} — 좋은 좌표계로 갈아타는 것

넷째 줄은 L22의 대각화다. 고유벡터를 열에 세워 SS 를 만들면, 그 좌표계에서는 행렬이 대각행렬이 된다. 거듭제곱이 곧바로 따라온다.

Ak=SΛkS1,Λk=diag ⁣(λ1k,,λnk)A^{k} = S\Lambda^{k}S^{-1}, \qquad \Lambda^{k} = \diag\!\left(\lambda_1^{k}, \dots, \lambda_n^{k}\right)

(5)의 가운데에서 S1SS^{-1}Sk1k-1 번 사라진 것이 계산의 전부다. 그런데 이 식의 값어치는 속도가 아니다. kk 가 커질 때 무슨 일이 벌어지는지를 λi\lambda_i 만 보고 알 수 있다는 것이 값어치다. λ<1\lvert\lambda\rvert < 1 이면 0으로 가라앉고 λ>1\lvert\lambda\rvert > 1 이면 터진다. L23의 미분방정식과 L24의 마코브 행렬이 전부 이 한 줄에서 나왔다.

A=UΣVTA = U\Sigma V^{\mathsf T} — 조건이 하나도 없는 것

다섯째 줄이 L29다. 정사각이 아니어도 되고, 대칭이 아니어도 되고, 랭크가 모자라도 된다.

A=UΣVT=i=1rσiuiviT,σ1σr>0A = U\Sigma V^{\mathsf T} = \sum_{i=1}^{r} \sigma_i \, \vv{u}_i \vv{v}_i^{\mathsf T}, \qquad \sigma_1 \ge \dots \ge \sigma_r > 0

(6)의 오른쪽 합은 (4)의 합과 모양이 닮았지만 결정적으로 다른 데가 있다. 대칭행렬은 qi\vv{q}_i 한 벌로 자기 자신을 적었고, 여기서는 ui\vv{u}_ivi\vv{v}_i 두 벌을 쓴다. 들어가는 공간과 나오는 공간이 다르니 기저도 두 벌이어야 하는 것이다. 그 대가로 조건이 사라졌다.


2. 조건은 사슬이 아니다

다섯 줄을 늘어놓으면 자연스럽게 이런 문장을 쓰고 싶어진다.

대칭  대각화 가능  열 독립  소거 가능  모든 행렬\text{대칭} \ \subset\ \text{대각화 가능} \ \subset\ \text{열 독립} \ \subset\ \text{소거 가능} \ \subset\ \text{모든 행렬}

(7)의 포함 사슬은 틀렸다. 맨 오른쪽 고리는 무엇이든 모든 행렬 안에 들어가니 따질 것이 없고, 맨 왼쪽 고리는 참이다. 그런데 가운데 두 고리가 거짓이다. L32에서도 같은 경고를 했으니, 이미 배운 행렬로 반례를 직접 세워 보자.

대칭인데 LULU 가 없다

L2에서 피벗이 0이 되는 경우를 보았다. 가장 작은 예가 이것이다.

P=[0110],P=PT,det[0]=0P = \begin{bmatrix} 0 & 1 \\ 1 & 0 \end{bmatrix}, \qquad P = P^{\mathsf T}, \qquad \det\begin{bmatrix} 0 \end{bmatrix} = 0

(8)의 행렬은 대칭이므로 스펙트럼 정리가 무조건 적용된다. 고윳값은 1-1 이고 고유벡터는 (1,1)(1,1)(1,1)(1,-1) 로 직교한다. 그런데 왼쪽 위 성분이 0이라 첫 피벗이 잡히지 않는다. 행을 바꾸지 않고는 소거를 시작조차 할 수 없다. 대칭이 LULU 를 보장하지 않는다.

LULU 는 있는데 대각화가 안 된다

L28의 결함 행렬을 가져오면 반대 방향의 반례가 된다.

J=[3103],J=IJ  가 곧 LU,rank(J3I)=1J = \begin{bmatrix} 3 & 1 \\ 0 & 3 \end{bmatrix}, \qquad J = I \cdot J \ \text{ 가 곧 } LU, \qquad \rank(J - 3I) = 1

(9)JJ 는 이미 위삼각이므로 L=IL = I 로 두면 소거가 끝나 있다. LULU 가 있고 열도 독립이다. 그런데 고윳값 3의 대수적 중복도가 2인데 rank(J3I)=1\rank(J - 3I) = 1 이라 기하적 중복도가 21=12 - 1 = 1 이다. 고유벡터가 하나뿐이니 대각화는 불가능하다.

대각화는 되는데 QRQR 이 없다

세 번째 반례는 이 강의에서 계속 쓸 행렬이다.

A=[112101011],a3=a1+a2A = \begin{bmatrix} 1 & 1 & 2 \\ 1 & 0 & 1 \\ 0 & 1 & 1 \end{bmatrix}, \qquad \vv{a}_3 = \vv{a}_1 + \vv{a}_2

(10)의 셋째 열이 앞의 두 열의 합이므로 열이 종속이고, 따라서 QRQR 에서 RR 의 마지막 대각 성분이 0이 된다. 그런데 고윳값을 구해 보면 이야기가 달라진다. 대각합이 2, 행렬식이 0, 2차 주소행렬식의 합이 -1 이므로 특성다항식이

λ32λ2λ=λ(λ22λ1)=0λ=0, 1±2\lambda^{3} - 2\lambda^{2} - \lambda = \lambda\left(\lambda^{2} - 2\lambda - 1\right) = 0 \qquad\Longrightarrow\qquad \lambda = 0,\ 1 \pm \sqrt2

이 된다. (11)의 세 근이 서로 다르므로 고유벡터가 세 개 나오고 대각화가 된다. 랭크가 모자란 것과 결함인 것은 전혀 다른 이야기라는 뜻이다.

참인 포함은 양 끝뿐이다

반례 셋이 사슬의 가운데를 끊었다. 그러면 남는 것은 무엇인가.

대칭  대각화 가능,소거 가능  모든 행렬,가운데 둘은 거짓\text{대칭} \ \subset\ \text{대각화 가능}, \qquad \text{소거 가능} \ \subset\ \text{모든 행렬}, \qquad \text{가운데 둘은 거짓}

(12)의 왼쪽 포함은 스펙트럼 정리 그 자체다. 대칭이면 고유벡터를 정규직교로 고를 수 있으니 nn 개가 반드시 나온다. 반대 방향은 거짓이다. (2103)\begin{pmatrix}2&1\\0&3\end{pmatrix} 는 고윳값이 2와 3으로 달라 대각화되지만 대칭이 아니다. 오른쪽 포함은 사정이 다르다. 어떤 행렬이든 SVD를 가지므로 마지막 칸에는 조건이랄 것이 없고, 그래서 이 고리는 참일 수밖에 없다.

왼쪽은 이 책에 나온 행렬 여덟 개를 다섯 분해에 통과시킨 결과다. 포개지는 줄은 둘뿐이다.
셋째 줄이 넷째 줄에 담기고, 맨 아랫줄이 나머지를 전부 담는다. 그 밖에는 어느 줄도 다른
줄을 품지 않는다. 오른쪽은 다섯 종류의 무작위 행렬 2000개로 같은 것을 잰 것이다.
LU 와 QR 의 막대가 똑같이 80%인데도 걸리는 족이 서로 다르다. 강의 번호는 그 행렬이
처음 나온 자리를 가리킨다.

Figure 1:왼쪽은 이 책에 나온 행렬 여덟 개를 다섯 분해에 통과시킨 결과다. 포개지는 줄은 둘뿐이다. 셋째 줄이 넷째 줄에 담기고, 맨 아랫줄이 나머지를 전부 담는다. 그 밖에는 어느 줄도 다른 줄을 품지 않는다. 오른쪽은 다섯 종류의 무작위 행렬 2000개로 같은 것을 잰 것이다. LULUQRQR 의 막대가 똑같이 80%인데도 걸리는 족이 서로 다르다. 강의 번호는 그 행렬이 처음 나온 자리를 가리킨다.


3. 같은 행렬 하나에 다섯을 다 걸어 본다

그러면 다섯을 전부 통과하는 행렬은 어떤 것인가. 대칭이면서 소거가 되고 랭크가 꽉 차야 한다. L27의 삼중대각행렬이 바로 그것이다.

T=[210121012]T = \begin{bmatrix} 2 & -1 & 0 \\ -1 & 2 & -1 \\ 0 & -1 & 2 \end{bmatrix}

(13)TT 는 대칭이고, 선행 주소행렬식이 2,3,42, 3, 4 로 전부 0이 아니며, 가역이다. 다섯 줄이 전부 걸린다. 하나씩 걸어 보자.

소거하면 피벗이 규칙적으로 나온다.

피벗=2, 32, 43,2×32×43=4=detT\text{피벗} = 2,\ \tfrac32,\ \tfrac43, \qquad 2 \times \tfrac32 \times \tfrac43 = 4 = \det T

(14)의 곱이 (1)의 등식을 그대로 확인해 준다. 행 교환이 한 번도 필요하지 않으므로 순열행렬 없이 T=LUT = LU 가 된다. QRQR 로 가면 QQ 의 열이 TT 의 열을 직교화한 것이 되고, RR 의 대각 성분 절댓값의 곱이 다시 4가 된다. 직교행렬은 부피를 바꾸지 않기 때문이다(L20).

고윳값을 구하면 이렇게 나온다.

λ=2+23.414,λ=2,λ=220.586\lambda = 2 + \sqrt2 \approx 3.414, \qquad \lambda = 2, \qquad \lambda = 2 - \sqrt2 \approx 0.586

(15)의 셋이 전부 실수이고 전부 양수다. 실수인 것은 대칭이기 때문이고(L25), 양수인 것은 피벗이 전부 양수이기 때문이다(L27). 곱하면 (2+2)2(22)=2(42)=4(2+\sqrt2)\cdot 2\cdot(2-\sqrt2) = 2(4-2) = 4 로 역시 행렬식이다.

이제 마지막 세 줄을 나란히 세워 보자. 여기서 재미있는 일이 벌어진다.

Q=S=U=V,Λ=Σ,S1=QT=VTQ = S = U = V, \qquad \Lambda = \Sigma, \qquad S^{-1} = Q^{\mathsf T} = V^{\mathsf T}

(16)의 등식들이 뜻하는 바는 세 분해가 같은 것으로 무너졌다는 것이다. 대칭이라 고유벡터가 직교하니 SS 를 굳이 비직교로 고를 이유가 없고, 고윳값이 전부 양수라 σi=λi=λi\sigma_i = \lvert\lambda_i\rvert = \lambda_i 이며, ATA=T2A^{\mathsf T}A = T^2 의 고유벡터가 TT 의 고유벡터와 같기 때문이다.

iσi=4=detT,κ(T)=σ1σ3=2+222=3+225.83\prod_{i} \sigma_i = 4 = \lvert\det T\rvert, \qquad \kappa(T) = \frac{\sigma_1}{\sigma_3} = \frac{2 + \sqrt2}{2 - \sqrt2} = 3 + 2\sqrt2 \approx 5.83

(17)의 왼쪽은 L29에서 확인한 등식이고 오른쪽은 L32의 조건수다. 분모와 분자에 2+22+\sqrt2 를 곱하면 (2+2)242=6+422\frac{(2+\sqrt2)^2}{4-2} = \frac{6+4\sqrt2}{2} 이 되어 3+223 + 2\sqrt2 가 나온다. 5.83이면 아주 얌전한 행렬이다.

T 하나를 다섯 방식으로 쪼갠 것이다. 아래 세 줄의 숫자가 글자 하나까지 같다.

Figure 2:TT 하나를 다섯 방식으로 쪼갠 것이다. 아래 세 줄의 숫자가 글자 하나까지 같다.


4. 네 부분공간 최종본

이제 이 강의의 결론이다. L10에서 네 개의 기본 부분공간을 그렸고, 그때는 상자 네 개와 차원만 있었다. L29에서 그 상자에 정규직교기저를 채웠다. L33에서 되돌아오는 화살표를 그렸다. 셋을 합치면 이런 정리가 된다.

Theorem 1의 정리를 (10)의 행렬로 끝까지 확인해 보자. 랭크가 2이고 3×33 \times 3 이므로 네 칸이 전부 비어 있지 않다.

v\vv{v} 를 구한다

L29의 절차대로 ATAA^{\mathsf T}A 부터 만든다.

ATA=[213123336]A^{\mathsf T}A = \begin{bmatrix} 2 & 1 & 3 \\ 1 & 2 & 3 \\ 3 & 3 & 6 \end{bmatrix}

(19)의 행렬은 대칭이고 셋째 열이 앞 두 열의 합이라 랭크가 2다. 고유벡터를 눈으로 찾을 수 있다. (1,1,2)(1,1,2) 를 곱하면 (2+1+6, 1+2+6, 3+3+12)=(9,9,18)(2+1+6,\ 1+2+6,\ 3+3+12) = (9,9,18) 이라 정확히 9배이고, (1,1,0)(1,-1,0) 을 곱하면 (21, 12, 33)=(1,1,0)(2-1,\ 1-2,\ 3-3) = (1,-1,0) 이라 1배다. 그리고 (1,1,1)(1,1,-1) 을 곱하면 (2+13, 1+23, 3+36)=(0,0,0)(2+1-3,\ 1+2-3,\ 3+3-6) = (0,0,0) 이다.

σ1=9=3,σ2=1=1,σ3=0\sigma_1 = \sqrt9 = 3, \qquad \sigma_2 = \sqrt1 = 1, \qquad \sigma_3 = 0

(20)의 세 값이 ATAA^{\mathsf T}A 의 고윳값에 제곱근을 씌운 것이다. 0이 아닌 것이 둘이므로 랭크가 2라는 사실이 여기서도 확인된다. 대응하는 고유벡터를 길이 1로 맞추면 다음과 같다.

v1=16[112],v2=12[110],v3=13[111]\vv{v}_1 = \frac{1}{\sqrt6}\begin{bmatrix} 1 \\ 1 \\ 2 \end{bmatrix}, \qquad \vv{v}_2 = \frac{1}{\sqrt2}\begin{bmatrix} 1 \\ -1 \\ 0 \end{bmatrix}, \qquad \vv{v}_3 = \frac{1}{\sqrt3}\begin{bmatrix} 1 \\ 1 \\ -1 \end{bmatrix}

(21)의 앞 둘이 행공간의 정규직교기저이고 셋째가 영공간의 기저다. 서로 직교하는지는 내적을 재 보면 된다. v1v2=11+0=0\vv{v}_1 \cdot \vv{v}_2 = 1 - 1 + 0 = 0 이고 v1v3=1+12=0\vv{v}_1 \cdot \vv{v}_3 = 1 + 1 - 2 = 0 이며 v2v3=11+0=0\vv{v}_2\cdot\vv{v}_3 = 1 - 1 + 0 = 0 이다.

u\vv{u} 를 구한다

ui\vv{u}_i 는 따로 구하는 것이 아니라 AviA\vv{v}_iσi\sigma_i 로 나눠 얻는다. L29에서 이 순서를 어기면 부호가 어긋난다고 경고했던 그 자리다.

u1=Av13=136[633]=16[211]\vv{u}_1 = \frac{A\vv{v}_1}{3} = \frac{1}{3\sqrt6}\begin{bmatrix} 6 \\ 3 \\ 3 \end{bmatrix} = \frac{1}{\sqrt6}\begin{bmatrix} 2 \\ 1 \\ 1 \end{bmatrix}

(22)의 가운데 벡터는 A(1,1,2)=(1+1+4, 1+0+2, 0+1+2)A(1,1,2) = (1+1+4,\ 1+0+2,\ 0+1+2) 를 계산한 것이다. 분모의 3이 (6,3,3)(6,3,3)(2,1,1)(2,1,1) 로 줄여 준다. 둘째도 같은 방식으로 나온다.

u2=Av21=12[011],u3=13[111]\vv{u}_2 = \frac{A\vv{v}_2}{1} = \frac{1}{\sqrt2}\begin{bmatrix} 0 \\ 1 \\ -1 \end{bmatrix}, \qquad \vv{u}_3 = \frac{1}{\sqrt3}\begin{bmatrix} -1 \\ 1 \\ 1 \end{bmatrix}

(23)u2\vv{u}_2A(1,1,0)=(11, 10, 01)A(1,-1,0) = (1-1,\ 1-0,\ 0-1) 에서 나왔고, u3\vv{u}_3 은 앞의 둘에 직교하도록 고른 것이다. 이 셋이 L29의 앵커 CC 에서 나온 u\vv{u}똑같다. AA 의 앞 두 열이 바로 그 CC 이기 때문이다.

Av3=0,ATu3=0A\vv{v}_3 = \vv{0}, \qquad A^{\mathsf T}\vv{u}_3 = \vv{0}

(24)의 두 등식이 아래 두 칸의 정체를 확정한다. v3\vv{v}_3 이 영공간에 있고 u3\vv{u}_3 이 좌영공간에 있다. 네 칸의 차원을 세면 이렇게 맞아떨어진다.

2dimC(AT)+1dimN(A)=3=n,2dimC(A)+1dimN(AT)=3=m\underbrace{2}_{\dim\Col(A^{\mathsf T})} + \underbrace{1}_{\dim\Nul(A)} = 3 = n, \qquad \underbrace{2}_{\dim\Col(A)} + \underbrace{1}_{\dim\Nul(A^{\mathsf T})} = 3 = m

(25)의 두 등식이 L10의 차원의 기본정리다. 왼쪽은 정의역 쪽 R3\R^3 을 두 조각으로 나눈 것이고 오른쪽은 치역 쪽 R3\R^3 을 나눈 것이며, 두 조각은 직교한다(L14).

화살표를 양쪽으로 그린다

Theorem 1의 두 화살표를 이 행렬에서 숫자로 적으면 이렇게 된다.

Av1=3u1,A+u1=13v1,Av2=u2,A+u2=v2A\vv{v}_1 = 3\vv{u}_1, \quad A^{+}\vv{u}_1 = \tfrac13\vv{v}_1, \qquad A\vv{v}_2 = \vv{u}_2, \quad A^{+}\vv{u}_2 = \vv{v}_2

(26)의 두 쌍이 서로를 되돌린다. v1\vv{v}_1 은 3배로 늘어나 u1\vv{u}_1 이 되고, u1\vv{u}_1 은 3으로 나뉘어 v1\vv{v}_1 로 돌아온다. v2\vv{v}_2 는 1배이므로 길이가 그대로다. 행공간과 열공간 사이는 왕복이 된다.

아래 두 칸은 사정이 다르다.

Av3=0,A+u3=0,σ3=0  1σ3 는 없다A\vv{v}_3 = \vv{0}, \qquad A^{+}\vv{u}_3 = \vv{0}, \qquad \sigma_3 = 0 \ \Rightarrow\ \frac{1}{\sigma_3} \ \text{는 없다}

(27)의 마지막 조각이 편도인 이유다. 1/σ31/\sigma_3 을 쓸 수 없으니 Σ+\Sigma^{+} 의 그 자리에 0을 넣을 수밖에 없었다(L33). 그래서 v3\vv{v}_3 방향으로 들어 있던 정보는 0으로 눌린 뒤 어떤 행렬로도 되찾을 수 없다.

실제로 만들어 보면 이렇게 생겼다.

A+=VΣ+UT=19[154145211]A^{+} = V\Sigma^{+}U^{\mathsf T} = \frac{1}{9}\begin{bmatrix} 1 & 5 & -4 \\ 1 & -4 & 5 \\ 2 & 1 & 1 \end{bmatrix}

(28)의 행렬에 AA 를 곱해 보면 단위행렬이 나오지 않는다. 나올 수가 없다. AA 가 3차원을 2차원으로 눌렀으니 그 손실을 메울 방법이 없기 때문이다. 대신 이런 것이 나온다.

A+A=Iv3v3T,AA+=Iu3u3TA^{+}A = I - \vv{v}_3\vv{v}_3^{\mathsf T}, \qquad AA^{+} = I - \vv{u}_3\vv{u}_3^{\mathsf T}

(29)의 두 행렬은 각각 행공간으로의 투영열공간으로의 투영이다. II 에서 한 방향의 투영을 뺐으니 남는 것은 그 방향의 직교여공간으로의 투영이다(L15). 숫자로 적으면 둘 다 대각선이 23\tfrac23 인 행렬이고, 고윳값은 1,1,01, 1, 0 이다. 살렸다, 살렸다, 죽였다.

위쪽 두 그림이 실제 기하다. 왼쪽에서 \vv{v}_1, \vv{v}_2 가 평면을 이루고 \vv{v}_3 이
그 평면에 수직인 직선을 이룬다. 오른쪽에서 그 평면이 \vv{u}_1, \vv{u}_2 의 평면으로
옮겨 가는데, \vv{v}_1 방향만 3배로 늘어난다. 아래 지도가 그 일을 네 칸으로 정리한
것이다.

Figure 3:위쪽 두 그림이 실제 기하다. 왼쪽에서 v1,v2\vv{v}_1, \vv{v}_2 가 평면을 이루고 v3\vv{v}_3 이 그 평면에 수직인 직선을 이룬다. 오른쪽에서 그 평면이 u1,u2\vv{u}_1, \vv{u}_2 의 평면으로 옮겨 가는데, v1\vv{v}_1 방향만 3배로 늘어난다. 아래 지도가 그 일을 네 칸으로 정리한 것이다.


5. 세 개의 태도

공식은 잊어도 좋다. 그러나 다음 셋은 이 교재가 남기고 싶은 것이다.

옳은 공식과 쓰는 공식은 다르다

첫째 태도다. 후반부에서 이 교훈을 네 번 만났다.

크래머(L20): (n+1)n!소거(L4): 13n3\text{크래머(L20)}:\ (n+1)\,n! \qquad\text{대}\qquad \text{소거(L4)}:\ \tfrac13 n^{3}

(30)의 두 값은 n=20n = 20 에서 각각 약 5.1×10195.1\times10^{19}2,6672{,}667 이다. 크래머 공식은 해를 행렬식의 비로 아름답게 적어 주지만, 그 아름다움을 계산하려면 우주의 나이가 필요하다. 여인수 전개(L19)도 n!n! 이라 사정이 같다.

J(ϵ)=[31ϵ3]κ(S)1ϵJ(\epsilon) = \begin{bmatrix} 3 & 1 \\ \epsilon & 3 \end{bmatrix} \qquad\Longrightarrow\qquad \kappa(S) \sim \frac{1}{\sqrt\epsilon}

(31)의 관계가 L28의 결론이었다. ϵ\epsilon10-8 만 흔들어도 고윳값이 3±1043 \pm 10^{-4} 로 갈라지고 고유벡터 행렬의 조건수가 104 이 된다. 조르당 형은 존재하지만 수치적으로는 존재하지 않는다.

κ ⁣(ATA)=κ(A)2\kappa\!\left(A^{\mathsf T}A\right) = \kappa(A)^{2}

(32)의 등식이 L33의 결론이었다. 정규방정식을 그대로 코드로 옮기면 조건수가 제곱되어 유효자릿수가 절반으로 준다. 네 번 다 이유가 같다. 답이 있다는 것과 그 답을 손에 쥘 수 있다는 것은 다르다.

좋은 기저를 고르면 어려운 문제가 쉬워진다

둘째 태도다. 대각화가 그 첫 사례였다.

Akx0=iciλiksi,x0=icisiA^{k}\vv{x}_0 = \sum_{i} c_i \lambda_i^{k}\, \vv{s}_i, \qquad \vv{x}_0 = \sum_i c_i \vv{s}_i

(33)의 왼쪽은 고유벡터 기저에서 적은 것이다. 표준기저에서는 행렬을 kk 번 곱해야 알 수 있는 것이, 좋은 기저에서는 스칼라를 kk 제곱하는 것으로 바뀐다. 기저를 바꿨을 뿐인데 문제의 난이도가 달라졌다.

직접 DFT: N2FFT(L26): Nlog2N\text{직접 DFT}:\ N^{2} \qquad\text{대}\qquad \text{FFT(L26)}:\ N\log_2 N

(34)의 두 값은 N=220N = 2^{20} 에서 52,42952{,}429 배 차이가 난다. 푸리에 행렬을 반씩 쪼개는 요령 하나가 신호처리 전체를 실용 가능하게 만들었다. L31의 DCT도, L29의 SVD도 같은 이야기의 다른 판본이다. 어느 좌표계에서 보느냐가 문제의 크기를 정한다.

조건이 없는 도구가 가장 강하다

셋째 태도다. 앞의 둘이 요령이라면 이것은 원칙에 가깝다.

λC 일 수 있고, 정사각이 아니면 아예 없다σi0 는 언제나 있다\lambda \in \C \ \text{일 수 있고, 정사각이 아니면 아예 없다} \qquad\text{대}\qquad \sigma_i \ge 0 \ \text{는 언제나 있다}

(35)의 대비가 SVD의 값어치다. 무작위 4×44\times4 실행렬 400개를 만들어 보면 그중 88%가 복소 고윳값을 갖는다. 4×34\times3 이면 고윳값이라는 개념 자체가 없다. 그런데 특이값은 어느 쪽에서도 음이 아닌 실수로 존재한다.

왼쪽은 n 이 커질 때 세 방법의 연산 횟수, 가운데는 기저를 바꿨을 때의 값어치,
오른쪽은 고윳값이 복소평면 어디로든 흩어지는 동안 특이값은 늘 실수축의 오른쪽에만
있다는 사실이다.

Figure 4:왼쪽은 nn 이 커질 때 세 방법의 연산 횟수, 가운데는 기저를 바꿨을 때의 값어치, 오른쪽은 고윳값이 복소평면 어디로든 흩어지는 동안 특이값은 늘 실수축의 오른쪽에만 있다는 사실이다.


6. 전체 역인덱스

찾아볼 수 있게 개념과 강의 번호를 붙여 둔다.

전반부 — Ax=bA\vv{x} = \vv{b} 를 푸는 문제

개념강의
행 그림과 열 그림L1
소거법, 피벗, 치환행렬L2
행렬 곱셈의 네 관점, 역행렬, 가우스-조르당L3
LULU 분해, LDULDU, PA=LUPA = LUL4
순열행렬, 전치, 벡터공간, 부분공간L5
열공간, 영공간L6
사다리꼴, 기약 사다리꼴, 특수해, 자유변수L7
완전해, 랭크에 따른 네 경우L8
선형독립, 생성, 기저, 차원L9
네 개의 기본 부분공간, 차원의 기본정리L10
행렬공간, 랭크 1 행렬, 함수공간L11
결합행렬, 키르히호프 법칙, ATCAA^{\mathsf T}CAL12
A=CRA = CR, 행렬 해부 절차L13
직교 부분공간, 직교여공간, ATAA^{\mathsf T}AL14
투영, 투영행렬, IPI - PL15
정규방정식, 최소제곱L16
정규직교, 직교행렬, 그람-슈미트, QRQRL17

후반부 — 행렬 AA 자체를 쪼개는 문제

개념강의
행렬식의 세 공리, 부피L18
빅 포뮬러, 여인수 전개L19
크래머 공식, 여인수 역행렬, 야코비안L20
고윳값, 고유벡터, 특성방정식L21
대각화, 거듭제곱, 피보나치L22
미분방정식, eAte^{At}, 안정성L23
마코브 행렬, 정상상태L24
스펙트럼 정리, 실베스터 관성 법칙L25
복소 내적, 에르미트, 유니타리, 푸리에 행렬, FFTL26
양의 정부호 다섯 조건, 에너지, 촐레스키L27
유사 행렬, 조르당 표준형, ϵ\sqrt\epsilon 법칙L28
특이값 분해, 네 부분공간의 기저, 에카르트-영L29
선형변환, 기저와 행렬, M1AMM^{-1}AML30
기저 변환, DCT, 웨이블릿, 파세발L31
진단 흐름도, 조건수, 헷갈리는 여섯 쌍L32
좌·우 역행렬, 의사역행렬, 무어-펜로즈, 능형회귀L33
다섯 분해, 네 부분공간 최종본L34

파이썬 색인

함수처음 쓴 강의무엇에
numpy.linalg.solveL1Ax=bA\vv{x} = \vv{b}
numpy.linalg.matrix_rankL1랭크
numpy.linalg.detL1행렬식
numpy.linalg.invL3역행렬 (되도록 쓰지 마라)
numpy.linalg.condL3조건수
scipy.linalg.luL4PA=LUPA = LU
scipy.linalg.null_spaceL6영공간의 정규직교기저
numpy.linalg.lstsqL6최소제곱
scipy.linalg.orthL9열공간의 정규직교기저
numpy.linalg.qrL17A=QRA = QR
numpy.linalg.eigL21일반 고윳값
numpy.linalg.matrix_powerL22AkA^{k}
scipy.linalg.expmL23eAte^{At}
numpy.linalg.eighL25대칭 고윳값
numpy.fft.fftL26FFT
numpy.linalg.choleskyL27양정치 판정
scipy.linalg.schurL28조르당 대신 쓰는 것
numpy.linalg.svdL29A=UΣVTA = U\Sigma V^{\mathsf T}
numpy.linalg.pinvL30A+A^{+}
scipy.fft.dctL31코사인 변환

7. 다음 여정

일곱 개의 막과 그 위에 놓인 다섯 개의 별. 아래 두 줄은 되풀이해 나타난 두 개의 태도가
어느 강의에서 나왔는지 표시한 것이다.

Figure 5:일곱 개의 막과 그 위에 놓인 다섯 개의 별. 아래 두 줄은 되풀이해 나타난 두 개의 태도가 어느 강의에서 나왔는지 표시한 것이다.

Figure 5의 지도에서 오른쪽 끝의 점선이 여기서부터다. 세 편을 준비해 두었다.

보강 1 — 주성분분석과 SVD. 공분산행렬은 대칭이고 양의 준정부호라 L25와 L27이 그대로 통한다. 그런데 실무 라이브러리는 공분산행렬을 만들지 않고 데이터 행렬에 직접 SVD를 건다. 이유는 (32)의 등식 하나다.

보강 2 — 수치선형대수 입문. 5절 첫째 태도의 네 사례가 조건수라는 하나의 개념으로 설명된다는 것을 보인다. 그리고 고윳값을 실제로 구하는 법을 다룬다. L22에서 벡터에 행렬을 거듭 곱한 것이 곧 거듭제곱법이었다.

보강 3 — 그래프 라플라시안. L12의 결합행렬 AA 로부터 만든 라플라시안이다.

L=ATA,dimN(L)=(연결 성분의 개수)L = A^{\mathsf T}A, \qquad \dim \Nul(L) = (\text{연결 성분의 개수})

(36)의 왼쪽은 대칭이고 양의 준정부호라 지금까지의 도구가 전부 통한다. 오른쪽 등식은 L12에서 이미 본 것이고, 여기에 두 번째로 작은 고윳값을 더하면 그래프를 둘로 자르는 선이 나온다.

그 너머에는 최적화와 함수해석과 양자역학이 있다. 어느 길로 가든 Figure 3의 그림은 계속 따라온다.


8. 자주 하는 오해

① 다섯 분해는 조건이 느슨해지는 순서로 늘어선다. 아니다. 2절이 반례 셋을 보였다. 확실한 것은 대칭이 대각화 가능에 포함된다는 것과 맨 아랫줄이 무조건이라는 것뿐이다. 사슬이 아니라 연장통이다.

② SVD 하나만 알면 나머지는 몰라도 된다. 아니다. SVD는 AkA^{k} 의 극한을 알려주지 않는다. 그것은 고윳값의 몫이다. 방정식을 빠르게 풀어야 할 때 LULU 대신 SVD를 쓰면 몇 배가 느리다. 조건이 없다는 것과 가장 많이 알려준다는 것은 다른 말이다.

③ 고윳값과 특이값은 대체로 비슷한 수다. 아니다. σi=λi\sigma_i = \lvert\lambda_i\rvert 가 되는 것은 정규행렬, 곧 ATA=AATA^{\mathsf T}A = AA^{\mathsf T} 일 때다(L32). 대칭행렬은 그중 한 종류일 뿐이고 직교행렬도 정규행렬이다. Figure 1의 90도 회전이 대칭이 아니면서 λ\lvert\lambda\rvertσ\sigma 가 둘 다 1인 예다. 반대로 (3045)\begin{pmatrix}3&0\\4&5\end{pmatrix} 는 정규행렬이 아니라서 고윳값이 3과 5인데 특이값은 356.713\sqrt5 \approx 6.7152.24\sqrt5 \approx 2.24 다. 노름은 5가 아니라 6.71이다.

④ 네 부분공간 그림은 AA 가 정사각일 때의 이야기다. 아니다. 오히려 정사각이 아닐 때 더 요긴하다. mnm \neq n 이면 왼쪽 상자와 오른쪽 상자가 사는 공간의 차원부터 다르고, 그 차이가 곧 해가 없거나 무한히 많은 이유다. 4절에서 m=n=3m = n = 3 으로 잡은 것은 그림을 그리기 위해서다.

⑤ 랭크가 모자란 행렬은 대각화도 안 된다. 아니다. (11)의 계산이 반례다. 랭크가 모자란 것은 고윳값 0이 있다는 뜻일 뿐이고, 결함인 것은 고유벡터의 개수가 모자란다는 뜻이다. 두 이야기는 관계가 없다.

⑥ 이제 다 배웠다. 아니다. 여기까지가 실수 유한차원의 이야기다. 무한차원으로 가면 스펙트럼 정리가 훨씬 조심스러워지고, 희소행렬로 가면 소거 자체를 포기하고 반복법을 쓴다. 다 배운 것이 아니라 지도를 손에 넣은 것이다.


마치며...

서른네 편의 여정이 끝났다. 이번 강의에서 정리한 것은 이렇다.

돌아보면 후반부 전체가 하나의 이야기였다. 조건과의 싸움이었다. LULU 는 소거가 되어야 했고, QΛQTQ\Lambda Q^{\mathsf T} 는 대칭이어야 했고, SΛS1S\Lambda S^{-1} 은 고유벡터가 충분해야 했다. 그 조건들이 하나씩 깨지는 것을 지켜보았고, 마지막에 조건이 하나도 없는 분해에 닿았다. 그 자리에서 네 개의 상자와 그 사이를 오가는 AAA+A^{+} 의 화살표를 얻었다. 선형대수 전체가 그 한 장에 있다.

마지막 실습이 남았다. L34 실습 노트북에서 다섯분해 함수를 만들어 같은 행렬에 다섯을 전부 걸어 보고, 네 부분공간 최종본을 돌려 가며 보고, 이 책에 나온 행렬을 전부 모아 마지막으로 한 번씩 통과시킨다.

긴 여정을 함께해 주어 고맙다.