도구스학업·수학

거듭제곱법(최대 고윳값) 계산기

행렬에 벡터를 거듭 곱해 절댓값이 가장 큰 고윳값을 찾는 과정을 반복마다 레일리 몫과 잔차로 보여 줍니다. 수렴 속도가 |λ₂/λ₁|라는 것을 실제 이력과 대조하고, 역거듭제곱법으로 σ 근처 고윳값도 찾습니다.

줄마다 한 행, 쉼표나 공백으로 나눕니다 — 지금 3행

절댓값이 가장 큰 고윳값

6.66907909

43번 만에 잔차 8.15e-13까지 · 고유벡터 (0.6312, 0.172, 0.7563)

레일리 몫 λ = xᵀAx/xᵀx6.66907909
잔차 ‖Ax − λx‖8.15e-13
반복 횟수43
실측 수렴 속도 (잔차비)0.52122
이론 수렴 속도 |λ₂/λ₁|0.52121
야코비로 구한 참값과의 차0
대칭행렬이라 참값을 알 수 있습니다. 야코비 회전법으로 구한 고윳값은 6.669079, 3.476024, 1.854897입니다. 거듭제곱법이 찾아낸 값과의 차가 0입니다.
k레일리 몫잔차앞 단계 대비
16.522776420.70180181
26.633800290.339325910.4835
36.659869960.172081570.5071
46.666607060.088937080.5168
56.668409860.046240570.5199
66.668897460.0240840.5208
76.669029760.012550350.5211
86.669065690.006541040.5212
96.669075450.003409230.5212
106.66907810.001776930.5212
116.669078820.000926160.5212
126.669079020.000482730.5212
386.669079092.12e-110.5212
396.669079091.10e-110.5212
406.669079095.76e-120.5212
416.669079093.00e-120.5213
426.669079091.56e-120.5211
436.669079098.15e-130.5214
계산 근거xₖ₊₁ = Axₖ / ‖Axₖ‖
λ = xᵀAx / xᵀx = 6.66907909
잔차 = ‖Ax − λx‖ = 8.15e-13
역거듭제곱법도 레일리 몫은 원래 행렬 A로 잽니다. 알고 싶은 것이 A의 고윳값이기 때문입니다.
수렴 속도는 |λ₂/λ₁|가 정합니다. 시작 벡터를 고유벡터들의 합으로 적으면 Aᵏx₀ = λ₁ᵏ(c₁v₁ + c₂(λ₂/λ₁)ᵏv₂ + …)이 되어, 두 번째 항이 그 비의 거듭제곱으로 사그라듭니다. 그래서 이 비가 0.5면 반복마다 오차가 반씩 줄지만 0.99면 백 번을 돌려도 거의 그대로입니다. 위 표의 「앞 단계 대비」 열이 실제로 그 값으로 다가가는지 보세요 — 지금 실측 0.5212, 이론 0.5212입니다.
역거듭제곱법은 σ를 바싹 붙일수록 빠릅니다. (A − σI)⁻¹의 고윳값이 1/(λᵢ − σ)이므로 σ에 가까운 λᵢ일수록 크게 부풀려집니다. σ를 실제 고윳값에 아주 가깝게 두면 A − σI가 거의 특이해져 풀이가 불안정해 보이지만, 그 오차가 마침 우리가 찾는 고유벡터 방향으로 커지므로 오히려 더 빨리 수렴합니다. 정확히 같은 값을 넣으면 특이행렬이 되어 풀 수 없습니다.
고윳값이 「얼마인가」가 궁금하면 고유값 계산기를 쓰세요. 이 계산기는 「어떻게 찾는가」와 「얼마나 빨리 찾는가」를 보이는 것이 목적이라 반복 이력을 그대로 냅니다. 실제 수치 라이브러리는 큰 행렬에 대해 이 방법을 여러 벡터로 한꺼번에 돌리는 방식(부분공간 반복·란초스)을 쓰지만, 바탕에 있는 논리는 여기 있는 것과 같습니다.

