Ch.6 Overview — 고유값과 고유벡터 (Eigenvalues and Eigenvectors)

정의, 기하학적 직관, 특성 방정식, 핵심 성질, ML 응용까지

행렬이 벡터에 작용할 때 방향을 바꾸지 않는 특별한 벡터, 고유벡터와 그 배율인 고유값을 체계적으로 다룬다. 기하학적 직관을 중심으로 정의·특성 방정식·핵심 성질을 전개하고, 동적 시스템, PCA, PageRank 등 데이터 사이언스 실무에서의 응용을 연결한다.

Math
Linear Algebra
저자

Kwangmin Kim

공개

2026년 04월 10일

1 왜 고유값인가 — 동적 문제의 언어

지금까지 선형대수는 \(A\mathbf{x} = \mathbf{b}\) 라는 정적(steady-state) 문제를 중심으로 전개되었다. 행을 소거하고, 역행렬을 구하고, 최소제곱 해를 찾는 모든 작업은 “지금 이 순간의 값”을 구하는 데 집중한다.

그런데 현실에는 시간에 따라 변하는 동적(dynamic) 문제가 훨씬 많다.

  • 마르코프 체인: 웹페이지 방문 확률이 시간이 지나면서 어떻게 수렴하는가?
  • 미분방정식: \(\frac{d\mathbf{u}}{dt} = A\mathbf{u}\) 의 해는 어떻게 성장·붕괴·진동하는가?
  • 행렬 거듭제곱: \(A^{100}\mathbf{x}\) 를 100번 곱하지 않고 구할 수 있는가?

이 세 질문 모두 같은 답에 의존한다. 바로 고유값(eigenvalue)과 고유벡터(eigenvector)이다. 고유벡터는 행렬 \(A\) 를 곱해도 방향이 바뀌지 않는 특별한 벡터이고, 고유값은 그 벡터의 길이가 몇 배 늘어나거나 줄어드는지를 나타내는 수이다.

핵심 직관 — 행렬을 함수로 바라보기

\(A\) 를 “벡터를 입력받아 다른 벡터를 출력하는 함수”로 보면:

  • 일반 벡터 \(\mathbf{v}\) 를 입력하면 \(A\mathbf{v}\) 는 방향도, 길이도 바뀐다.
  • 고유벡터 \(\mathbf{x}\) 를 입력하면 \(A\mathbf{x} = \lambda \mathbf{x}\) — 방향은 그대로, 길이만 \(\lambda\) 배 변한다.

고유벡터는 \(A\) 의 “고유한 축(axis)”이다. 이 축을 따라 움직이는 성분은 행렬에 의해 흐트러지지 않는다.


2 정의 (Definition)

정의: 고유값과 고유벡터 (Eigenvalue and Eigenvector)

\(n \times n\) 정방행렬 \(\mathbf{A}\) 에 대해, 다음을 만족하는 영벡터가 아닌 벡터 \(\mathbf{x} \in \mathbb{R}^n\) 와 스칼라 \(\lambda \in \mathbb{C}\) 의 쌍이 존재하면:

\[\mathbf{A}\mathbf{x} = \lambda \mathbf{x}\]

  • \(\mathbf{x}\)\(\mathbf{A}\)고유벡터(eigenvector),
  • \(\lambda\) 를 해당 고유벡터에 대응하는 고유값(eigenvalue)이라 한다.

표기 정리

기호 의미
\(\mathbf{A}\) \(n \times n\) 정방행렬
\(\mathbf{x}\) 고유벡터 (영벡터 제외, \(\mathbf{x} \neq \mathbf{0}\))
\(\lambda\) 고유값 (실수 또는 복소수)
\(\lambda \mathbf{x}\) 고유벡터의 스칼라 배

영벡터를 제외하는 이유: \(\mathbf{A}\mathbf{0} = \lambda \mathbf{0}\) 은 모든 \(\lambda\) 에 대해 성립하므로, 영벡터를 허용하면 고유값을 정의할 수 없다.


