도구스학업·수학

행렬 조건수(오차 증폭) 계산기

행렬의 조건수 κ = ‖A‖·‖A⁻¹‖를 1·∞·2 세 노름으로 내고 유효자릿수를 몇 자리 잃는지 알려 줍니다. 우변을 실제로 흔들어 해가 몇 배로 움직이는지 재어 그 상한에 정말 닿는지 보여 줍니다.

한 줄이 한 행인 정사각행렬입니다. 6×6까지 다룹니다.

조건수 κ₂ (2-노름)

40,002

유효자릿수를 4.6자리쯤 잃습니다. 배정밀도는 약 16자리를 들고 시작하므로 답에 11.4자리쯤 남는다고 보면 됩니다.

크기2×2
행렬식 det A1.000e-4
κ₁ = ‖A‖₁·‖A⁻¹‖₁40,004
κ∞ = ‖A‖∞·‖A⁻¹‖∞40,004
κ₂ = σ_max / σ_min40,002
특이값2 · 5.000e-5

노름

노름‖A‖‖A⁻¹‖κ
1 (열 합)2.000120,00140,004
∞ (행 합)2.000120,00140,004
2 (특이값)2.000120,000.499240,002

노름을 무엇으로 재느냐에 따라 조건수의 값이 달라지지만 자릿수는 대개 비슷합니다. 「상한에 실제로 닿는다」고 말할 수 있는 것은 2-노름 쪽입니다.

흔들어 보기

Ax = b를 풀고 b를 조금 흔들어 해가 얼마나 움직이는지 봅니다. 값을 2개 넣어 주세요.

%

b 길이에 대한 상대 크기입니다.

해 x1, 1
흔든 뒤 해의 변화 Δx400.03, -400.01
b의 상대 변화1%
x의 상대 변화40,002.0001%
실제 증폭 배율40,002
이 b에서 가능한 최대40,002
모든 b를 통틀어 가능한 최대 (= κ₂)40,002

「최악 방향」은 가장 작은 특이값에 대응하는 방향으로 b를 흔듭니다. 이 방향에서는 증폭이 「이 b에서 가능한 최대」에 정확히 닿습니다. 조건수는 느슨한 안전값이 아니라 실제로 도달하는 값이라는 뜻입니다. 「고르게」로 바꿔 보면 대개 훨씬 작게 나오는데, 운이 좋았을 뿐 다음 입력에서도 그러리라는 보장은 없습니다.

행렬식이 작다고 병조건인 것이 아닙니다. 행렬 전체에 상수를 곱하면 행렬식은 그 상수의 n제곱만큼 달라지지만 조건수는 전혀 바뀌지 않습니다. 「아주 작은 행렬식」 예제를 눌러 보면 행렬식이 10⁻⁸인데도 조건수가 1로 완벽한 경우를 볼 수 있습니다.

계산 방법

  1. 1행렬을 한 줄에 한 행씩 넣습니다. 「거의 나란한 두 직선」이나 「힐베르트 4×4」를 눌러 보면 병조건이 어떤 모습인지 바로 보입니다.
  2. 2κ₂를 확인하고 유효자릿수를 몇 자리 잃는지 봅니다.
  3. 3우변 b를 넣고 흔드는 크기를 정합니다.
  4. 4「최악 방향」과 「고르게」를 오가며 같은 크기로 흔들어도 증폭이 얼마나 달라지는지 확인합니다.
  5. 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일 · 결과는 참고용 추정치입니다.