계산 방법

  1. 1정사각행렬을 줄마다 한 행씩 넣습니다.
  2. 2반복 이력의 「앞 단계 대비」 열이 어떤 값으로 다가가는지 봅니다. 그것이 수렴 속도입니다.
  3. 3수렴하지 않으면 크기가 같은 고윳값이 둘 있는 경우인지 확인합니다.
  4. 4가장 작은 고윳값이나 특정 값 근처를 찾으려면 역거듭제곱법으로 바꾸고 σ를 넣습니다.

자주 묻는 질문

아무 벡터에나 행렬을 거듭 곱하면 절댓값이 가장 큰 고윳값의 고유벡터 쪽으로 쏠리기 때문입니다. 시작 벡터를 고유벡터들의 합으로 적으면 Aᵏx₀ = λ₁ᵏ(c₁v₁ + c₂(λ₂/λ₁)ᵏv₂ + …)이 되어 작은 고윳값 쪽 항이 사그라듭니다. 고윳값은 레일리 몫 λ = xᵀAx/xᵀx로 읽습니다.

두 번째로 큰 고윳값과의 비 |λ₂/λ₁|가 1에 가깝기 때문입니다. 이 비가 0.5면 반복마다 오차가 절반씩 줄지만 0.99면 백 번을 돌려도 거의 그대로입니다. 이 계산기는 반복마다의 잔차비를 표로 내어 실측 속도가 그 비로 다가가는 것을 보여 줍니다.

크기가 같은 고윳값이 둘 있는 경우일 수 있습니다. λ = +3과 −3처럼 부호만 다르거나 켤레복소수 쌍(회전행렬이 그렇습니다)이면 벡터가 두 방향 사이를 영원히 오갑니다. 거듭제곱법이 원리상 풀 수 없는 경우이므로 반복을 늘려도 소용이 없습니다.

역거듭제곱법으로 바꾸고 σ를 0으로 두면 됩니다. (A − σI)⁻¹의 고윳값이 1/(λᵢ − σ)이므로 σ에 가까운 λᵢ가 가장 크게 부풀려져 먼저 나옵니다. σ를 3 근처로 두면 3에 가장 가까운 고윳값이 나오는 식입니다.

수치는 불안정해 보이지만 오히려 더 빨리 수렴합니다. A − σI가 거의 특이해져 풀이의 오차가 커지는데, 그 오차가 마침 우리가 찾는 고유벡터 방향으로 커지기 때문입니다. 다만 σ가 고윳값과 정확히 같으면 특이행렬이 되어 풀 수 없습니다.

고유값 계산기는 「고윳값이 얼마인가」를 특성방정식으로 답하고, 이 계산기는 「어떻게 찾는가」와 「얼마나 빨리 찾는가」를 보입니다. 특성방정식은 4×4를 넘으면 근을 구할 수 없지만 거듭제곱법은 크기에 제한이 없어, 실제 수치 라이브러리가 큰 행렬에 쓰는 방법의 바탕이 됩니다.

대칭행렬에서 고유벡터의 오차가 ε일 때 레일리 몫의 오차가 ε²이기 때문입니다. 벡터가 아직 어설퍼도 고윳값은 이미 상당히 정확합니다. 성분 하나를 골라 비를 재는 방법은 그 성분이 0에 가까우면 크게 흔들립니다.

전송되지 않습니다. 계산은 모두 브라우저 안에서 이루어지고 넣은 값은 이 기기에만 남습니다.

알아두면 좋은 점

  • 절댓값이 가장 큰 고윳값이 하나뿐일 때만 수렴합니다. ±3처럼 크기가 같으면 영원히 진동합니다.
  • 켤레복소수 고윳값 쌍도 실수 벡터로는 수렴하지 않습니다. 회전행렬이 그런 예입니다.
  • 수렴 속도는 |λ₂/λ₁|입니다. 1에 가까울수록 느립니다.
  • 대칭행렬이면 야코비 회전법으로 참값을 함께 구해 대조합니다.
  • 역거듭제곱법에서 σ가 고윳값과 정확히 같으면 A − σI가 특이해 풀 수 없습니다.
  • 레일리 몫은 역거듭제곱법에서도 원래 행렬 A로 잽니다.
  • 6×6까지, 반복은 500번까지 다룹니다.

함께 보면 좋은 도구

마지막 검증: 2026년 9월 2일 · 결과는 참고용 추정치입니다.