3 기하학적 직관 (Geometric Intuition)

수식 \(\mathbf{A}\mathbf{x} = \lambda \mathbf{x}\) 를 기하학적으로 읽으면:

“행렬 \(\mathbf{A}\) 가 벡터 \(\mathbf{x}\) 를 같은 선(span) 위에 남겨둔다.”

\(\lambda\) 의 값에 따라 고유벡터가 어떻게 변하는지 직관적으로 정리하면 다음과 같다.

\(\lambda\) 기하학적 효과 예시
\(\lambda = 1\) 불변 (그대로) 항등행렬 \(I\) 의 모든 벡터
\(\lambda > 1\) 같은 방향으로 늘어남 크기 확대 변환
\(0 < \lambda < 1\) 같은 방향으로 줄어듦 감쇠 모드
\(\lambda = 0\) 영벡터로 붕괴 영공간의 벡터 (\(\mathbf{A}\) 가 특이행렬)
\(\lambda < 0\) 반대 방향으로 뒤집힘 반사 변환
\(\lambda \in \mathbb{C}\) 회전 포함 순수 회전 행렬

3.1 세 가지 고전 예시

3.1.1 투영 행렬 (Projection Matrix)

\(y = x\) 위로의 투영 행렬:

\[\mathbf{P} = \begin{bmatrix} 0.5 & 0.5 \\ 0.5 & 0.5 \end{bmatrix}\]

  • 선 위의 벡터 \(\mathbf{x}_1 = \begin{bmatrix}1\\1\end{bmatrix}\): 투영해도 그대로이므로 \(\mathbf{P}\mathbf{x}_1 = \mathbf{x}_1\), 즉 \(\lambda_1 = 1\).
  • 선에 수직인 벡터 \(\mathbf{x}_2 = \begin{bmatrix}1\\-1\end{bmatrix}\): 투영하면 \(\mathbf{0}\)이 되므로 \(\mathbf{P}\mathbf{x}_2 = \mathbf{0}\), 즉 \(\lambda_2 = 0\).

직관: 투영 행렬은 한 방향을 살리고( \(\lambda=1\) ), 다른 방향을 죽인다( \(\lambda=0\) ). 이것이 투영 행렬이 항상 고유값 \(\{0, 1\}\) 만 갖는 이유이다.

3.1.2 반사 행렬 (Reflection Matrix)

\(y = x\) 에 대한 반사:

\[\mathbf{R} = \begin{bmatrix} 0 & 1 \\ 1 & 0 \end{bmatrix}\]

  • \(\mathbf{x}_1 = \begin{bmatrix}1\\1\end{bmatrix}\): 반사해도 그대로. \(\lambda_1 = 1\).
  • \(\mathbf{x}_2 = \begin{bmatrix}1\\-1\end{bmatrix}\): 반사하면 부호 반전. \(\lambda_2 = -1\).

핵심 관계: \(\mathbf{R} = 2\mathbf{P} - \mathbf{I}\) 이므로 고유값도 \(2(1)-1=1\), \(2(0)-1=-1\). 행렬의 선형 변환이 고유값에 그대로 적용된다.

3.1.3 회전 행렬 (Rotation Matrix)

각도 \(\theta\) 만큼 회전하는 행렬:

\[\mathbf{Q} = \begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{bmatrix}\]

  • \(\theta \neq 0, \pi\) 이면 어떤 실수 벡터도 방향을 유지하지 못한다.
  • 고유값: \(\lambda = e^{\pm i\theta} = \cos\theta \pm i\sin\theta\)복소수.

직관: 순수하게 회전하는 변환은 실수 공간에서 “고정된 방향”이 없으므로 실수 고유벡터가 존재하지 않는다. 고유값이 복소수라는 것은 그 행렬이 순수한 회전 성분을 갖는다는 신호이다.


4 고유값 계산: 특성 방정식 (Characteristic Equation)

\(\mathbf{A}\mathbf{x} = \lambda \mathbf{x}\) 를 재정리하면:

