1 왜 닮음 행렬인가
선형대수의 핵심 질문 중 하나는 “하나의 선형 변환을 어떤 좌표계에서 보는 것이 가장 간단한가?” 이다. 같은 변환이라도 어떤 기저를 쓰느냐에 따라 행렬 표현이 전혀 다르게 나온다. 닮음 행렬의 개념은 이 모든 “같은 변환의 다른 얼굴들”을 하나로 묶는 장치이다.
| 분야 | 닮음 변환이 등장하는 장면 | 왜 그것이 닮음인가 |
|---|---|---|
| 선형대수 | 대각화 \(\mathbf{A} = \mathbf{S}\mathbf{\Lambda}\mathbf{S}^{-1}\) | \(\mathbf{A}\) 와 \(\mathbf{\Lambda}\) 는 닮음 |
| 미분방정식 | \(\frac{d\mathbf{u}}{dt} = \mathbf{A}\mathbf{u}\) 의 분리 | 고유벡터 좌표계로 닮음 변환 |
| 양자역학 | 해밀토니안의 “에너지 기저” | 유니터리 닮음으로 대각화 |
| 동역학 | 선형 시스템의 분류 (노드·초점·안장) | 고유값이 같은 행렬은 정성적으로 같음 |
| 그래프 이론 | 라벨 바꾸기 (그래프 자기동형) | 인접 행렬의 닮음 |
| 딥러닝 | 배치 정규화·가중치 재파라미터화 | 닮음 변환이 고유값 스펙트럼 보존 |
공통점은 “문제의 본질은 유지한 채 좌표만 바꾸고 싶다”는 욕구이다. 닮음 변환은 그 욕구의 수학적 형식화이다.
두 정사각 행렬 \(\mathbf{A}\) 와 \(\mathbf{B}\) 가 닮음(similar)이라 함은 가역 행렬 \(\mathbf{M}\) 이 존재하여 다음이 성립함을 말한다.
\[ \mathbf{B} = \mathbf{M}^{-1}\mathbf{A}\mathbf{M} \]
의미: \(\mathbf{A}\) 와 \(\mathbf{B}\) 는 같은 선형 변환을 서로 다른 기저로 표현한 것이다. \(\mathbf{M}\) 은 두 기저 사이의 좌표 변환이다.
이 한 줄이 Ch.6.6 전체의 요약이다. 나머지는 “왜 그런가”, “어떤 값들이 보존되는가”, “가장 단순한 대표는 무엇인가”에 대한 답이다.
2 기저 변환: 닮음이 “왜” 같은 변환을 표현하는가
닮음 식 \(\mathbf{B} = \mathbf{M}^{-1}\mathbf{A}\mathbf{M}\) 을 읽는 가장 자연스러운 방법은 오른쪽부터 왼쪽으로이다.
| 단계 | 연산 | 의미 |
|---|---|---|
| 1 | \(\mathbf{M}\mathbf{x}'\) | 새 기저 좌표 \(\mathbf{x}'\) 을 표준 기저 좌표 \(\mathbf{x}\) 로 변환 |
| 2 | \(\mathbf{A}(\cdot)\) | 표준 기저에서 선형 변환 적용 |
| 3 | \(\mathbf{M}^{-1}(\cdot)\) | 결과를 다시 새 기저 좌표로 되돌림 |
즉, “새 기저의 언어로 말한다 → 표준 기저로 번역 → 변환 적용 → 다시 새 기저 언어로 번역” 이라는 왕복 여행이다. 최종 결과는 새 기저에서 본 같은 변환의 행렬 표현이다.
\(\mathbf{A}\) 를 “한국어로 작성된 기계 작동 설명서”라고 생각하자. 영어 사용자는 이 기계를 직접 작동할 수 없다. 닮음 변환의 절차는:
- \(\mathbf{M}\): 영어 입력을 한국어로 통역 (영어 → 한국어)
- \(\mathbf{A}\): 한국어 설명서대로 기계 작동
- \(\mathbf{M}^{-1}\): 기계 출력(한국어)을 영어로 역통역 (한국어 → 영어)
최종 결과 \(\mathbf{B} = \mathbf{M}^{-1}\mathbf{A}\mathbf{M}\) 은 “영어로 작성된 동일한 기계의 설명서”이다. 기계 자체는 같다. 언어(좌표계)만 다르다.
2.1 구체적 예시: \(2 \times 2\)
\(\mathbf{A} = \begin{bmatrix} 2 & 1 \\ 0 & 3 \end{bmatrix}\) 이고 \(\mathbf{M} = \begin{bmatrix} 1 & 1 \\ 0 & 1 \end{bmatrix}\) 로 기저를 바꿔 보자.
\(\mathbf{M}^{-1} = \begin{bmatrix} 1 & -1 \\ 0 & 1 \end{bmatrix}\) 이고 계산하면:
\[ \mathbf{B} = \mathbf{M}^{-1}\mathbf{A}\mathbf{M} = \begin{bmatrix} 1 & -1 \\ 0 & 1 \end{bmatrix} \begin{bmatrix} 2 & 1 \\ 0 & 3 \end{bmatrix} \begin{bmatrix} 1 & 1 \\ 0 & 1 \end{bmatrix} = \begin{bmatrix} 2 & 0 \\ 0 & 3 \end{bmatrix} \]
\(\mathbf{A}\) 의 (1,2) 위치의 1이 사라지고 대각 행렬 \(\mathbf{B}\) 가 되었다. \(\mathbf{M}\) 의 열은 \(\mathbf{A}\) 의 고유벡터이고, \(\mathbf{B}\) 의 대각 원소는 \(\mathbf{A}\) 의 고유값이다 — 즉, 이것은 대각화의 다른 이름이다.
2.2 고유벡터 기저: 가장 아름다운 선택
\(\mathbf{A}\) 가 \(n\) 개의 독립 고유벡터를 가지면 이들을 열로 쌓은 행렬 \(\mathbf{S}\) 가 가장 이상적인 닮음 변환을 만든다.
\[ \mathbf{\Lambda} = \mathbf{S}^{-1}\mathbf{A}\mathbf{S} \]
고유벡터 기저에서는 변환이 축별 스케일링으로 단순화된다. 이것이 바로 Ch.6.2의 대각화이고, 대각화는 닮음 변환의 가장 단순한 경우이다.
3 닮음 불변량 (Similarity Invariants)
닮음 변환은 좌표계만 바꿀 뿐이므로, 변환의 “본질적인 성질”은 모두 보존되어야 한다. 이 “본질”을 수학적으로 포착한 것이 닮음 불변량이다.
\(\mathbf{B} = \mathbf{M}^{-1}\mathbf{A}\mathbf{M}\) 이면 다음이 모두 같다.
| 불변량 | 기호 | 왜 보존되는가 |
|---|---|---|
| 고유값 집합 | \(\{\lambda_1, \dots, \lambda_n\}\) (중복도 포함) | 증명 아래 |
| 특성 다항식 | \(p(\lambda) = \det(\mathbf{A} - \lambda\mathbf{I})\) | 고유값의 근원 |
| 최소 다항식 | \(m(\lambda)\) | 환론적 구조 |
| 행렬식 | \(\det(\mathbf{A}) = \prod \lambda_i\) | 고유값의 곱 |
| 대각합 | \(\text{tr}(\mathbf{A}) = \sum \lambda_i\) | 고유값의 합 |
| 랭크 | \(\text{rank}(\mathbf{A})\) | 0이 아닌 고유값 개수 (대각화 가능 시) |
| Jordan 구조 | 블록 크기·개수 | 닮음 완전 불변량 |
3.1 고유값 보존 증명
\(\mathbf{A}\mathbf{x} = \lambda\mathbf{x}\) 에서 출발한다. 양변 왼쪽에 \(\mathbf{M}^{-1}\) 을 곱하고 중간에 \(\mathbf{M}\mathbf{M}^{-1} = \mathbf{I}\) 를 끼워 넣는다.
\[ \mathbf{M}^{-1}\mathbf{A}\mathbf{M}\mathbf{M}^{-1}\mathbf{x} = \lambda\mathbf{M}^{-1}\mathbf{x} \]
좌변은 \(\mathbf{B}(\mathbf{M}^{-1}\mathbf{x})\) 이므로:
\[ \mathbf{B}(\mathbf{M}^{-1}\mathbf{x}) = \lambda(\mathbf{M}^{-1}\mathbf{x}) \]
즉, \(\mathbf{B}\) 도 같은 고유값 \(\lambda\) 를 가지며, 대응하는 고유벡터가 \(\mathbf{M}^{-1}\mathbf{x}\) 이다. 고유값은 보존되고 고유벡터만 좌표 변환된다 — 닮음의 가장 핵심적인 성질이다. \(\blacksquare\)
3.2 특성 다항식 보존 증명
\[ \det(\mathbf{B} - \lambda\mathbf{I}) = \det(\mathbf{M}^{-1}\mathbf{A}\mathbf{M} - \lambda\mathbf{M}^{-1}\mathbf{M}) = \det(\mathbf{M}^{-1}(\mathbf{A} - \lambda\mathbf{I})\mathbf{M}) \]
행렬식의 곱 성질 \(\det(\mathbf{X}\mathbf{Y}\mathbf{Z}) = \det(\mathbf{X})\det(\mathbf{Y})\det(\mathbf{Z})\) 에 의해:
\[ = \det(\mathbf{M}^{-1})\det(\mathbf{A} - \lambda\mathbf{I})\det(\mathbf{M}) = \det(\mathbf{A} - \lambda\mathbf{I}) \]
맨 오른쪽 등호는 \(\det(\mathbf{M}^{-1}) = 1/\det(\mathbf{M})\) 이기 때문이다. 특성 다항식이 같으므로 고유값·대각합·행렬식이 모두 자동으로 같다. \(\blacksquare\)
3.3 대각합 보존의 또 다른 증명
행렬 곱의 대각합에는 순환 성질이 있다: \(\text{tr}(\mathbf{X}\mathbf{Y}) = \text{tr}(\mathbf{Y}\mathbf{X})\). 이것을 쓰면:
\[ \text{tr}(\mathbf{B}) = \text{tr}(\mathbf{M}^{-1}\mathbf{A}\mathbf{M}) = \text{tr}(\mathbf{A}\mathbf{M}\mathbf{M}^{-1}) = \text{tr}(\mathbf{A}) \]
이 짧은 증명은 특성 다항식까지 가지 않고도 대각합 보존을 보여준다.
정육면체를 생각해 보자. 어느 면을 위로 놓든 — 그것은 여전히 같은 정육면체이다. “위로 놓인 면”은 내 보는 각도(좌표계)에 따라 변하지만, 부피·표면적·모서리 수는 변하지 않는다. 이것들이 정육면체의 “본질”이다.
마찬가지로 행렬에서 개별 성분 \(a_{ij}\) 는 좌표계에 따라 변하지만, 고유값·행렬식·대각합은 변하지 않는다. 이것들이 “변환 자체”의 본질적 성질이다. 닮음은 “같은 물체의 여러 모습”을 연결하는 다리이다.
3.4 닮음은 동치 관계
닮음은 수학적으로 동치 관계(equivalence relation)를 이룬다.
| 성질 | 진술 | 증명 |
|---|---|---|
| 반사 (Reflexive) | \(\mathbf{A} \sim \mathbf{A}\) | \(\mathbf{A} = \mathbf{I}^{-1}\mathbf{A}\mathbf{I}\) |
| 대칭 (Symmetric) | \(\mathbf{A} \sim \mathbf{B} \Rightarrow \mathbf{B} \sim \mathbf{A}\) | \(\mathbf{A} = (\mathbf{M}^{-1})^{-1}\mathbf{B}(\mathbf{M}^{-1})\) |
| 이행 (Transitive) | \(\mathbf{A} \sim \mathbf{B}, \mathbf{B} \sim \mathbf{C} \Rightarrow \mathbf{A} \sim \mathbf{C}\) | 변환 합성 \(\mathbf{M}_1\mathbf{M}_2\) 사용 |
동치 관계는 모든 정사각 행렬의 집합을 동치류(equivalence classes)로 분할한다. 같은 동치류의 모든 행렬은 “본질적으로 같은” 변환이다. 이제 자연스러운 질문이 생긴다: “각 동치류의 가장 단순한 대표는 무엇인가?”
4 가장 단순한 대표: 대각화 가능한 경우
\(\mathbf{A}\) 가 \(n\) 개의 독립 고유벡터를 가지면 대각 행렬 \(\mathbf{\Lambda} = \text{diag}(\lambda_1, \dots, \lambda_n)\) 이 그 동치류의 대표이다. 이보다 단순한 행렬은 없다.
대각화 가능성의 판정:
| 상황 | 대각화 가능? |
|---|---|
| 모든 고유값이 서로 다름 | ✓ 항상 가능 |
| 대칭 행렬 \(\mathbf{A} = \mathbf{A}^\top\) | ✓ 항상 가능 (스펙트럼 정리) |
| 정규 행렬 \(\mathbf{A}\mathbf{A}^\top = \mathbf{A}^\top\mathbf{A}\) | ✓ 가능 (유니터리로) |
| 중복 고유값이 있고 기하적 중복도 < 대수적 중복도 | ✗ 결함(defective) |
마지막 경우가 문제이다. 고유벡터가 부족해서 대각화가 불가능하다. 이 경우에는 “대각 행렬 다음으로 단순한” 형태가 필요하다 — 그것이 조르당 표준형이다.
5 결함 행렬과 조르당 표준형
5.1 결함 행렬의 전형
\[ \mathbf{A} = \begin{bmatrix} 3 & 1 \\ 0 & 3 \end{bmatrix} \]
특성 방정식 \(\det(\mathbf{A} - \lambda\mathbf{I}) = (3 - \lambda)^2 = 0\) 에서 고유값 \(\lambda = 3\) 이 대수적 중복도 2로 중복이다. 고유벡터를 찾아 본다. \((\mathbf{A} - 3\mathbf{I})\mathbf{x} = \mathbf{0}\) 이면:
\[ \begin{bmatrix} 0 & 1 \\ 0 & 0 \end{bmatrix}\begin{bmatrix} x_1 \\ x_2 \end{bmatrix} = \mathbf{0} \Rightarrow x_2 = 0 \]
고유벡터는 \(\mathbf{x} = \begin{bmatrix} 1 \\ 0 \end{bmatrix}\) 의 스칼라 배뿐 — 즉 기하적 중복도 1이다. 독립 고유벡터가 1개밖에 없으니 2차원 공간의 기저가 되지 못하고, 대각화가 불가능하다.
- 대수적 중복도 (Algebraic Multiplicity): 특성 다항식에서 해당 고유값이 근으로 나타나는 횟수
- 기하적 중복도 (Geometric Multiplicity): 해당 고유값에 대응하는 독립 고유벡터의 개수 = \(\dim N(\mathbf{A} - \lambda\mathbf{I})\)
항상 성립: 기하적 중복도 ≤ 대수적 중복도
- 등호 성립 ⇔ 그 고유값에서 대각화 가능
- 부등 성립 ⇔ 결함 행렬 (defective at that eigenvalue)
5.2 조르당 블록
결함 고유값을 다루기 위해 조르당 블록을 도입한다.
\[ \mathbf{J}_k(\lambda) = \begin{bmatrix} \lambda & 1 & 0 & \cdots & 0 \\ 0 & \lambda & 1 & \cdots & 0 \\ \vdots & & \ddots & \ddots & \vdots \\ 0 & 0 & \cdots & \lambda & 1 \\ 0 & 0 & \cdots & 0 & \lambda \end{bmatrix}_{k \times k} \]
대각에 \(\lambda\), 위대각에 1, 나머지는 0이다. 크기 \(k\) 인 조르당 블록은:
- 대수적 중복도 \(k\) (고유값 \(\lambda\) 가 \(k\) 번 등장)
- 기하적 중복도 1 (독립 고유벡터 1개만)
위대각의 1은 “인접한 고유벡터가 서로를 밀어낸다”는 의미이다. 순수 대각 \(\text{diag}(\lambda, \lambda)\) 라면 두 방향이 독립적으로 각자 \(\lambda\) 배 스케일된다. 위대각의 1이 붙으면 두 번째 방향은 첫 번째 방향에 “섞여 들어간다” — \(\mathbf{J}\mathbf{e}_2 = \lambda\mathbf{e}_2 + \mathbf{e}_1\). 이것이 “거의 대각이지만 완전히 대각이지는 않은” 상태이다.
5.3 조르당 표준형 정리
모든 복소수 정사각 행렬 \(\mathbf{A}\) 는 조르당 행렬 \(\mathbf{J}\) 와 닮음이다.
\[ \mathbf{A} = \mathbf{P}\mathbf{J}\mathbf{P}^{-1}, \quad \mathbf{J} = \begin{bmatrix} \mathbf{J}_{k_1}(\lambda_1) & & & \\ & \mathbf{J}_{k_2}(\lambda_2) & & \\ & & \ddots & \\ & & & \mathbf{J}_{k_r}(\lambda_r) \end{bmatrix} \]
조르당 블록의 개수와 크기 구성은 유일하다 (순서 제외). 즉, 조르당 표준형은 닮음의 완전 불변량(complete invariant)이다.
핵심 관찰:
- 블록의 개수 = \(\mathbf{A}\) 의 독립 고유벡터 총 개수 = 기하적 중복도 총합
- 특정 \(\lambda\) 의 블록 크기 합 = 그 \(\lambda\) 의 대수적 중복도
- 가장 큰 블록의 크기 = 최소 다항식에서 \((\lambda - \lambda_i)\) 의 지수
대각화 가능한 경우는 모든 조르당 블록이 \(1 \times 1\) 인 특수 경우이다. 이때 \(\mathbf{J} = \mathbf{\Lambda}\) 가 된다.
5.4 일반화 고유벡터와 조르당 체인
조르당 표준형을 만드는 기저는 일반 고유벡터만으로는 부족하다. 일반화 고유벡터(generalized eigenvector)가 필요하다.
\(\mathbf{v}_1\) 이 \(\mathbf{A}\) 의 고유벡터라 하자: \((\mathbf{A} - \lambda\mathbf{I})\mathbf{v}_1 = \mathbf{0}\). 그러면 조르당 체인을 다음 방정식으로 구축한다.
\[ (\mathbf{A} - \lambda\mathbf{I})\mathbf{v}_2 = \mathbf{v}_1, \quad (\mathbf{A} - \lambda\mathbf{I})\mathbf{v}_3 = \mathbf{v}_2, \quad \dots \]
즉, 각 단계는 앞 벡터를 “한 단계 뒤로” 보낸다. 체인 전체 \(\{\mathbf{v}_1, \mathbf{v}_2, \dots, \mathbf{v}_k\}\) 를 이 순서대로 \(\mathbf{P}\) 의 열로 쌓으면, 그 기저에서 \(\mathbf{A}\) 는 크기 \(k\) 의 조르당 블록으로 표현된다.
일반 고유벡터는 “완전히 자기 자신으로 되돌아오는” 방향이다: \(\mathbf{A}\mathbf{v}_1 = \lambda\mathbf{v}_1\). 일반화 고유벡터는 “거의 자기 자신이지만, 약간 다른 고유벡터 쪽으로 누수되는” 방향이다: \(\mathbf{A}\mathbf{v}_2 = \lambda\mathbf{v}_2 + \mathbf{v}_1\). 이 “누수”가 조르당 블록의 위대각 1을 만든다.
체인을 길게 따라가면 누수가 누적되어 “두 단계 누수”, “세 단계 누수” 방향들이 생긴다. 이 전체 체인이 결함 고유값에서 부족한 고유벡터를 채워주는 “대체 방향” 역할을 한다.
5.5 결함 행렬 예시의 조르당 분해
앞의 \(\mathbf{A} = \begin{bmatrix} 3 & 1 \\ 0 & 3 \end{bmatrix}\) 의 경우:
- 고유값 \(\lambda = 3\), 대수적 중복도 2, 기하적 중복도 1
- 고유벡터 \(\mathbf{v}_1 = (1, 0)^\top\)
- 일반화 고유벡터: \((\mathbf{A} - 3\mathbf{I})\mathbf{v}_2 = \mathbf{v}_1\) 풀면 \(\mathbf{v}_2 = (0, 1)^\top\)
\(\mathbf{P} = [\mathbf{v}_1 | \mathbf{v}_2] = \mathbf{I}\) 이므로 \(\mathbf{J} = \mathbf{A}\) 자체가 이미 조르당 형이다. 이 행렬은 “가장 작은 결함 행렬”의 전형이다.
5.6 닮음 판별 예시: 블록 구조의 차이
고유값 \(\lambda = -1\) 이 3중근인 \(3 \times 3\) 행렬 두 개를 생각하자.
\[ \mathbf{J}_A = \begin{bmatrix} -1 & 1 & 0 \\ 0 & -1 & 1 \\ 0 & 0 & -1 \end{bmatrix}, \quad \mathbf{J}_B = \begin{bmatrix} -1 & 1 & 0 \\ 0 & -1 & 0 \\ 0 & 0 & -1 \end{bmatrix} \]
두 행렬 모두:
- 고유값 \(-1\) (대수적 중복도 3)
- 특성 다항식 \(-(\lambda + 1)^3\)
- 대각합 \(-3\)
- 행렬식 \(-1\)
네 개의 표면적 불변량이 모두 같다. 그런데 블록 구조는 다르다.
- \(\mathbf{J}_A\): 하나의 \(3 \times 3\) 블록 → 독립 고유벡터 1개 (\(\dim N(\mathbf{J}_A + \mathbf{I}) = 1\))
- \(\mathbf{J}_B\): \(2 \times 2\) 블록 + \(1 \times 1\) 블록 → 독립 고유벡터 2개
기하적 중복도가 다르므로 \(\mathbf{J}_A\) 와 \(\mathbf{J}_B\) 는 닮음이 아니다. 고유값·대각합·행렬식·특성 다항식만 비교해서는 닮음을 판별할 수 없다는 것을 이 예가 보여준다. 조르당 구조(블록 크기 분포)가 닮음의 완전 판별 기준이다.
6 닮음 판별의 완전한 절차
두 행렬이 닮은지 확인하려면 다음 순서로 검사한다.
- 특성 다항식 비교 — 다르면 닮음 아님 (즉시 종료)
- 각 고유값의 대수적 중복도 확인 — 같아야 함
- 각 고유값의 기하적 중복도 확인 — 같아야 함 (\(\dim N(\mathbf{A} - \lambda\mathbf{I}) = \dim N(\mathbf{B} - \lambda\mathbf{I})\))
- 각 고유값의 \(\dim N((\mathbf{A} - \lambda\mathbf{I})^k)\) 수열 비교 — 이것이 조르당 블록 구조를 완전히 결정한다
4번까지 모두 일치하면 두 행렬은 닮음이다. 실무적으로는 조르당 표준형을 각각 구해서 직접 비교하는 것과 동치이다.
7 응용 1: 행렬 거듭제곱 \(\mathbf{A}^k\)
닮음 변환의 가장 큰 실용성 중 하나는 행렬 거듭제곱 계산을 극적으로 단순화한다는 것이다.
\(\mathbf{A} = \mathbf{M}\mathbf{B}\mathbf{M}^{-1}\) 이면:
\[ \mathbf{A}^2 = (\mathbf{M}\mathbf{B}\mathbf{M}^{-1})(\mathbf{M}\mathbf{B}\mathbf{M}^{-1}) = \mathbf{M}\mathbf{B}^2\mathbf{M}^{-1} \]
귀납적으로:
\[ \mathbf{A}^k = \mathbf{M}\mathbf{B}^k\mathbf{M}^{-1} \]
\(\mathbf{B}\) 가 대각 행렬 \(\mathbf{\Lambda}\) 이면 \(\mathbf{\Lambda}^k = \text{diag}(\lambda_1^k, \dots, \lambda_n^k)\) 로 거듭제곱이 각 성분의 거듭제곱으로 분리된다. \(n \times n\) 행렬의 \(k\) 거듭제곱을 naive하게 하면 \(O(kn^3)\) 이지만, 대각화 후에는 \(O(n^3 + n\log k)\) 수준으로 줄어든다.
7.1 피보나치 수열 예시
피보나치 점화식 \(F_{k+1} = F_k + F_{k-1}\) 을 행렬 형태로 쓰면:
\[ \begin{bmatrix} F_{k+1} \\ F_k \end{bmatrix} = \underbrace{\begin{bmatrix} 1 & 1 \\ 1 & 0 \end{bmatrix}}_{\mathbf{A}} \begin{bmatrix} F_k \\ F_{k-1} \end{bmatrix} \]
반복 적용하면 \(\begin{bmatrix} F_{k+1} \\ F_k \end{bmatrix} = \mathbf{A}^k \begin{bmatrix} 1 \\ 0 \end{bmatrix}\). \(\mathbf{A}\) 의 고유값은 황금비 \(\phi = (1+\sqrt{5})/2\) 와 \(\psi = (1-\sqrt{5})/2\) 이고, 대각화 \(\mathbf{A} = \mathbf{S}\mathbf{\Lambda}\mathbf{S}^{-1}\) 에서:
\[ F_k = \frac{\phi^k - \psi^k}{\sqrt{5}} \quad (\text{비네 공식, Binet's formula}) \]
이 단순한 닫힌 형식이 대각화 = 닮음 변환에서 바로 나온다.
일반 행렬의 거듭제곱은 “축이 얽혀 있는 상태에서 반복 회전·변형”을 계산하는 것이다. 대각 행렬에서는 축이 서로 독립이므로 각 축을 따로따로 \(\lambda_i^k\) 배 하면 끝난다. 닮음 변환은 “얽혀 있는 축을 풀어서 각자 독립적으로 움직이게 하는” 좌표 변환이다.
8 응용 2: 행렬 지수 \(e^{\mathbf{A}t}\) 와 미분방정식
연립 상미분방정식 \(\frac{d\mathbf{u}}{dt} = \mathbf{A}\mathbf{u}\) 의 해는 행렬 지수:
\[ \mathbf{u}(t) = e^{\mathbf{A}t}\mathbf{u}_0, \quad e^{\mathbf{A}t} = \sum_{k=0}^\infty \frac{(\mathbf{A}t)^k}{k!} \]
이 무한급수는 닮음 변환 하에 다음과 같이 변형된다.
\[ e^{\mathbf{A}t} = \mathbf{M}e^{\mathbf{B}t}\mathbf{M}^{-1} \]
\(\mathbf{B} = \mathbf{\Lambda}\) (대각) 이면:
\[ e^{\mathbf{\Lambda}t} = \text{diag}(e^{\lambda_1 t}, \dots, e^{\lambda_n t}) \]
즉, \(n\) 개의 독립 스칼라 ODE로 완전히 분리된다. 각 고유값이 해의 증가율(또는 감쇠율, 진동 주파수)을 결정하고, 고유벡터가 그 모드의 방향을 결정한다. 이것이 동역학에서 모드 분해(modal decomposition)의 수학적 근거이다.
8.1 결함 행렬의 경우 — Jordan과 \(t\) 가 붙는다
\(\mathbf{A}\) 가 결함이어서 대각화가 안 되면 조르당 형을 쓴다. \(2 \times 2\) 조르당 블록 \(\mathbf{J} = \begin{bmatrix} \lambda & 1 \\ 0 & \lambda \end{bmatrix}\) 에 대해:
\[ e^{\mathbf{J}t} = e^{\lambda t}\begin{bmatrix} 1 & t \\ 0 & 1 \end{bmatrix} \]
오른쪽 위에 \(t\) 가 나타난다. 해에 \(t e^{\lambda t}\) 형태의 항(세속 항, secular term)이 등장하는 이유가 바로 이것이다. 임계 감쇠(critically damped) 진동자가 \((c_1 + c_2 t)e^{-\omega t}\) 로 감쇠하는 것이 전형적인 예이다.
9 응용 3: 선형 동역학 시스템의 정성적 분류
2차원 시스템 \(\dot{\mathbf{x}} = \mathbf{A}\mathbf{x}\) 의 원점 근처 거동은 \(\mathbf{A}\) 의 고유값에 따라 분류된다. 닮음 변환은 이 분류를 그대로 유지한다.
| 고유값 | 이름 | 궤적 형태 |
|---|---|---|
| 실수, 둘 다 양수 | Unstable node | 원점에서 바깥으로 |
| 실수, 둘 다 음수 | Stable node | 원점으로 수렴 |
| 실수, 부호 다름 | Saddle (안장) | 한 축으로 접근, 다른 축으로 발산 |
| 복소, 실수부 양수 | Unstable spiral | 바깥으로 나선 |
| 복소, 실수부 음수 | Stable spiral | 안쪽으로 나선 |
| 순허수 | Center | 원 궤도 |
핵심 관찰: 이 분류는 고유값의 부호·복소성만 봐서 결정된다. 닮음 변환은 고유값을 바꾸지 않으므로, “정성적 행동”은 좌표계와 무관한 불변량이다. 두 시스템이 닮음이면 위상적으로(topologically) 등가이다.
10 응용 4: 딥러닝의 헤시안 스펙트럼 분석
현대 딥러닝에서는 손실 함수의 헤시안 \(\mathbf{H}(\boldsymbol{\theta})\) 의 고유값 분포가 최적화 거동을 지배한다. 배치 정규화·가중치 재파라미터화·learning rate warm-up 같은 기법들은 모두 헤시안의 조건수(conditioning)를 바꾸는 수단이다.
닮음 관점에서 보면:
- 가중치 재파라미터화 \(\boldsymbol{\theta} = \mathbf{M}\boldsymbol{\theta}'\) 는 좌표 변환이다
- 새 좌표계에서의 헤시안 \(\mathbf{H}' = \mathbf{M}^\top \mathbf{H}\mathbf{M}\) 은 합동 변환(congruence)이지 닮음이 아니다 (전치가 곱해짐)
- 하지만 고유값의 부호 개수는 보존된다 (Sylvester 관성 법칙)
- 따라서 “이 재파라미터화로 극솟점이 안장점이 되는 건 아닌가?” 같은 질문에 답할 수 있다
또한 대형 모델의 헤시안 직접 계산이 불가능하므로 암시적(implicit) 스펙트럼 추정 기법(Lanczos, stochastic trace estimation)을 쓰는데, 이들은 모두 “고유값 분포가 닮음 변환에 대해 안정하다”는 성질에 의존한다.
11 코드 예시
import numpy as np
from numpy.linalg import eig, matrix_rank
from scipy.linalg import schur
def similarity_invariants(A):
"""닮음 불변량 계산 — 두 행렬이 닮음인지 표면적 검사"""
A = np.asarray(A, dtype=float)
eigvals = np.sort(np.linalg.eigvals(A).real.round(10))
return {
'trace': np.trace(A),
'det': np.linalg.det(A),
'rank': matrix_rank(A),
'eigenvalues_sorted': eigvals,
'char_poly': np.poly(A).round(10), # 특성 다항식 계수
}
def check_similar_naive(A, B):
"""표면적 불변량만으로 닮음 후보 판별"""
inv_A = similarity_invariants(A)
inv_B = similarity_invariants(B)
checks = {k: np.allclose(inv_A[k], inv_B[k]) for k in inv_A}
all_match = all(checks.values())
return all_match, checks
# 예시 1: 실제로 닮음인 두 행렬 (같은 대각 행렬로 환원됨)
A1 = np.array([[2, 1], [0, 3]], dtype=float)
M = np.array([[1, 1], [0, 1]], dtype=float)
A2 = np.linalg.inv(M) @ A1 @ M
print("A1 =\n", A1)
print("\nA2 = M^-1 A1 M =\n", A2)
print("\n닮음 후보?", check_similar_naive(A1, A2)[0])
print("A1 고유값:", np.linalg.eigvals(A1))
print("A2 고유값:", np.linalg.eigvals(A2))# 예시 2: 같은 고유값·같은 중복도지만 닮지 않은 두 행렬 (블록 구조 차이)
# J_A: 3x3 Jordan block with lambda=-1
J_A = np.array([[-1, 1, 0],
[0, -1, 1],
[0, 0, -1]], dtype=float)
# J_B: 2x2 Jordan block + 1x1 block
J_B = np.array([[-1, 1, 0],
[0, -1, 0],
[0, 0, -1]], dtype=float)
print("특성 다항식 같은가?",
np.allclose(np.poly(J_A), np.poly(J_B)))
# 기하적 중복도 = dim N(A - lambda I)
def geometric_multiplicity(A, lam, tol=1e-10):
n = A.shape[0]
return n - matrix_rank(A - lam * np.eye(n), tol=tol)
print("J_A 의 lambda=-1 기하적 중복도:",
geometric_multiplicity(J_A, -1))
print("J_B 의 lambda=-1 기하적 중복도:",
geometric_multiplicity(J_B, -1))
print("→ 기하적 중복도가 다르므로 닮음 아님")# 예시 3: 대각화로 A^k 계산하기 (피보나치)
A = np.array([[1, 1], [1, 0]], dtype=float)
eigvals, S = eig(A)
Lambda = np.diag(eigvals)
S_inv = np.linalg.inv(S)
def fib_via_diagonalization(n):
A_n = (S @ np.diag(eigvals**n) @ S_inv).real
return int(round(A_n[0, 1])) # F_n
print("F_10 =", fib_via_diagonalization(10)) # 55
print("F_20 =", fib_via_diagonalization(20)) # 6765
print("F_50 =", fib_via_diagonalization(50)) # 12586269025
# 비네 공식과 비교
phi = (1 + np.sqrt(5)) / 2
psi = (1 - np.sqrt(5)) / 2
print("비네 F_20:", (phi**20 - psi**20) / np.sqrt(5))# 예시 4: 결함 행렬의 Jordan form 과 행렬 지수
from scipy.linalg import expm
J = np.array([[3, 1], [0, 3]], dtype=float) # 크기 2 Jordan 블록
t = 1.5
exp_Jt = expm(J * t)
print("e^(Jt) =\n", exp_Jt)
# 이론값: e^(3t) * [[1, t], [0, 1]]
theory = np.exp(3 * t) * np.array([[1, t], [0, 1]])
print("\n이론값:\n", theory)
print("\n일치:", np.allclose(exp_Jt, theory))# 닮음 불변량 계산
similarity_invariants <- function(A) {
list(
trace = sum(diag(A)),
det = det(A),
rank = qr(A)$rank,
eigvals = sort(round(Re(eigen(A, only.values = TRUE)$values), 10)),
char_poly = round(as.numeric(polynom::as.polynomial(
sapply(0:nrow(A), function(k) (-1)^k * sum(diag(A %^% k))))), 10)
)
}
# 닮음 관계 확인
A1 <- matrix(c(2, 0, 1, 3), nrow = 2)
M <- matrix(c(1, 0, 1, 1), nrow = 2)
A2 <- solve(M) %*% A1 %*% M
cat("A1:\n"); print(A1)
cat("\nA2 = M^-1 A1 M:\n"); print(A2)
cat("\nA1 고유값:", eigen(A1)$values, "\n")
cat("A2 고유값:", eigen(A2)$values, "\n")# 대각화로 피보나치 계산
A <- matrix(c(1, 1, 1, 0), nrow = 2)
eig <- eigen(A)
S <- eig$vectors
Lambda <- diag(eig$values)
S_inv <- solve(S)
fib_diag <- function(n) {
A_n <- Re(S %*% diag(eig$values^n) %*% S_inv)
round(A_n[1, 2])
}
cat("F_10 =", fib_diag(10), "\n")
cat("F_20 =", fib_diag(20), "\n")
cat("F_50 =", fib_diag(50), "\n")# 결함 행렬: Jordan form과 e^(Jt)
library(expm)
J <- matrix(c(3, 0, 1, 3), nrow = 2) # upper 2x2 Jordan block
t <- 1.5
expJt <- expm(J * t)
cat("e^(Jt) =\n"); print(expJt)
# 이론값: exp(3t) * [[1, t], [0, 1]]
theory <- exp(3 * t) * matrix(c(1, 0, t, 1), nrow = 2)
cat("\n이론값:\n"); print(theory)
cat("\n일치:", all.equal(expJt, theory), "\n")12 수치적 한계와 실무적 대안
이론적으로 우아한 조르당 표준형은 실무에서는 거의 사용되지 않는다. 이유는 다음과 같다.
12.1 조르당 형은 수치적으로 불안정하다
결함 행렬에 극미한 섭동을 가하면 중복 고유값이 갈라져서 대각화 가능한 행렬로 바뀐다.
\[ \mathbf{A} = \begin{bmatrix} 3 & 1 \\ 0 & 3 \end{bmatrix} \quad \xrightarrow{\text{섭동 }\epsilon} \quad \begin{bmatrix} 3 & 1 \\ 0 & 3+\epsilon \end{bmatrix} \]
섭동된 행렬은 서로 다른 고유값 \(3\) 과 \(3+\epsilon\) 을 가지므로 대각화 가능하다 — 즉 Jordan 블록 구조가 완전히 달라진다. 부동소수점 환경에서는 모든 행렬이 이런 섭동을 받은 것이나 마찬가지이므로, Jordan 구조는 “관찰할 수 없는” 구조가 된다.
12.2 실무 대안 1: Schur 분해
모든 정사각 행렬은 유니터리 닮음으로 상삼각 행렬로 바뀐다 (Schur 분해).
\[ \mathbf{A} = \mathbf{Q}\mathbf{T}\mathbf{Q}^\top \quad (\mathbf{Q}\text{ 직교}, \mathbf{T}\text{ 상삼각}) \]
\(\mathbf{T}\) 의 대각에 고유값이 나타난다. 유니터리 변환은 수치적으로 극히 안정하므로 실무에서 고유값 계산의 표준이다 (QR 알고리즘이 내부적으로 이것을 수행한다).
12.3 실무 대안 2: SVD
\(\mathbf{A} = \mathbf{U}\mathbf{\Sigma}\mathbf{V}^\top\) 는 모든 행렬(직사각 포함)에 대해 존재하며 수치적으로 안정하다. Jordan 블록 같은 결함 구조에 영향받지 않는다. \(\mathbf{A}^\top\mathbf{A}\) 와 \(\mathbf{A}\mathbf{A}^\top\) 의 양정치 구조에서 파생되므로 항상 잘 정의된다.
12.4 정리
| 상황 | 권장 분해 |
|---|---|
| 이론적 구조 분석 | 조르당 표준형 |
| 고유값·고유벡터 계산 | Schur 분해 (또는 symmetric 한정 스펙트럼 정리) |
| 랭크·최소제곱·PCA | SVD |
| 양정치 시스템 풀이 | Cholesky |
조르당은 이론의 끝판왕이고, 실무의 주인공은 Schur와 SVD이다. 하지만 조르당 없이는 “왜” 그 대안들이 필요한지 이해할 수 없다.
13 요약
| 개념 | 핵심 내용 |
|---|---|
| 정의 | \(\mathbf{B} = \mathbf{M}^{-1}\mathbf{A}\mathbf{M}\); 같은 변환의 서로 다른 좌표 표현 |
| 기저 변환 직관 | 새 기저 → 표준 → 변환 → 다시 새 기저 (통역-실행-역통역) |
| 동치 관계 | 반사·대칭·이행 모두 성립, 행렬 공간을 동치류로 분할 |
| 고유값 보존 | 닮음 행렬은 같은 고유값을 가진다 (고유벡터는 \(\mathbf{M}^{-1}\) 로 변환) |
| 닮음 불변량 | 특성 다항식, 대각합, 행렬식, 랭크, 최소 다항식, Jordan 구조 |
| 대각화 | 가장 단순한 닮음 — \(\mathbf{A} = \mathbf{S}\mathbf{\Lambda}\mathbf{S}^{-1}\); \(n\) 개 독립 고유벡터 조건 |
| 결함 행렬 | 기하적 중복도 < 대수적 중복도; 대각화 불가 |
| 조르당 표준형 | 모든 행렬은 Jordan 블록의 대각합과 닮음; 닮음의 완전 불변량 |
| 조르당 체인 | 일반화 고유벡터로 결함 방향을 채운다: \((\mathbf{A} - \lambda\mathbf{I})\mathbf{v}_{k+1} = \mathbf{v}_k\) |
| 행렬 거듭제곱 | \(\mathbf{A}^k = \mathbf{M}\mathbf{B}^k\mathbf{M}^{-1}\); 대각 시 성분별 거듭제곱 |
| 행렬 지수 | \(e^{\mathbf{A}t} = \mathbf{M}e^{\mathbf{B}t}\mathbf{M}^{-1}\); Jordan 블록은 \(te^{\lambda t}\) 항 생성 |
| 수치 대안 | Jordan은 수치적으로 불안정 → Schur·SVD 사용 |
14 관련 주제
선행 지식
- Ch.6 §6.1 — 고유값 개요 — 고유값·고유벡터 기본
- Ch.6 §6.2 — 행렬의 대각화 — 대각화는 닮음의 가장 단순한 경우
- Ch.6 §6.3 — 미분방정식 응용 — 행렬 지수와 모드 분해
- Ch.6 §6.4 — 대칭 행렬 — 항상 대각화 가능한 특수 경우
- Ch.6 §6.5 — 양정치 행렬 — 고유값 부호가 안정성 결정
후속 주제
- Ch.6 §6.7 — 특이값 분해(SVD): 결함에 영향받지 않는 수치 안정 분해
- Ch.7 — 선형 변환과 기저 변환의 일반론
관련 개념
- Special Matrices — 카탈로그 — 특수 행렬의 구조적 성질
다른 카테고리 연결
- 행렬 지수와 선형 ODE — Statistics/미분방정식
- 딥러닝 헤시안 스펙트럼 분석 — Machine Learning
- 동역학 시스템 분류 — Math/Optimization (볼록 분석과 안정성)