행렬 조건수(오차 증폭) 계산기
행렬의 조건수 κ = ‖A‖·‖A⁻¹‖를 1·∞·2 세 노름으로 내고 유효자릿수를 몇 자리 잃는지 알려 줍니다. 우변을 실제로 흔들어 해가 몇 배로 움직이는지 재어 그 상한에 정말 닿는지 보여 줍니다.
한 줄이 한 행인 정사각행렬입니다. 6×6까지 다룹니다.
조건수 κ₂ (2-노름)
40,002
유효자릿수를 4.6자리쯤 잃습니다. 배정밀도는 약 16자리를 들고 시작하므로 답에 11.4자리쯤 남는다고 보면 됩니다.
노름
| 노름 | ‖A‖ | ‖A⁻¹‖ | κ |
|---|---|---|---|
| 1 (열 합) | 2.0001 | 20,001 | 40,004 |
| ∞ (행 합) | 2.0001 | 20,001 | 40,004 |
| 2 (특이값) | 2.0001 | 20,000.4992 | 40,002 |
노름을 무엇으로 재느냐에 따라 조건수의 값이 달라지지만 자릿수는 대개 비슷합니다. 「상한에 실제로 닿는다」고 말할 수 있는 것은 2-노름 쪽입니다.
흔들어 보기
Ax = b를 풀고 b를 조금 흔들어 해가 얼마나 움직이는지 봅니다. 값을 2개 넣어 주세요.
b 길이에 대한 상대 크기입니다.
「최악 방향」은 가장 작은 특이값에 대응하는 방향으로 b를 흔듭니다. 이 방향에서는 증폭이 「이 b에서 가능한 최대」에 정확히 닿습니다. 조건수는 느슨한 안전값이 아니라 실제로 도달하는 값이라는 뜻입니다. 「고르게」로 바꿔 보면 대개 훨씬 작게 나오는데, 운이 좋았을 뿐 다음 입력에서도 그러리라는 보장은 없습니다.
계산 방법
- 1행렬을 한 줄에 한 행씩 넣습니다. 「거의 나란한 두 직선」이나 「힐베르트 4×4」를 눌러 보면 병조건이 어떤 모습인지 바로 보입니다.
- 2κ₂를 확인하고 유효자릿수를 몇 자리 잃는지 봅니다.
- 3우변 b를 넣고 흔드는 크기를 정합니다.
- 4「최악 방향」과 「고르게」를 오가며 같은 크기로 흔들어도 증폭이 얼마나 달라지는지 확인합니다.
- 5「실제 증폭 배율」이 「이 b에서 가능한 최대」와 κ₂ 안에 드는지 봅니다.
자주 묻는 질문
입력의 상대오차가 해에서 최대 몇 배까지 커질 수 있는지를 나타내는 수입니다. Ax = b에서 b를 상대적으로 ε만큼 흔들면 해는 최대 κ·ε만큼 움직이며, 이 κ = ‖A‖·‖A⁻¹‖가 조건수입니다. 값은 항상 1 이상이고, 1에 가까울수록 좋은 행렬입니다.
유효자릿수를 log₁₀κ 자리쯤 잃습니다. 조건수가 10⁶이면 여섯 자리가 날아가고, 배정밀도가 약 16자리를 들고 시작하므로 열 자리쯤 남습니다. 조건수가 10¹⁶을 넘으면 남는 자릿수가 없어 계산 결과가 통째로 의미를 잃습니다. 알고리즘을 아무리 잘 짜도 이 손실은 피할 수 없습니다 — 문제 자체의 성질이기 때문입니다.
아닙니다. 가장 흔한 오해입니다. 행렬 전체에 상수 c를 곱하면 행렬식은 cⁿ배가 되지만, ‖A‖는 c배가 되고 ‖A⁻¹‖는 1/c배가 되어 조건수는 전혀 바뀌지 않습니다. 0.0001×단위행렬은 행렬식이 10⁻⁸이지만 조건수는 1로 완벽합니다. 반대로 행렬식이 1이어도 조건수가 10¹⁰인 행렬을 만들 수 있습니다.
자릿수 감각을 볼 때는 셋 중 아무거나 봐도 됩니다. 대개 같은 자릿수로 나오기 때문입니다. 다만 「이 상한에 실제로 닿는다」고 말할 수 있는 것은 2-노름입니다. 2-노름 조건수는 가장 큰 특이값과 가장 작은 특이값의 비이고, 특이벡터 방향으로 흔들면 그 값이 정확히 나옵니다. 1-노름과 ∞-노름은 계산이 쉬워 실무에서 어림잡을 때 씁니다.
가장 작은 특이값에 대응하는 방향입니다. 그 방향으로 우변을 흔들면 A⁻¹이 가장 크게 늘여 증폭이 최대가 됩니다. 이 계산기에서 「고르게」와 「최악 방향」을 오가며 같은 크기로 흔들어 보면, 같은 1%를 흔들어도 결과가 크게 달라지는 것을 볼 수 있습니다. 「고르게」에서 증폭이 작게 나오는 것은 운이 좋았을 뿐이며, 실제 입력 오차가 어느 방향으로 올지는 알 수 없습니다.
문제를 다시 세우는 것이 먼저입니다. 단위를 맞춰 열의 크기를 비슷하게 만들거나(스케일링), 정규화 항을 더하거나, 특이값이 작은 성분을 잘라 내는 방법(절단 SVD·티호노프 정규화)을 씁니다. 정밀도를 올리는 것은 잃는 자릿수를 미루는 것일 뿐 문제의 성질을 바꾸지는 못합니다.
전송되지 않습니다. 모든 계산이 브라우저 안에서 이뤄지고, 입력값은 이 기기에만 남습니다.
알아두면 좋은 점
- 검증은 두 갈래로 했습니다. 역행렬은 이 사이트의 유리수 정확 계산(행렬 역행렬 계산기)과 대조했고, 조건수는 부등식과 등호 조건을 직접 확인했습니다.
- 「상한에 닿는다」를 말로만 적지 않았습니다. 최악 방향으로 흔들었을 때의 증폭이 그 우변에서 가능한 최댓값과 정확히 같은지, 우변까지 최대 특이벡터 방향으로 두면 증폭이 κ₂ 자체가 되는지를 2×2부터 5×5까지 무작위 행렬로 확인했습니다.
- 실제 증폭이 κ₂를 넘는 경우가 없는지도 두 방향 × 무작위 행렬로 확인했습니다. 부등식은 어김없이 지켜졌습니다.
- 「행렬식이 작다고 병조건이 아니다」를 테스트로 박아 두었습니다. 행렬을 10⁻³·10·10⁶배 해도 세 노름의 조건수가 그대로인지 확인합니다.
- 2-노름 조건수는 특이값 분해로 구합니다. AᵀA의 고윳값에서 특이값을 얻는 방식이라 아주 작은 특이값은 상대오차가 커집니다. 조건수가 10⁸을 넘어가면 그 값 자체가 몇 자리쯤 흔들릴 수 있으니 「자릿수」로만 읽는 것이 안전합니다.
- 역행렬은 부분 피벗팅을 넣은 가우스–조던으로 구합니다. 피벗이 0에 가까우면 특이행렬로 보고 멈추며, 그 경계 근처의 행렬은 판정이 갈릴 수 있습니다.
- 6×6까지 다룹니다.
함께 보면 좋은 도구
마지막 검증: 2026년 9월 2일 · 결과는 참고용 추정치입니다.