\[(\mathbf{A} - \lambda \mathbf{I})\mathbf{x} = \mathbf{0}\]

이 방정식이 \(\mathbf{x} \neq \mathbf{0}\) 인 해를 가지려면, 행렬 \((\mathbf{A} - \lambda \mathbf{I})\)특이행렬(singular)이어야 한다. 즉, 행렬식이 0이어야 한다.

특성 방정식 (Characteristic Equation)

\[\det(\mathbf{A} - \lambda \mathbf{I}) = 0\]

이를 \(\lambda\) 에 대한 \(n\) 차 다항식으로 전개한 것을 특성 다항식(characteristic polynomial)이라 하며, 그 근들이 곧 고유값이다.

왜 행렬식이 0이어야 하는가? \((\mathbf{A} - \lambda \mathbf{I})\mathbf{x} = \mathbf{0}\) 에서 \(\mathbf{x} \neq \mathbf{0}\) 인 해가 존재하려면 \((\mathbf{A} - \lambda\mathbf{I})\) 가 역행렬을 가지면 안 된다. 역행렬이 있다면 \(\mathbf{x} = (\mathbf{A}-\lambda\mathbf{I})^{-1}\mathbf{0} = \mathbf{0}\) 밖에 해가 없기 때문이다. 역행렬이 없다는 조건이 곧 \(\det(\mathbf{A}-\lambda\mathbf{I}) = 0\) 이다.

4.1 계산 절차 (2단계)

Step 1 — 고유값 구하기: 특성 방정식 \(\det(\mathbf{A} - \lambda \mathbf{I}) = 0\) 을 풀어 \(\lambda_1, \lambda_2, \ldots, \lambda_n\) 을 구한다.

Step 2 — 고유벡터 구하기: 각 \(\lambda_k\) 에 대해 연립방정식 \((\mathbf{A} - \lambda_k \mathbf{I})\mathbf{x} = \mathbf{0}\) 의 영공간(null space)을 구한다. 이 영공간의 임의의 영벡터가 아닌 원소가 고유벡터이다.

4.2 계산 예시

\(\mathbf{A} = \begin{bmatrix} 3 & 1 \\ 1 & 3 \end{bmatrix}\) 의 고유값과 고유벡터를 구한다.

Step 1: 특성 방정식

\[\det(\mathbf{A} - \lambda \mathbf{I}) = \begin{vmatrix} 3-\lambda & 1 \\ 1 & 3-\lambda \end{vmatrix} = (3-\lambda)^2 - 1 = \lambda^2 - 6\lambda + 8 = (\lambda-2)(\lambda-4) = 0\]

따라서 \(\lambda_1 = 2\), \(\lambda_2 = 4\).

Step 2: 고유벡터

\(\lambda_1 = 2\) 에 대해 \((\mathbf{A} - 2\mathbf{I})\mathbf{x} = \mathbf{0}\):

\[\begin{bmatrix} 1 & 1 \\ 1 & 1 \end{bmatrix} \mathbf{x} = \mathbf{0} \quad \Longrightarrow \quad \mathbf{x}_1 = \begin{bmatrix} -1 \\ 1 \end{bmatrix}\]

\(\lambda_2 = 4\) 에 대해 \((\mathbf{A} - 4\mathbf{I})\mathbf{x} = \mathbf{0}\):

\[\begin{bmatrix} -1 & 1 \\ 1 & -1 \end{bmatrix} \mathbf{x} = \mathbf{0} \quad \Longrightarrow \quad \mathbf{x}_2 = \begin{bmatrix} 1 \\ 1 \end{bmatrix}\]

이 행렬은 대칭 행렬이므로 고유벡터 \(\mathbf{x}_1^\top \mathbf{x}_2 = (-1)(1) + (1)(1) = 0\) — 직교한다.


5 핵심 성질 (Key Properties)

5.1 흔적과 행렬식의 관계

행렬의 성분과 고유값 사이에는 우아한 관계가 존재한다.

