행렬 조건수 계산기 쉽게 이해하기 — 개념과 원리
이 계산기는 정사각행렬의 조건수를 세 가지 노름으로 구합니다. 특이값으로 κ₂를, 열과 행의 합으로 κ₁과 κ∞를 계산하고, Ax = b를 풀 때 잃을 수 있는 정확도 자릿수도 추정합니다. 수치 선형대수, 자료 맞춤, 공학 모델에서 연립방정식의 결과를 믿을 수 있는지 판단할 때 쓸 수 있습니다.
계산 방법
κ(A) = ‖A‖ × ‖A⁻¹‖
2-노름: κ₂ = σ_max ÷ σ_min (가장 큰 특이값 ÷ 가장 작은 특이값)
1-노름: ‖A‖₁ = 절댓값 열 합의 최댓값
∞-노름: ‖A‖∞ = 절댓값 행 합의 최댓값
잃을 수 있는 자릿수 ≈ log₁₀ κ₂
- κ는 항상 1 이상이며, 직교행렬이면 1, 특이행렬이면 무한대입니다.
- 특이값은 단측 야코비 특이값분해로 구합니다.
원리
Ax = b를 풀면 오차가 커집니다. b나 A에 작은 상대오차가 있으면 x의 상대오차는 최대 약 κ배까지 커질 수 있습니다. 기하적으로 A는 방향마다 공간을 다르게 늘이는데, σ_max는 가장 크게, σ_min은 가장 작게 늘이는 정도입니다. σ_min이 아주 작으면 A가 어떤 방향을 거의 납작하게 누르는 것이고, 이를 되돌리는 계산(A⁻¹)이 작은 오차를 크게 부풀립니다. 경험 법칙으로 κ ≈ 10ᵏ이면 유효숫자 약 k자리를 잃는다고 봅니다.
예제 풀이
기본값: 3 × 3 힐베르트 행렬 A = [1 1/2 1/3; 1/2 1/3 1/4; 1/3 1/4 1/5].
- 특이값: 가장 큰 σ_max = 1.40832, 가장 작은 σ_min = 0.00268734입니다.
- κ₂ = 1.40832 ÷ 0.00268734 = 524.057입니다.
- ‖A‖₁ = 1 + 1/2 + 1/3 = 11/6이고, A⁻¹ = [9 −36 30; −36 192 −180; 30 −180 180]의 ‖A⁻¹‖₁ = 408이므로 κ₁ = 11/6 × 408 = 748입니다.
- A가 대칭이라 행 합과 열 합이 같아 κ∞ = 748입니다.
- 잃을 수 있는 자릿수 ≈ log₁₀ 524 = 2.7입니다.
결과 해석
κ가 1에 가까우면 아주 좋고, 이 예처럼 수백이면 약 세 자리를 잃을 수 있습니다. 보통의 배정밀도 연산(약 16자리)에서 κ가 10¹⁰을 넘으면 믿을 만한 자릿수가 얼마 남지 않습니다. 힐베르트 행렬은 크기가 커질수록 매우 빠르게 나빠지는 대표적인 시험용 행렬입니다. κ가 크다고 해가 틀린 것은 아니며, 자료의 오차에 민감하다는 뜻입니다.
흔한 실수
- 행렬식 크기로 조건을 판단하는 경우(행렬식이 작다는 것만으로 조건이 나쁜 것은 아닙니다)
- 서로 다른 노름의 조건수를 같은 것처럼 비교하는 경우
- 성분을 반올림해 넣어 조건이 나쁜 행렬을 크게 바꾸는 경우
- 회귀 계수를 해석하며 κ를 무시하는 경우
자주 묻는 질문
좋은 조건수는 어느 정도인가요?
1에 가까울수록 좋습니다. 10배마다 유효숫자 약 한 자리를 잃습니다.
힐베르트 행렬은 왜 조건이 나쁜가요?
열들이 거의 평행해서 가장 작은 특이값이 매우 작기 때문입니다.
노름마다 조건수가 같은가요?
같지 않지만, 작은 행렬에서는 대개 같은 크기 정도의 값이 나옵니다.
출처: J. Demmel, UC Berkeley Math 221 lecture notes, Lecture 3 (2011) · E. W. Weisstein, "Matrix Norm", Wolfram MathWorld