1 이 절이 해결하는 질문
Ch.7 §7.1 에서 다음을 보였다 (Strang, 2009, Ch.7 §7.1).
- 선형 변환 \(T\) 는 \(T(c\mathbf{v} + d\mathbf{w}) = c\, T(\mathbf{v}) + d\, T(\mathbf{w})\) 를 만족하는 추상적 함수이다.
- 기저 벡터 \(\mathbf{v}_1, \ldots, \mathbf{v}_n\) 에서의 상 \(T(\mathbf{v}_1), \ldots, T(\mathbf{v}_n)\) 만 알면 \(T\) 전체가 결정된다.
- 따라서 모든 선형 변환은 어떤 행렬 \(\mathbf{A}\) 로 표현된다.
이 선언은 강력하지만 공사 현장에서 당장 쓰기에는 허전하다. 실제 문제는 거의 항상 다음 형태로 온다.
\(T\) 가 “\(0\) 에서 \(x\) 까지의 적분” 이다. 어떤 행렬인가? \(T\) 가 “\(45^\circ\) 선 위로의 사영” 이다. 어떤 행렬인가? 입력 기저와 출력 기저가 다르면 공식이 어떻게 바뀌는가? 그리고 왜 행렬 곱은 하필 그 순서로 정의되었는가?
§7.2 의 역할은 이 “어떤 행렬인가” 에 답하는 단일 레시피를 제시하고, 그 레시피가 미분·적분·회전·사영 같은 서로 달라 보이는 변환을 모두 같은 틀로 쓰도록 함을 보이는 것이다.
변환의 행렬은 “입력 기저 벡터들이 변환 후 어디로 갔는지를, 출력 기저의 언어로 적어 내려간 장부” 이다.
2 핵심 레시피 (The Construction Rule)
\(V\) 가 기저 \(\mathcal{B} = \{\mathbf{v}_1, \ldots, \mathbf{v}_n\}\) 을, \(W\) 가 기저 \(\mathcal{C} = \{\mathbf{w}_1, \ldots, \mathbf{w}_m\}\) 을 가진다고 하자. 선형 변환 \(T : V \to W\) 의 행렬 표현 \(\mathbf{A} = [T]_{\mathcal{C} \leftarrow \mathcal{B}}\) 은 다음과 같이 구성된다.
\(T\) 를 \(j\) 번째 입력 기저 벡터 \(\mathbf{v}_j\) 에 적용한 뒤, 그 결과를 출력 기저로 분해한다. \[ T(\mathbf{v}_j) = a_{1j}\mathbf{w}_1 + a_{2j}\mathbf{w}_2 + \cdots + a_{mj}\mathbf{w}_m \]
그러면 \(\mathbf{A}\) 의 \(j\) 번째 열이 \(\begin{bmatrix} a_{1j} \\ a_{2j} \\ \vdots \\ a_{mj} \end{bmatrix}\) 이다.
한 번 더 풀어 쓰면 이렇다.
“\(j\) 번째 입력 기저를 \(T\) 에 통과시킨다 → 결과를 출력 기저로 분해한다 → 분해 계수들이 \(j\) 번째 열이다.”
왜 이것이 맞는가 (증명 스케치). 임의의 입력 \(\mathbf{v} = c_1\mathbf{v}_1 + \cdots + c_n\mathbf{v}_n\) 에 대해 선형성으로
\[ T(\mathbf{v}) = c_1 T(\mathbf{v}_1) + \cdots + c_n T(\mathbf{v}_n) \]
\(T(\mathbf{v}_j)\) 를 \(\mathcal{C}\) 로 분해한 식을 대입하고 \(\mathbf{w}_i\) 앞에 모이는 계수를 모으면 \(i\) 번째 출력 좌표는
\[ [T(\mathbf{v})]_i = \sum_{j=1}^{n} a_{ij} c_j \]
이는 정확히 행렬 곱 \(\mathbf{A}\mathbf{c}\) 의 \(i\) 번째 성분이다. 즉 \(T\) 를 좌표로 번역한 연산이 \(\mathbf{A}\mathbf{c}\) 와 같다.
직관 요약. 행렬은 “\(n\) 개 입력 기저에 대한 \(T\) 의 이력서” 이다. 입력 기저 \(n\) 개의 행선지를 출력 기저 좌표로 기록해 두기만 하면, 그 뒤로는 선형성이 나머지 모든 계산을 떠맡는다.
3 두 기저의 선택이 행렬을 결정한다
같은 \(T\) 라도 기저 \(\mathcal{B}, \mathcal{C}\) 를 바꾸면 행렬이 완전히 달라진다. 이 사실을 명확히 보기 위해 §7.2 의 레시피를 네 가지 “기저 조합”에서 적용한다.
| 입력 기저 \(\mathcal{B}\) | 출력 기저 \(\mathcal{C}\) | 결과 |
|---|---|---|
| 표준 기저 | 표준 기저 | “표준 행렬” — 우리가 흔히 아는 \(\mathbf{A}\) |
| 표준 기저 | 비표준 기저 | 행이 재조합됨 |
| 비표준 기저 | 표준 기저 | 열이 재조합됨 |
| 고유벡터 기저 (같은 기저) | 고유벡터 기저 | 대각행렬 \(\mathbf{\Lambda}\) — 가장 단순 |
마지막 행이 중요하다. “좋은 기저를 고르면 행렬이 대각행렬이 된다” 는 사실이 §7.3 의 대각화와 §6.7 SVD 의 출발점이다. 즉 대각화는 기저 선택 문제이다 (Strang, 2009, Ch.7).
4 예시 1 — 다항식 공간의 미분 연산자
선형 변환은 \(\mathbb{R}^n\) 에 국한되지 않는다. 가장 교훈적인 예는 다항식 공간에서의 미분이다. 이 예는 “벡터가 꼭 좌표 튜플일 필요는 없다” 는 사실과 “레시피는 어느 벡터 공간에서나 똑같다” 는 사실을 동시에 보여준다.
4.1 정의역과 공역
- 입력 공간 \(V = \mathcal{P}_3 = \{a + bx + cx^2 + dx^3 : a, b, c, d \in \mathbb{R}\}\), 차수 \(\leq 3\) 인 다항식 — \(n = 4\) 차원
- 출력 공간 \(W = \mathcal{P}_2\), 차수 \(\leq 2\) 인 다항식 — \(m = 3\) 차원
- 변환 \(T = \dfrac{d}{dx}\): 미분은 선형이다 (\(\frac{d}{dx}(cv + dw) = c\frac{dv}{dx} + d\frac{dw}{dx}\)).
4.2 기저 선택
자연스러운 기저를 쓴다.
- 입력 기저 \(\mathcal{B} = \{1,\, x,\, x^2,\, x^3\}\)
- 출력 기저 \(\mathcal{C} = \{1,\, x,\, x^2\}\)
4.3 레시피 적용
각 입력 기저 벡터를 \(T\) 에 넣는다.
| \(j\) | \(\mathbf{v}_j\) | \(T(\mathbf{v}_j) = v_j'\) | 출력 기저 분해 | 열 \(j\) |
|---|---|---|---|---|
| 1 | \(1\) | \(0\) | \(0\cdot 1 + 0\cdot x + 0\cdot x^2\) | \((0, 0, 0)\) |
| 2 | \(x\) | \(1\) | \(1\cdot 1 + 0\cdot x + 0\cdot x^2\) | \((1, 0, 0)\) |
| 3 | \(x^2\) | \(2x\) | \(0\cdot 1 + 2\cdot x + 0\cdot x^2\) | \((0, 2, 0)\) |
| 4 | \(x^3\) | \(3x^2\) | \(0\cdot 1 + 0\cdot x + 3\cdot x^2\) | \((0, 0, 3)\) |
이 네 열을 나란히 세우면 미분 연산자의 행렬이 완성된다.
\[ \mathbf{A}_{d/dx} = \begin{bmatrix} 0 & 1 & 0 & 0 \\ 0 & 0 & 2 & 0 \\ 0 & 0 & 0 & 3 \end{bmatrix} \]
4.4 행렬 곱으로 직접 확인
입력 \(v = 4 + x + x^2 + x^3\) 의 좌표 벡터는 \((4, 1, 1, 1)^\top\). 미분의 결과는 \(1 + 2x + 3x^2\), 좌표 \((1, 2, 3)^\top\) 이어야 한다.
\[ \begin{bmatrix} 0 & 1 & 0 & 0 \\ 0 & 0 & 2 & 0 \\ 0 & 0 & 0 & 3 \end{bmatrix} \begin{bmatrix} 4 \\ 1 \\ 1 \\ 1 \end{bmatrix} = \begin{bmatrix} 1 \\ 2 \\ 3 \end{bmatrix} \checkmark \]
4.5 이 예시에서 읽어야 할 세 가지
- 커널 = 상수함수. 첫 번째 열이 \((0, 0, 0)\) 이다. 이는 \(T(1) = 0\) 이라는 사실을 행렬이 “기억” 하는 방식이다. 커널 차원 \(= 1\). 일반적으로 “행렬의 영 열은 그 입력 기저가 커널에 속한다” 는 신호이다.
- 치역 = 차수 \(\leq 2\) 다항식 전체. 2, 3, 4 번째 열이 독립이므로 열공간의 차원 \(= 3 = \dim W\). 치역이 출력 공간 전체이다.
- Rank-Nullity 검증. \(3 + 1 = 4 = \dim V\). 계수-영차원 정리가 행렬에서도, 추상 공간에서도 똑같이 성립한다. 두 관점이 “같은 현상의 다른 언어” 임이 이 수치에서 확인된다.
행렬 \(\mathbf{A}_{d/dx}\) 의 대각 위 원소 \(1, 2, 3\) 은 \(x, x^2, x^3\) 를 미분할 때 앞으로 나오는 지수이다. 행렬 표현이 미적분의 “멱함수 미분 법칙” 을 선형대수의 언어로 정확히 재현한 것이다. 규칙을 다른 방식으로 두 번 기록한 것이므로, 둘 중 어느 쪽으로 보든 기억하기 쉽다.
5 예시 2 — 적분 연산자: “한쪽 역행렬”
미분의 역은 적분이다. \(T^{-1} : \mathcal{P}_2 \to \mathcal{P}_3\), \(T^{-1}(w) = \int_0^x w(t)\, dt\).
출력 기저 \(\{1, x, x^2\}\) 의 각 원소에 \(T^{-1}\) 을 적용하면
\[ \int_0^x 1\, dt = x, \qquad \int_0^x t\, dt = \tfrac{1}{2} x^2, \qquad \int_0^x t^2\, dt = \tfrac{1}{3} x^3 \]
이 결과들을 입력 기저 \(\{1, x, x^2, x^3\}\) 으로 분해하면 행렬이 얻어진다.
\[ \mathbf{A}_{\int} = \begin{bmatrix} 0 & 0 & 0 \\ 1 & 0 & 0 \\ 0 & \tfrac{1}{2} & 0 \\ 0 & 0 & \tfrac{1}{3} \end{bmatrix} \quad (4 \times 3) \]
5.1 미분과 적분의 결합 — 미적분학의 기본정리, 행렬 버전
\[ \mathbf{A}_{d/dx}\, \mathbf{A}_{\int} = \mathbf{I}_3, \qquad \mathbf{A}_{\int}\, \mathbf{A}_{d/dx} = \begin{bmatrix} 0 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \]
해석.
- \(\mathbf{A}_{d/dx}\mathbf{A}_{\int} = \mathbf{I}\): 적분 후 미분하면 원래로 돌아온다. 양쪽이 완벽히 맞물린다.
- \(\mathbf{A}_{\int}\mathbf{A}_{d/dx} \neq \mathbf{I}\): 미분 후 적분하면 상수항이 사라진다. 첫 번째 열이 영이다.
직사각 행렬에는 양쪽 역행렬이 없고 오직 한쪽 역행렬(one-sided inverse)만 있을 수 있다. 적분은 미분의 오른쪽 역이지 왼쪽 역은 아니다. 이 불일치가 “적분은 상수를 복원하지 못한다” 는 미적분학의 기본 사실을 행렬 수준에서 포착한다 (Strang, 2009, Ch.7 §7.2).
6 예시 3 — 같은 변환, 두 개의 다른 행렬 (사영)
\(45^\circ\) 선 위로 사영하는 변환 \(T\) 를 두 가지 기저로 각각 행렬화한다. 이것이 “기저 선택이 행렬을 결정한다” 는 주장을 가장 선명하게 보여준다.
6.1 선택 1 — \(\{45^\circ, 135^\circ\}\) 기저 (좋은 기저)
- \(\mathbf{v}_1 = (1, 1) / \sqrt{2}\): 선 위. \(T(\mathbf{v}_1) = \mathbf{v}_1\). 출력 좌표 \((1, 0)\).
- \(\mathbf{v}_2 = (-1, 1) / \sqrt{2}\): 선에 수직. \(T(\mathbf{v}_2) = \mathbf{0}\). 출력 좌표 \((0, 0)\).
\[ \mathbf{A}_{\text{좋은 기저}} = \begin{bmatrix} 1 & 0 \\ 0 & 0 \end{bmatrix} \]
이 행렬은 대각이며, \(T\) 의 본질 — “한 방향만 살리고 다른 방향을 죽인다” — 이 형태 자체에서 읽힌다.
6.2 선택 2 — 표준 기저 \(\{(1,0), (0,1)\}\)
두 기저 벡터 모두 \(45^\circ\) 선 위로 사영하면 \((1/2, 1/2)\) 로 간다.
\[ \mathbf{A}_{\text{표준}} = \begin{bmatrix} 1/2 & 1/2 \\ 1/2 & 1/2 \end{bmatrix} \]
이 행렬은 대각이 아니지만 같은 변환이다. 두 행렬은 같은 선형 변환의 서로 다른 옷이며, 둘 사이는 유사 변환 공식 \(\mathbf{A}_\text{좋은 기저} = \mathbf{M}^{-1} \mathbf{A}_\text{표준} \mathbf{M}\) 로 연결된다 (여기서 \(\mathbf{M}\) 의 열은 새 기저 벡터를 표준 좌표로 쓴 것이다).
교훈. 대각화와 고유값 분해는 결국 “변환을 가장 잘 드러내는 기저 — 변환의 고유 축 — 를 찾는 문제” 이다. 그 기저에서 변환은 단순한 스케일링으로 보이고, 그것이 대각행렬로 표현된다.
사영 행렬은 \(T^2 = T\) 를 만족한다 (“두 번 사영해도 결과는 같다”). 두 행렬 모두에 대해
\[ \begin{bmatrix}1 & 0 \\ 0 & 0\end{bmatrix}^2 = \begin{bmatrix}1 & 0 \\ 0 & 0\end{bmatrix}, \qquad \begin{bmatrix}1/2 & 1/2 \\ 1/2 & 1/2\end{bmatrix}^2 = \begin{bmatrix}1/2 & 1/2 \\ 1/2 & 1/2\end{bmatrix} \]
가 성립한다. 이는 변환의 본질적 성질(멱등성)이 좌표 선택과 무관하다는 또 다른 증거이다.
7 합성 = 행렬 곱 — 행렬 곱이 “그렇게” 정의된 진짜 이유
§7.2 가 선사하는 가장 깊은 통찰은 이것이다. 행렬 곱이 이상한 순서로 정의된 것은 그것이 선형 변환의 합성을 올바르게 표현하기 위해서다.
7.1 세 공간 사이의 두 변환
세 공간 \(U, V, W\) 와 두 변환
\[ S : U \to V, \qquad T : V \to W \]
을 생각한다. 합성 \(T \circ S : U \to W\) 도 선형 변환이다. 이제 기저를 고정한다.
- \(U\) 의 기저 \(\mathcal{B}_U\), \(V\) 의 기저 \(\mathcal{B}_V\), \(W\) 의 기저 \(\mathcal{B}_W\).
- \(S\) 의 행렬 \(\mathbf{B} = [S]_{\mathcal{B}_V \leftarrow \mathcal{B}_U}\) (크기 \(n \times p\))
- \(T\) 의 행렬 \(\mathbf{A} = [T]_{\mathcal{B}_W \leftarrow \mathcal{B}_V}\) (크기 \(m \times n\))
주의: \(S\) 의 출력 기저와 \(T\) 의 입력 기저가 같아야 한다. 그래야 “한 쪽이 내놓은 좌표를 다른 쪽이 바로 받는” 번역이 가능하다.
7.2 정리: 합성의 행렬 = 행렬의 곱
\[ [T \circ S]_{\mathcal{B}_W \leftarrow \mathcal{B}_U} = \mathbf{A} \mathbf{B} \]
읽는 법. 임의의 \(\mathbf{u} \in U\) 를 좌표 \(\mathbf{x}\) 로 표현하면
- \(S\) 가 \(\mathbf{x}\) 를 \(\mathbf{B}\mathbf{x}\) 로 번역 (결과는 \(V\) 의 좌표).
- \(T\) 가 그 결과를 \(\mathbf{A}(\mathbf{B}\mathbf{x})\) 로 번역 (결과는 \(W\) 의 좌표).
- 좌표 공간에서 전체 변환은 \((\mathbf{A}\mathbf{B})\mathbf{x}\) 와 같다 — 결합법칙이 이것을 보장한다.
따라서 합성을 좌표로 옮기면 정확히 행렬 곱이 된다. 왜 \((\mathbf{A}\mathbf{B})_{ij}\) 가 “\(\mathbf{A}\) 의 \(i\) 행과 \(\mathbf{B}\) 의 \(j\) 열의 내적” 인가 라는 물음에 대한 답이 바로 여기에 있다.
7.3 유도 — 한 번만 해 두면 평생 남는다
\(S(\mathbf{u}_k) = \sum_j b_{jk} \mathbf{v}_j\) (열 \(k\) 정의), \(T(\mathbf{v}_j) = \sum_i a_{ij} \mathbf{w}_i\) (열 \(j\) 정의) 이므로
\[ (T \circ S)(\mathbf{u}_k) = T\left(\sum_j b_{jk} \mathbf{v}_j\right) = \sum_j b_{jk}\, T(\mathbf{v}_j) = \sum_j b_{jk}\, \sum_i a_{ij}\, \mathbf{w}_i = \sum_i \left(\sum_j a_{ij} b_{jk}\right) \mathbf{w}_i \]
괄호 안의 \(\sum_j a_{ij}b_{jk}\) 가 정확히 \(\mathbf{A}\mathbf{B}\) 의 \((i, k)\) 원소이다. 즉 행렬 곱의 정의는 합성 규칙에서 강제로 튀어나온다. “이상한 순서” 가 아니라 “유일하게 맞는 순서” 이다.
합성 \(T \circ S\) 는 “\(S\) 를 먼저, \(T\) 를 나중에” 이지만 행렬 곱 \(\mathbf{A}\mathbf{B}\) 는 “\(\mathbf{A}\) 가 왼쪽, \(\mathbf{B}\) 가 오른쪽” 이다. 함수 기호는 오른쪽에서 왼쪽으로 읽어야 하므로 순서가 뒤집혀 보인다. 이 규칙을 “먼저 쓰이는 것이 오른쪽에 온다” 로 기억하면 실수가 줄어든다.
8 기저 변환 행렬 — 항등 변환의 행렬화
기저 변환 행렬 \(\mathbf{M}\) 자체가 “항등 변환을 비자명한 기저 쌍 아래에서 행렬화” 한 결과라는 관점은 기억해 두면 큰 힘이 된다.
\(I : V \to V\), \(I(\mathbf{v}) = \mathbf{v}\). 이 자명한 변환을 입력 기저 \(\mathcal{B}'\), 출력 기저 \(\mathcal{B}\) 로 행렬화하면 무엇이 나오는가? §7.2 레시피를 그대로 적용한다.
\(j\) 번째 열 \(=\) \(I(\mathbf{v}'_j) = \mathbf{v}'_j\) 을 원래 기저 \(\mathcal{B}\) 로 분해한 좌표.
즉 \(\mathbf{M}\) 의 \(j\) 번째 열은 “새 기저 벡터 \(\mathbf{v}'_j\) 를 원래 기저로 적은 좌표” 이다. 이것이 정확히 §7.1 에서 소개한 change-of-basis matrix 의 정의이다.
8.1 같은 변환의 두 행렬을 연결하는 식
\(T : V \to V\) 의 두 표현을 연결하려면 “신좌표 → 구좌표 → \(T\) → 구좌표 → 신좌표” 의 경로를 각 단계가 모두 하나의 행렬 곱이 되도록 설계해야 한다. 각 단계는 선형 변환이고, 변환들의 합성은 행렬 곱이므로
\[ [T]_{\mathcal{B}' \leftarrow \mathcal{B}'} = \underbrace{\mathbf{M}^{-1}}_{\text{구}\to\text{신}}\; \underbrace{[T]_{\mathcal{B} \leftarrow \mathcal{B}}}_{\text{구좌표에서 } T}\; \underbrace{\mathbf{M}}_{\text{신}\to\text{구}} \]
가 얻어진다. 유사 변환 공식이 §7.2 의 구성 규칙과 합성 법칙에서 자동으로 나온 것이다.
9 응용
| 분야 | §7.2 가 주는 도구 | 구체적 활용 |
|---|---|---|
| 수치해석 | 유한차분 행렬 = 이산 미분 연산자 | 미분 방정식의 수치해, 유한요소법 |
| 딥러닝 | 선형층 구성 | 가중치 초기화가 “기저 선택” 과 동치, 의미 있는 기저를 학습하는 것 |
| 신호처리 | DFT 행렬 = 시간 기저 → 주파수 기저의 기저 변환 | FFT 의 수학적 정체 |
| 통계 | 다항 회귀의 설계행렬 | \(1, x, x^2\) 기저의 값을 행으로 쌓은 것 |
| 양자역학 | 관측 가능량의 행렬 표현 | 서로 다른 기저(위치·운동량·에너지)에서 같은 연산자의 다른 얼굴 |
| PCA | 공분산의 고유벡터 기저로 변환 | “자연스러운 특징 축” 을 데이터로부터 발견 |
특히 다항 회귀의 설계행렬 \(\mathbf{X}\) 는 이 절의 미분 예시와 같은 공간 (\(\mathcal{P}_d\)) 에서 구성된다. 각 행은 “기저 벡터 \(1, x, x^2, \ldots\) 를 해당 관측값에서 평가한 값” 이고, 회귀 계수 \(\boldsymbol{\beta}\) 는 “그 기저 위에서의 좌표” 이다. 다항 회귀가 “고차 다항 함수를 피팅한다” 는 말은 사실 “다항식 벡터 공간 \(\mathcal{P}_d\) 에서 기저 좌표를 추정한다” 는 뜻이다. 이 해석은 §7.2 관점 없이는 형식적으로 드러나지 않는다.
10 코드 예시
10.1 Step 1 — 미분 연산자 행렬을 레시피로 직접 구성
# 다항식 공간 P_3 → P_2 에서 미분 연산자 행렬을 §7.2 레시피로 만든다
# 벡터 = (a_0, a_1, a_2, a_3) 계수 튜플, 함수 값은 신경쓰지 않는다
def differentiate(poly):
"""poly = (a_0, a_1, a_2, a_3) → (a_1, 2 a_2, 3 a_3)"""
a0, a1, a2, a3 = poly
return (a1, 2 * a2, 3 * a3)
# 입력 기저 벡터 — P_3 의 표준 기저
basis_in = [
(1, 0, 0, 0), # v_1 = 1
(0, 1, 0, 0), # v_2 = x
(0, 0, 1, 0), # v_3 = x^2
(0, 0, 0, 1), # v_4 = x^3
]
# 각 입력 기저 벡터를 T 에 넣고 결과를 그대로 행렬의 열로 쌓는다
# (출력 기저도 표준이므로 별도 분해가 필요 없다)
A = [[0] * 4 for _ in range(3)]
for j, v in enumerate(basis_in):
Tv = differentiate(v)
for i, val in enumerate(Tv):
A[i][j] = val
for row in A:
print(row)
# 행렬 곱으로 미분을 계산 — 전통적 미분 규칙을 쓰지 않는다
def mat_vec(M, x):
return tuple(sum(M[i][j] * x[j] for j in range(len(x))) for i in range(len(M)))
v = (4, 1, 1, 1) # 4 + x + x^2 + x^3
print("행렬 곱 결과:", mat_vec(A, v)) # (1, 2, 3) → 1 + 2x + 3x^2
print("직접 미분 :", differentiate(v)) # (1, 2, 3) 동일해석. 이 코드는 §7.2 의 핵심 주장을 단 한 번의 실행으로 검증한다. 입력 기저 벡터 \(n\) 개의 상만 알면 변환 전체를 행렬로 복원할 수 있고, 복원된 행렬은 임의의 다른 벡터에서도 원래 변환과 일치한다. 함수적 정의(미분 규칙)와 수치적 정의(행렬 곱)가 같은 결과를 낸다는 것이 눈으로 확인된다.
10.2 Step 2 — 합성 = 행렬 곱 검증 (적분 후 미분)
import numpy as np
# 미분 행렬 D : P_3 → P_2 (3 × 4)
D = np.array([
[0, 1, 0, 0],
[0, 0, 2, 0],
[0, 0, 0, 3],
], dtype=float)
# 적분 행렬 I : P_2 → P_3 (4 × 3) — 출력 기저 {1, x, x^2} 로부터 구성
Int = np.array([
[0, 0, 0 ],
[1, 0, 0 ],
[0, 1/2, 0 ],
[0, 0, 1/3 ],
])
# 적분 후 미분 — P_2 → P_3 → P_2 의 합성은 (D @ Int) 가 되어야 한다
print("D @ Int =")
print(D @ Int) # 단위 행렬 I_3
# 미분 후 적분 — P_3 → P_2 → P_3 은 상수항이 사라진 대각행렬
print("Int @ D =")
print(Int @ D)해석. D @ Int 가 단위 행렬이라는 것이 “적분 후 미분은 원상 복구” 라는 미적분학의 기본 정리를 행렬 언어로 포착한 것이다. 반대로 Int @ D 는 첫 번째 열이 \(\mathbf{0}\) 이 되어 있어, “미분 후 적분은 상수를 복원하지 못한다” 는 사실이 정확히 행렬의 영 열로 나타난다. 직사각 행렬이 가지는 한쪽 역행렬의 의미가 숫자로 드러나는 순간이다.
10.3 Step 3 — 기저 선택이 행렬을 바꾼다 (사영의 두 얼굴)
import numpy as np
# 45도 선 위로 사영하는 변환을 두 기저에서 본다
# 1) 표준 기저에서
A_std = np.array([
[0.5, 0.5],
[0.5, 0.5],
])
# 2) 좋은 기저 = {45도 방향, 135도 방향}
M = np.array([ # 열이 새 기저 벡터 (표준 좌표)
[1, -1],
[1, 1],
]) / np.sqrt(2)
# 유사 변환: A_good = M^{-1} A_std M
A_good = np.linalg.inv(M) @ A_std @ M
print("A_std =\n", A_std)
print("\nA_good =\n", np.round(A_good, 10))
# 불변량 확인 — 기저를 바꿔도 같은 값이 나온다
print("\n트레이스 :", np.trace(A_std), np.trace(A_good))
print("행렬식 :", np.linalg.det(A_std), np.linalg.det(A_good))
print("고유값 :", np.sort(np.linalg.eigvals(A_std).real),
np.sort(np.linalg.eigvals(A_good).real))해석. 두 행렬의 모양은 완전히 다르지만 트레이스, 행렬식, 고유값 같은 불변량은 모두 일치한다. 이것이 “같은 변환” 이라는 주장의 수치적 증거이다. 좋은 기저에서의 대각행렬이 “가장 알아보기 쉬운 형태” 이고, 이 기저를 데이터로부터 자동으로 찾는 방법 이 바로 Ch.6 의 고유값 분해와 §6.7 의 SVD 이다.
11 정리
§7.2 의 핵심은 한 줄로 요약할 수 있다.
\(T\) 의 행렬은, 입력 기저 벡터의 상을 출력 기저의 좌표로 적어 열에 쌓은 것이다.
이 단순한 규칙에서 다음 결과들이 모두 따라 나온다.
- 미분·적분·회전·사영 같은 분야별 연산자들이 공통된 레시피로 행렬화된다.
- 직사각 행렬의 한쪽 역행렬이 미적분학의 기본 정리를 행렬 수준에서 포착한다.
- 입력·출력 기저를 바꾸면 같은 변환이 다른 행렬이 된다 — 유사 변환 공식의 기원.
- 합성 \(T \circ S\) 의 행렬이 \(\mathbf{A}\mathbf{B}\) 라는 사실이 행렬 곱의 정의 그 자체의 이유 이다.
- 대각화·SVD 는 “행렬이 가장 단순해지는 기저 선택” 이라는 하나의 질문에 대한 답이다.
이어지는 §7.3 는 이 레시피를 가지고 “가장 좋은 기저를 고르는 기준” 으로 나아간다 — 고유벡터 기저에서의 대각화와 SVD 기저에서의 의사역행렬(pseudoinverse) 이 그 결과이다.
12 관련 주제
선행 지식
- Ch.7 §7.1 — 선형 변환: 정의·기하 직관·행렬 표현 개요
- Ch.3 §3.5 — Independence, Basis and Dimension
- Ch.6 §6.6 — 닮음 행렬과 기저 변환
후속 주제
- Ch.7 §7.3 — Diagonalization and the Pseudoinverse (좋은 기저의 극단적 사례)
- Ch.6 §6.2 — 대각화: \(\mathbf{A} = \mathbf{S}\mathbf{\Lambda}\mathbf{S}^{-1}\)
- Ch.6 §6.7 — SVD: 두 직교 기저 아래에서의 선형 변환
다른 카테고리 연결
- 다항 회귀와 설계행렬 — \(\mathcal{P}_d\) 공간의 좌표 추정으로서의 회귀
- 푸리에 변환과 기저 변환 — DFT 행렬의 §7.2 관점
- 선형층과 특징 공간 — 학습 가능한 기저로서의 가중치
교재 참조
- Strang, Introduction to Linear Algebra, 4th Ed., Ch.7 §7.2 “The Matrix of a Linear Transformation” (pp. 384–398)