흔적(Trace)과 행렬식(Determinant)

\(n \times n\) 행렬 \(\mathbf{A}\) 의 고유값 \(\lambda_1, \lambda_2, \ldots, \lambda_n\) 에 대해:

\[\text{tr}(\mathbf{A}) = \sum_{i=1}^n a_{ii} = \lambda_1 + \lambda_2 + \cdots + \lambda_n\]

\[\det(\mathbf{A}) = \lambda_1 \cdot \lambda_2 \cdots \lambda_n\]

왜 이 관계가 성립하는가? 특성 다항식 \(\det(\mathbf{A} - \lambda \mathbf{I})\) 를 전개하면 \(\lambda\) 의 계수와 상수항에 각각 trace와 determinant가 나타난다 (비에타 공식의 응용).

실용적 활용: \(2\times 2\) 행렬에서 고유값을 빠르게 검산하거나 추정하는 데 유용하다.

위 예시 검산: \(\lambda_1 + \lambda_2 = 2 + 4 = 6 = \text{tr}(\mathbf{A})\) ✓, \(\lambda_1 \cdot \lambda_2 = 8 = \det(\mathbf{A})\)

5.2 행렬 연산과 고유값

연산 고유벡터 고유값 이유
\(c\mathbf{A}\) (스칼라 곱) \(\mathbf{x}\) (동일) \(c\lambda\) \((c\mathbf{A})\mathbf{x} = c(\mathbf{A}\mathbf{x}) = c\lambda\mathbf{x}\)
\(\mathbf{A} + c\mathbf{I}\) (단위행렬 이동) \(\mathbf{x}\) (동일) \(\lambda + c\) \((\mathbf{A}+c\mathbf{I})\mathbf{x} = \lambda\mathbf{x} + c\mathbf{x} = (\lambda+c)\mathbf{x}\)
\(\mathbf{A}^k\) (행렬 거듭제곱) \(\mathbf{x}\) (동일) \(\lambda^k\) \(\mathbf{A}^k\mathbf{x} = \mathbf{A}^{k-1}(\lambda\mathbf{x}) = \cdots = \lambda^k\mathbf{x}\)
\(\mathbf{A}^{-1}\) (역행렬, 존재할 때) \(\mathbf{x}\) (동일) \(1/\lambda\) \(\mathbf{A}\mathbf{x} = \lambda\mathbf{x}\) 에서 양변에 \(\mathbf{A}^{-1}/\lambda\)
\(\mathbf{A}^\top\) (전치) 다를 수 있음 \(\lambda\) (동일) \(\det(\mathbf{A}^\top - \lambda\mathbf{I}) = \det(\mathbf{A} - \lambda\mathbf{I})\)

\(\mathbf{A}^k\) 의 직관: 고유벡터 방향으로 분해하면, 각 성분은 독립적으로 \(\lambda^k\) 배 스케일된다. 이것이 행렬 거듭제곱을 효율적으로 계산하는 원리이다.

5.3 삼각 행렬의 고유값

상삼각 또는 하삼각 행렬의 고유값은 대각 원소 그 자체이다.

\[\mathbf{U} = \begin{bmatrix} 3 & 5 & 7 \\ 0 & 2 & 4 \\ 0 & 0 & 1 \end{bmatrix} \quad \Rightarrow \quad \lambda_1 = 3,\ \lambda_2 = 2,\ \lambda_3 = 1\]

이유: \(\det(\mathbf{U} - \lambda\mathbf{I}) = (3-\lambda)(2-\lambda)(1-\lambda)\) — 삼각 행렬의 행렬식은 대각 원소의 곱이다.


6 중복 고유값과 결함 행렬 (Repeated Eigenvalues and Defective Matrices)

특성 방정식이 중근 \(\lambda\) 를 갖는 경우, 그에 대응하는 독립 고유벡터의 수가 대수적 중복도(algebraic multiplicity)보다 적을 수 있다.

결함 행렬 (Defective Matrix)

