Jordan 형태로의 구체적 알고리즘
이전까지 살펴본 Jordan 표준형의 존재 정리와 이론적 배경은, “임의의 복소행렬을 유사변환을 통해 Jordan 블록들의 대각 형태(상삼각)로 만들 수 있다”는 것을 알려준다. 이번 섹션에서는 실제 계산 관점에서, “어떻게 Jordan 표준형을 찾아가는가?”를 단계적으로 정리해 본다. 이는 Jordan 형태로의 변환 과정 혹은 Jordan 정규형 알고리즘이라 부를 수 있다.
Jordan 표준형 계산의 큰 흐름
-
고윳값(및 대수적 중복도) 찾기
\(\det(A - \lambda I) = 0\)을 풀어, 행렬 \(A\)가 갖는 모든 고윳값을 구한다(복소수 범위 \(\mathbb{C}\)). 각 고윳값의 대수적 중복도(\(k\))를 확인한다. -
기하적 중복도 파악, 일반화 고유공간 구하기
\(\mathrm{Ker}(A - \lambda I)\)의 차원(기하적 중복도)을 살피고, 기하적 중복도가 대수적 중복도보다 작으면 해당 고윳값에 대해 추가 벡터(일반화 고유벡터)가 필요함을 인지한다. -
Jordan 사슬(Jordan chain) 구성
각 고윳값 \(\lambda\)별로, (기하적 중복도 수만큼) 독립적인 “사슬(chain)”을 만든다. 이 “사슬”이란, \[ (A - \lambda I)\mathbf{v}_1 = 0,\quad (A - \lambda I)\mathbf{v}_2 = \mathbf{v}_1,\quad (A - \lambda I)\mathbf{v}_3 = \mathbf{v}_2,\quad \dots \] 처럼 연쇄적으로 연결되는 일반화 고유벡터(generalized eigenvector)들을 의미한다. 사슬의 길이가 곧 Jordan 블록의 크기를 결정한다. -
블록 크기 배분
대수적 중복도가 \(m\)인 고윳값이라면, 그 고유공간(및 일반화 고유공간)에서 여러 개의 사슬(블록)이 형성되며, 각 사슬의 길이를 합하면 \(m\)이 된다. 예: \(\lambda\)가 4중근이라면, \(\mathbf{v}\) 사슬 길이 2 + 다른 사슬 길이 1 + 또 다른 사슬 길이 1 = 4와 같은 식으로 분할된다. -
Jordan 표준형 및 변환 행렬 구성
모든 고윳값에 대해 사슬을 전부 구하고 나면, 각 사슬별로 “\(J_{\text{length}}(\lambda)\)” 형태의 Jordan 블록이 하나씩 생긴다. 이 블록들을 대각 블록으로 늘어놓은 상삼각행렬이 곧 Jordan 표준형이고, 이 블록들에서 사슬을 이루는 벡터들을 열벡터로 모아 만든 행렬 \(P\)가 \[ P^{-1}AP = J \] 를 만족하게 된다.
단계별 더 자세한 설명
-
고윳값과 대수적 중복도 찾기
- \(\det(A - \lambda I) = 0\)을 풀어, 모든 \(\lambda_i\)와 해당 중복도를 파악한다. 예를 들어, 특성다항식이 \((\lambda - 1)^2(\lambda + 2)^3\)이면, \(\lambda=1\) (2중근), \(\lambda=-2\) (3중근)이다.
-
각 \(\lambda_i\)에 대해 \(\mathrm{Ker}((A - \lambda_i I)^k)\)를 검사
- \(\mathrm{Ker}(A - \lambda_i I)\)의 차원 = 1차 일반화 공간. 기하적 중복도.
- \(\mathrm{Ker}((A - \lambda_i I)^2)\)를 살펴보면, 2차 일반화 공간의 차원을 안다. 이것이 \(\mathrm{Ker}((A - \lambda_i I)^1)\)보다 얼마나 증가했는지로 사슬 길이를 유추한다.
- 이런 식으로 \(\mathrm{Ker}((A - \lambda_i I)^m)\)를 살피며, Jordan 사슬을 어떻게 구성해야 할지 결정한다.
-
사슬(Chain) 구성 알고리즘
- 먼저 \(\mathrm{Ker}(A - \lambda_i I)\)에서 고유벡터(“사슬”의 시작점)를 골라 잡는다. 예: \(\mathbf{v}_1\).
- 만약 \((A - \lambda_i I)\mathbf{v}_2 = \mathbf{v}_1\) 를 만족하는 \(\mathbf{v}_2\)가 있으면, 그 벡터가 사슬의 2번째 벡터가 된다.
- 동일하게 \((A - \lambda_i I)\mathbf{v}_3 = \mathbf{v}_2\) 등을 이어 간다.
- 이렇게 얻는 \(\mathbf{v}_1, \mathbf{v}_2, \dots, \mathbf{v}_m\) 길이가 곧 하나의 Jordan 블록 크기를 의미.
- 고윳값 \(\lambda_i\)가 (예) 5중근이라면, 이를 만족하는 여러 사슬을 나눠서 합쳐야 합이 5가 된다 (예: 2 + 2 + 1).
-
Jordan 표준형 조립
- 각 고윳값 \(\lambda_i\)마다 확보된 사슬(블록)들을 대각 블록 형태로 배치한다.
- 예: \(\lambda_1\)에 대해 길이가 3인 블록이 하나, 길이가 1인 블록이 하나 있다면, \(\lambda_1\) 영역에서 \(J_3(\lambda_1)\oplus J_1(\lambda_1)\) 식으로 놓는다.
- 다른 고윳값 \(\lambda_j\)에 대한 블록들도 비슷하게 붙여서, 최종 Jordan 표준형을 완성한다.
조르당 표준형을 구하는 예
특성다항식이 \((\lambda - 2)^3(\lambda + 1)\)인 4×4 행렬이 있다고 하자. \(\lambda=2\)는 3중근, \(\lambda=-1\)은 1중근이다.
- \(\lambda=2\)의 고유공간 \(\mathrm{Ker}(A-2I)\)이 1차원에 그친다면, 그 방향 고유벡터는 하나다. 하지만 \(\mathrm{Ker}((A-2I)^2)\)가 2차원, \(\mathrm{Ker}((A-2I)^3)\)가 3차원 등이 될 수 있어, 결국 Jordan 사슬이 길이 2와 길이 1짜리로 나눠질 수 있다. (다른 조합으로 나누어질 수도 있다.)
- \(\lambda=-1\)은 단순근이라, 고유공간 1차원이므로 곧바로 1×1 블록이 되며, 그 벡터 사슬도 길이1에 그친다.
- 이 정보를 토대로, Jordan 표준형은 \(\lambda=2\)에 대한 “\(J_2(2)\oplus J_1(2)\)”와, \(\lambda=-1\)에 대한 “\(J_1(-1)\)”를 대각 블록으로 놓아 \[ \begin{pmatrix} 2 & 1 & & \\ & 2 & & \\ & & 2 & \\ & & & -1 \end{pmatrix}, \] 식이 된다고 볼 수 있다. (실제 블록 배치 순서는 다를 수 있다.)
지금까지 살펴본 Jordan 형태로의 구체적 알고리즘을 요약하면 다음과 같다.
- 고윳값 \(\lambda\)들과 대수적 중복도 파악
- 일반화 고유공간(즉, \(\mathrm{Ker}((A-\lambda I)^k)\))을 차원별로 검사
- 각 \(\lambda\)에 대해 Jordan 사슬을 만들고, 블록 크기를 결정
- 블록들을 대각 블록 형태로 배치 → Jordan 표준형 완성
- 사슬을 이루는 벡터들을 열벡터로 모아 행렬 \(P\) 구성 → \(\;P^{-1} A\,P =\) Jordan 표준형
결국, Jordan 표준형은 대각화가 실패하는 경우에도 일련의 일반화된 고유벡터 사슬을 이용해 행렬을 ‘최소한의 상삼각(블록 대각)’ 형태로 단순화하는 과정이며, 이 알고리즘은 차원수가 커질수록 복잡해 보이지만, 사슬을 찾는다는 큰 그림은 변하지 않는다.
더 큰 행렬의 Jordan 표준형을 구하는 예
이번에는 4×4 행렬에 대해 Jordan 표준형을 구해 보는 복잡한 예시를 들어보자. 여러 고윳값이 중복되어 나타나고, 일부 고윳값에 대해서 기하적 중복도가 충분치 않아 일반화 고유벡터(chain)를 만들어야 하는 상황을 직접 살펴보면서 전체 알고리즘을 단계별로 확인해 볼 것이다.
예제 행렬
다음 4×4 행렬 \(A\)를 생각하자.
\[ A = \begin{pmatrix} 2 & 1 & 0 & 0 \\ 0 & 2 & 0 & 0 \\ 0 & 0 & -1 & 1 \\ 0 & 0 & 0 & -1 \end{pmatrix}. \]
- 이 행렬은 상블록 형태로 구분되어 있으며, 윗블록은 \(2 \times 2\), 아랫블록은 \(2 \times 2\)다.
- 각 블록에 “대각선이 모두 같은 값(\(2\) 또는 \(-1\))”과 “윗대각에 \(1\)”이 나타나는 구조를 볼 수 있다.
예상해 보면, \(\lambda=2\)가 중복 2, \(\lambda=-1\)이 중복 2로 나타날 듯하다. 각 고윳값마다 기하적 중복도가 1이므로, Jordan 블록이 각각 2×2 사이즈로 형성될 가능성이 높다. 아래에서 실제로 확인해 보자.
1단계. 특성다항식 및 고윳값 찾기
-
특성다항식 구하기
\(A - \lambda I\)는
\[
\begin{pmatrix}
2-\lambda & 1 & 0 & 0 \\
0 & 2-\lambda & 0 & 0 \\
0 & 0 & -1-\lambda & 1 \\
0 & 0 & 0 & -1-\lambda
\end{pmatrix}.
\]
이는 블록 대각 형태이므로, 행렬식(결정식)은 각 블록 결정식의 곱이 된다.
윗블록은 \[\begin{pmatrix}2-\lambda & 1\\ 0 & 2-\lambda\end{pmatrix} \quad\longrightarrow\quad (2-\lambda)^2\] 이며, 아랫블록은 \[\begin{pmatrix}-1-\lambda & 1\\ 0 & -1-\lambda\end{pmatrix} \quad\longrightarrow\quad (-1-\lambda)^2\] 이다. 따라서 \[ \det(A - \lambda I) = (2-\lambda)^2 (-1-\lambda)^2. \] - 고윳값과 대수적 중복도 \[\begin{gathered} (2-\lambda)^2 = 0 \quad\Longrightarrow\quad \lambda=2 \quad(\text{multiplicity }2),\\[6pt] (-1-\lambda)^2 = 0 \quad\Longrightarrow\quad \lambda=-1 \quad(\text{multiplicity }2). \end{gathered}\] 즉, \(\lambda=2\)가 2중근, \(\lambda=-1\)도 2중근이다.
2단계. \(\lambda=2\)에 대한 고유공간 및 일반화 고유공간
-
고유공간 \(\mathrm{Ker}(A - 2I)\) 계산
\[
A - 2I
= \begin{pmatrix}
0 & 1 & 0 & 0 \\
0 & 0 & 0 & 0 \\
0 & 0 & -3 & 1 \\
0 & 0 & 0 & -3
\end{pmatrix}.
\]
이 행렬을 \(\mathbf{x}=(x_1,x_2,x_3,x_4)^T\)에 곱했을 때 0이 되려면,
1행: \(0\cdot x_1 + 1\cdot x_2 = 0 \Rightarrow x_2=0.\)
2행: 모두 0 → 별도 제한 없음.
3행: \(-3x_3 + 1\cdot x_4=0 \Rightarrow x_4=3x_3.\)
4행: \(-3x_4=0 \Rightarrow x_4=0 \Rightarrow x_3=0.\)
그런데 4행에서 \(x_4=0\)가 나오니, 3행에서 \(x_4=3x_3\)는 \(x_3=0\)을 의미한다. 즉 \(x_2=0, x_3=0, x_4=0\)이다. 자유변수는 \(x_1\)만 남는다. 따라서 \(\mathrm{Ker}(A - 2I)\)는 1차원으로, 대표 벡터 \(\mathbf{v}_1=(1,\,0,\,0,\,0)\) 등으로 잡을 수 있다. 이것은 기하적 중복도가 1임을 뜻한다. -
\((A - 2I)^2\) 계산 및 \(\mathrm{Ker}((A-2I)^2)\) 확인
\[
(A - 2I)^2
= \begin{pmatrix}
0 & 1 & 0 & 0 \\
0 & 0 & 0 & 0 \\
0 & 0 & -3 & 1 \\
0 & 0 & 0 & -3
\end{pmatrix}^2.
\]
이 곱을 수행하면, 윗블록 \[\begin{pmatrix}0 & 1\\0 & 0\end{pmatrix}^2\]은 영행렬이 된다.
아랫블록 \[\begin{pmatrix}-3 & 1\\ 0 & -3\end{pmatrix}^2\]은 \[\begin{pmatrix}9 & -6\\0 & 9\end{pmatrix} + \dots\] 형태를 가질 것이다. 자세히 계산해 보자.
\[\begin{aligned}
\begin{pmatrix}-3 & 1\\ 0 & -3\end{pmatrix}
&\begin{pmatrix}-3 & 1\\ 0 & -3\end{pmatrix}\\[6pt]
&= \begin{pmatrix}
(-3)(-3) + 1\cdot0 & (-3)\cdot1 + 1\cdot(-3) \\
0\cdot(-3) + (-3)\cdot 0 & 0\cdot1 + (-3)(-3)
\end{pmatrix}\\[6pt]
&= \begin{pmatrix}
9 & -6 \\ 0 & 9
\end{pmatrix}.
\end{aligned}\]
그래서
\[
(A - 2I)^2
= \begin{pmatrix}
0 & 0 & 0 & 0 \\
0 & 0 & 0 & 0 \\
0 & 0 & 9 & -6 \\
0 & 0 & 0 & 9
\end{pmatrix}.
\]
이다. 이제 \(\mathbf{x}=(x_1,x_2,x_3,x_4)^T\)에 곱해 0이 되려면,
\[
\begin{pmatrix}
9x_3 -6x_4\\
9x_4
\end{pmatrix} = (0,0)
\]
이므로 다음을 얻는다. \[9x_4=0 \Rightarrow x_4=0, \quad 9x_3 -6\cdot0=0 \Rightarrow x_3=0.\]
윗 2×2는 모두 0이므로, 거기에서 추가 제한은 없다.
\[\therefore\, x_3=0, x_4=0.\] 자유변수는 \(x_1, x_2\)로서 2개이다.
즉 \(\mathrm{Ker}((A-2I)^2)\)는 2차원 공간으로, \(\mathbf{v}_1=(1,0,0,0)\), \(\mathbf{w}_2=(0,1,0,0)\) 등 일차독립인 2개 독립 벡터를 포함한다.
이미 \(\mathbf{v}_1\in \mathrm{Ker}(A-2I)\)였고, \(\mathbf{w}_2\notin \mathrm{Ker}(A-2I)\)이지만 \(\mathbf{w}_2\in \mathrm{Ker}((A-2I)^2)\)인 경우를 “일반화 고유벡터”라고 부를 수 있다. -
사슬(Chain) 만들기
\(\mathbf{v}_1=(1,0,0,0)\)는 이미 고유벡터. \(\mathbf{w}_2=(0,1,0,0)\)에 대해 \[(A-2I)\mathbf{w}_2 = (A-2I)\begin{pmatrix}0\\1\\0\\0\end{pmatrix}\]를 계산하면 \[ \begin{pmatrix} 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 \\ 0 & 0 & -3 & 1 \\ 0 & 0 & 0 & -3 \end{pmatrix} \begin{pmatrix}0\\1\\0\\0\end{pmatrix} = \begin{pmatrix}1\\0\\0\\0\end{pmatrix} = \mathbf{v}_1 \] 이다. 즉 \((A-2I)\mathbf{w}_2 = \mathbf{v}_1\)이다. 이로써 사슬 “\(\mathbf{v}_1 \leftarrow \mathbf{w}_2\)”를 얻으며, 이 사슬의 길이는 2이다. 따라서 \(\lambda=2\)에 대해 Jordan 블록의 크기는 2이다.
3단계. \(\lambda=-1\)에 대한 고유공간 및 일반화 고유공간
이제 동일한 방식을 \(\lambda=-1\)에 대해서도 수행한다.
-
\(\mathrm{Ker}(A + I)\) 계산
\[
A - (-1)I = A + I
= \begin{pmatrix}
3 & 1 & 0 & 0\\
0 & 3 & 0 & 0\\
0 & 0 & 0 & 1\\
0 & 0 & 0 & 0
\end{pmatrix}.
\]
\(\mathbf{x}=(x_1,x_2,x_3,x_4)^T\)에 곱해 0이 되려면,
1행: \(3x_1 + x_2=0,\)
2행: \(3x_2=0\Rightarrow x_2=0\) → 1행서 \(3x_1=0\Rightarrow x_1=0.\)
3행: \(0\cdot x_3 + 1\cdot x_4=0\Rightarrow x_4=0.\)
4행: \(0=0\)으로서 자명하다.
따라서 \(\mathbf{x}\)는 \(x_3\)만 자유변수이고, \(x_1=0, x_2=0, x_4=0\)이다. \(\mathrm{Ker}(A+I)\)는 1차원이고, 대표 벡터를 \(\mathbf{v}_3=(0,0,1,0)\)로 잡을 수 있다. - \((A + I)^2\) 및 \(\mathrm{Ker}((A+I)^2)\) \[ (A+I)^2 = \begin{pmatrix} 3 & 1 & 0 & 0 \\ 0 & 3 & 0 & 0 \\ 0 & 0 & 0 & 1 \\ 0 & 0 & 0 & 0 \end{pmatrix}^2. \] 윗블록은 \[\begin{pmatrix}3 & 1\\0 & 3\end{pmatrix}^2 = \begin{pmatrix}9 & 6\\ 0 & 9\end{pmatrix}\]이고 아랫블록은 \[\begin{pmatrix}0 & 1\\0 & 0\end{pmatrix}^2 = 0\]이다. 따라서 \[ (A+I)^2 = \begin{pmatrix} 9 & 6 & 0 & 0 \\ 0 & 9 & 0 & 0 \\ 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 \end{pmatrix}. \] 이제 \((A+I)^2 \mathbf{x}=0\)를 보면, \[\begin{aligned} 9x_1 + 6x_2 = 0,\\[6pt] 9x_2=0 \Rightarrow x_2=0 \Rightarrow 9x_1=0\Rightarrow x_1=0 \end{aligned}\] 이며, 아래 2행은 \(0\)이다. 윗블록 결과는 \(x_1=0,\,x_2=0\)이다. 아래 2×2 블록이 0이므로 \(x_3,\,x_4\)에 대해서는 다음이 성립한다. \[\begin{pmatrix}0 & 0 \\ 0 & 0\end{pmatrix} \cdot \begin{pmatrix}x_3 \\ x_4\end{pmatrix} = 0\] 그러므로 \(\mathrm{Ker}((A+I)^2)\)의 차원은 2이고, 그 해는 \(\mathbf{x} = (0,0,x_3,x_4)\)이다. 그런데 \(\mathbf{v}_3=(0,0,1,0)\in \mathrm{Ker}(A+I)\)이다. 다시 \(\mathbf{w}_4=(0,0,0,1)\) 같은 벡터가 \(\mathrm{Ker}((A+I)^2)\)에 속하지만 \(\mathrm{Ker}(A+I)\)에 속하지는 않는다. 이것이 일반화 고유벡터 역할을 한다.
- 사슬(Chain) 구성 \[ (A + I)\mathbf{w}_4 = \begin{pmatrix} 3 & 1 & 0 & 0 \\ 0 & 3 & 0 & 0 \\ 0 & 0 & 0 & 1 \\ 0 & 0 & 0 & 0 \end{pmatrix} \begin{pmatrix}0\\0\\0\\1\end{pmatrix} = \begin{pmatrix}0\\0\\1\\0\end{pmatrix} = \mathbf{v}_3. \] 즉 \((A + I)\mathbf{w}_4 = \mathbf{v}_3\)이다. 따라서 \(\{\mathbf{v}_3, \mathbf{w}_4\}\) 사슬이 길이가 2 블록을 형성한다.
4단계. Jordan 표준형 구성
- \(\lambda=2\)에 대한 사슬은 \(\mathbf{v}_1\leftarrow \mathbf{w}_2\)이고 길이는 2이다.
- \(\lambda=-1\)에 대한 사슬은 \(\mathbf{v}_3\leftarrow \mathbf{w}_4\)이고 길이는 2이다.
결국, \(\lambda=2\) 블록이 \(J_2(2)\) 하나, \(\lambda=-1\) 블록이 \(J_2(-1)\) 하나 생긴다. 따라서 Jordan 표준형 \(J\)는 \[ \begin{pmatrix} 2 & 1 & 0 & 0 \\ 0 & 2 & 0 & 0 \\ 0 & 0 & -1 & 1 \\ 0 & 0 & 0 & -1 \end{pmatrix}. \] 이와 같은 상삼각 블록 형태가 된다. (사실상 \(A\) 자체가 이미 Jordan 표준형이었다.)
실제로, 위 예시의 \(A\)가 이미 그 모습으로 주어졌으므로, “이 행렬 자체가 Jordan 표준형이다”라 보면 된다. 보통 우리가 임의의 행렬에 대해 이런 블록 형태를 만들기 위해, 열벡터를 \(\{\mathbf{v}_1,\,\mathbf{w}_2,\,\mathbf{v}_3,\,\mathbf{w}_4\}\) 식으로 정렬한 행렬 \(P\)를 구성하고, \[ P^{-1} A P = \begin{pmatrix} J_2(2) & 0 \\ 0 & J_2(-1) \end{pmatrix} \] 을 얻게 된다.
지금까지 살펴본 예는 두 개의 고윳값(각각 중복도 2)을 갖고, 각 고윳값마다 기하적 중복도가 1이라서 대각화는 불가능하지만, 길이가 2인 Jordan 블록을 형성함으로써 상삼각 형태로 정리될 수 있음을 보여 준다. 실제 계산 단계는 다음과 같았다.
- 특성다항식 → 고윳값(대수적 중복도) 확인.
- 고유공간(\(\mathrm{Ker}(A-\lambda I)\)) 차원 체크 → 기하적 중복도 파악.
- (필요하다면) \(\mathrm{Ker}((A-\lambda I)^2)\), \(\mathrm{Ker}((A-\lambda I)^3)\) 등으로 확장하여 일반화 고유벡터를 찾는.
- 사슬(Chain)을 만들어 블록 크기를 결정.
- 최종적으로 Jordan 표준형을 얻는다.
실제 예에서는 행렬이 이미 Jordan 형태를 띠고 있었지만, 일반적인 행렬에 대해서도 위와 같은 과정을 거치면 유사변환(\(P^{-1}AP\))을 통해 이와 같은 블록 대각 행렬로 만들어 낼 수 있다.