\[\mathbf{A} = \begin{bmatrix} 3 & 1 \\ 0 & 3 \end{bmatrix}\]

특성 방정식: \((3-\lambda)^2 = 0\) 이므로 \(\lambda = 3\) (대수적 중복도 2).

그런데 \((\mathbf{A} - 3\mathbf{I})\mathbf{x} = \mathbf{0}\) 은 오직 \(\mathbf{x} = \begin{bmatrix}1\\0\end{bmatrix}\) 방향의 고유벡터만 준다 (기하적 중복도 1).

독립 고유벡터가 2개인 \(2\times 2\) 행렬을 기대했지만, 이 행렬은 고유벡터가 1개뿐이다. 이런 행렬을 결함 행렬(defective matrix)이라 한다.

결함 행렬은 대각화할 수 없다. 이 경우 Jordan 표준형을 사용한다.


7 대칭 행렬의 특별한 성질

대칭 행렬 \(\mathbf{A} = \mathbf{A}^\top\) 은 고유값 분해에서 특히 좋은 성질을 갖는다 (Strang, 2009, Ch.6).

대칭 행렬의 스펙트럼 정리 (Spectral Theorem)

실수 대칭 행렬 \(\mathbf{A} \in \mathbb{R}^{n \times n}\) 의 고유값은 모두 실수이며, 서로 다른 고유값에 대응하는 고유벡터는 서로 직교한다. 더 강하게: \(\mathbf{A}\) 는 항상 직교 대각화(orthogonal diagonalization) 가능하다.

\[\mathbf{A} = \mathbf{Q} \mathbf{\Lambda} \mathbf{Q}^\top\]

여기서 \(\mathbf{Q}\) 는 직교행렬 (\(\mathbf{Q}^\top = \mathbf{Q}^{-1}\)), \(\mathbf{\Lambda}\) 는 대각에 고유값이 나열된 대각행렬이다.

직관: 대칭 행렬은 “회전 성분 없이 순수하게 늘이고 줄이기만 한다”. 그래서 복소수 고유값(회전을 표현)이 나타나지 않고, 각 고유값 방향이 서로 직교하는 깔끔한 구조를 갖는다.


8 행렬 거듭제곱과 마르코프 체인

고유벡터로 분해하면 행렬 거듭제곱을 효율적으로 계산할 수 있다.

임의 벡터 \(\mathbf{v}\) 를 고유벡터의 선형결합으로 표현한다:

\[\mathbf{v} = c_1 \mathbf{x}_1 + c_2 \mathbf{x}_2 + \cdots + c_n \mathbf{x}_n\]

그러면:

\[\mathbf{A}^k \mathbf{v} = c_1 \lambda_1^k \mathbf{x}_1 + c_2 \lambda_2^k \mathbf{x}_2 + \cdots + c_n \lambda_n^k \mathbf{x}_n\]

마르코프 체인 수렴의 원리: 마르코프 행렬은 \(|\lambda_1| = 1 > |\lambda_2| \geq \cdots \geq |\lambda_n|\) 이다. \(k \to \infty\) 이면 \(\lambda_i^k \to 0\) ( \(|\lambda_i| < 1\) )이므로 \(c_2\lambda_2^k\mathbf{x}_2 + \cdots \to \mathbf{0}\). 결국 \(\mathbf{A}^k\mathbf{v} \to c_1\mathbf{x}_1\) — 지배 고유벡터(dominant eigenvector)로 수렴한다.

\[\mathbf{A} = \begin{bmatrix} 0.8 & 0.3 \\ 0.2 & 0.7 \end{bmatrix}, \quad \lambda_1 = 1,\ \lambda_2 = 0.5\]

\(k = 100\) 이면 \(\lambda_2^{100} = (0.5)^{100} \approx 10^{-30}\). 사실상 \(\mathbf{A}^{100}\) 의 열들은 모두 정상상태 고유벡터 \(\mathbf{x}_1 = (0.6, 0.4)\) 에 수렴한다.


9 응용 분야

분야 활용 고유값의 역할
머신러닝 (PCA) 데이터의 주성분 방향 탐색 공분산 행렬 \(\mathbf{C}\) 의 고유벡터 = 주성분 방향, 고유값 = 분산량
검색엔진 (PageRank) 웹페이지 중요도 랭킹 전이행렬의 지배 고유벡터 = 정상상태 분포
물리학 / 공학 고유진동수 분석 고유값 = 진동 주파수, 고유벡터 = 진동 모드
이미지 처리 얼굴 인식 (Eigenface) 공분산 행렬 분해로 핵심 이미지 방향 추출
미분방정식 \(d\mathbf{u}/dt = \mathbf{A}\mathbf{u}\) 의 해 고유값 = 성장/감쇠율, 고유벡터 = 모드 형태
그래프 이론 연결성 분석 (Spectral Clustering) 라플라시안 행렬의 고유값 = 군집 구조
양자역학 에너지 레벨 연산자의 고유값 = 가능한 에너지값

9.1 PCA 핵심 원리

데이터 행렬 \(\mathbf{X} \in \mathbb{R}^{n \times p}\) (중심화됨)에서 공분산 행렬 \(\mathbf{C} = \frac{1}{n}\mathbf{X}^\top\mathbf{X}\) 를 계산하면:

\[\mathbf{C}\mathbf{q}_k = \sigma_k^2 \mathbf{q}_k\]

여기서 \(\mathbf{q}_k\)\(k\) 번째 주성분 방향이고, \(\sigma_k^2\) 가 그 방향으로의 분산이다. 고유값이 클수록 해당 방향이 데이터를 많이 설명한다. PCA는 고유값이 큰 방향부터 선택해 차원을 축소한다.


10 코드 예시

# 2x2 행렬의 고유값을 수식으로 직접 계산
import math

def eigenvalues_2x2(A):
    """
    A = [[a, b], [c, d]]
    특성 방정식: (a-λ)(d-λ) - bc = 0
    λ^2 - (a+d)λ + (ad-bc) = 0
    """
    a, b = A[0]
    c, d = A[1]

    trace = a + d
    det = a * d - b * c
    discriminant = trace**2 - 4 * det

    if discriminant < 0:
        # 복소수 고유값
        real = trace / 2
        imag = math.sqrt(-discriminant) / 2
        return (complex(real, imag), complex(real, -imag))
    else:
        lam1 = (trace + math.sqrt(discriminant)) / 2
        lam2 = (trace - math.sqrt(discriminant)) / 2
        return (lam1, lam2)

def eigenvector_2x2(A, lam):
    """(A - λI)x = 0 의 영공간 — 첫 번째 행에서 풀기"""
    a, b = A[0]
    c, d = A[1]
    # (a-λ)x + b*y = 0  →  x = -b, y = a - λ (b ≠ 0 가정)
    if abs(b) > 1e-10:
        return [-b, a - lam]
    elif abs(c) > 1e-10:
        return [d - lam, -c]
    else:
        return [1, 0]  # 이미 대각행렬 형태

A = [[3, 1], [1, 3]]
lam1, lam2 = eigenvalues_2x2(A)
print(f"고유값: λ₁ = {lam1:.4f}, λ₂ = {lam2:.4f}")
print(f"Trace 검산: {lam1 + lam2:.4f} == {A[0][0] + A[1][1]}")
print(f"Det 검산: {lam1 * lam2:.4f} == {A[0][0]*A[1][1] - A[0][1]*A[1][0]}")

x1 = eigenvector_2x2(A, lam1)
x2 = eigenvector_2x2(A, lam2)
print(f"고유벡터 x₁ = {x1}, x₂ = {x2}")
dot = x1[0]*x2[0] + x1[1]*x2[1]
print(f"내적 (직교 검산): {dot}")  # 대칭 행렬이므로 0이어야 함
import numpy as np

# 고유값/고유벡터 계산
A = np.array([[3, 1], [1, 3]])
eigenvalues, eigenvectors = np.linalg.eig(A)

print("고유값:", eigenvalues)
print("고유벡터 (열벡터):\n", eigenvectors)

# 검증: Ax = λx
for i in range(len(eigenvalues)):
    lam = eigenvalues[i]
    x = eigenvectors[:, i]
    lhs = A @ x
    rhs = lam * x
    print(f"\nλ = {lam:.4f}: Ax = {lhs}, λx = {rhs}, 일치: {np.allclose(lhs, rhs)}")

# Trace / Det 관계
print(f"\nTrace: {np.trace(A)} = {eigenvalues.sum():.4f}")
print(f"Det:   {np.linalg.det(A):.4f} = {eigenvalues.prod():.4f}")
A <- matrix(c(3, 1, 1, 3), nrow = 2, byrow = TRUE)
result <- eigen(A)

cat("고유값:", result$values, "\n")
cat("고유벡터:\n")
print(result$vectors)

# 검증
for (i in seq_along(result$values)) {
  lam <- result$values[i]
  x <- result$vectors[, i]
  cat(sprintf("\nλ = %.4f\n", lam))
  cat("Ax  =", A %*% x, "\n")
  cat("λx  =", lam * x, "\n")
}

# Trace / Det 관계
cat("\nTrace:", sum(diag(A)), "=", sum(result$values), "\n")
cat("Det:  ", det(A), "=", prod(result$values), "\n")

# PCA 예시 — iris 데이터
data(iris)
X <- scale(iris[, 1:4])       # 중심화 + 표준화
C <- cov(X)                    # 공분산 행렬
pc <- eigen(C)

cat("\nPCA 고유값 (설명 분산):", pc$values, "\n")
cat("주성분 1 방향:", pc$vectors[, 1], "\n")
import numpy as np

# 마르코프 전이 행렬
A = np.array([[0.8, 0.3],
              [0.2, 0.7]])

# 초기 상태 벡터
v = np.array([1.0, 0.0])

print(f"{'k':>5} {'v[0]':>10} {'v[1]':>10}")
print("-" * 28)
for k in [1, 2, 5, 10, 20, 50, 100]:
    vk = np.linalg.matrix_power(A, k) @ v
    print(f"{k:>5} {vk[0]:>10.6f} {vk[1]:>10.6f}")

# 정상상태 = 지배 고유벡터 (λ=1)
eigenvalues, eigenvectors = np.linalg.eig(A)
dominant_idx = np.argmax(np.abs(eigenvalues))
steady_state = eigenvectors[:, dominant_idx]
steady_state /= steady_state.sum()  # 확률 합이 1이 되도록 정규화
print(f"\n정상상태 (고유벡터 기반): {steady_state}")

11 고유값 분해와 다음 주제 연결

고유값 분해(Eigendecomposition)는 Ch.6의 핵심 결론이다. 충분한 수의 독립 고유벡터가 있으면:

\[\mathbf{A} = \mathbf{S} \mathbf{\Lambda} \mathbf{S}^{-1}\]

여기서 \(\mathbf{S}\) 는 고유벡터를 열로 세운 행렬, \(\mathbf{\Lambda}\) 는 대각에 고유값이 나열된 대각행렬이다. 이 분해가 가능한 행렬을 대각화 가능(diagonalizable) 행렬이라 한다.

\(\mathbf{A}^k = \mathbf{S}\mathbf{\Lambda}^k\mathbf{S}^{-1}\) 이므로, 행렬 거듭제곱이 \(\mathbf{\Lambda}^k = \text{diag}(\lambda_1^k, \ldots, \lambda_n^k)\) 의 계산으로 간소화된다.

대각화 불가능한 경우(결함 행렬)와 모든 행렬에 적용 가능한 더 일반적인 분해는 특이값 분해(SVD)로 이어진다.


12 관련 주제

선행 지식

Ch.6 세부 주제

후속 주제

Subscribe

Enjoy this blog? Get notified of new posts by email: