도구스학업·수학

다항식 근의 조건수(윌킨슨) 계산기

계수를 아주 조금만 흔들어도 근이 크게 움직이는 현상을 근마다 숫자로 보여 줍니다. 조건수의 분모가 p′(r)이라 근이 가까울수록 폭발한다는 것이 요점이며, 실제로 계수를 흔들어 근을 다시 구해 실근이 복소수로 갈라지는 것까지 확인할 수 있습니다.

공백이나 쉼표로 나눠 넣습니다. ∏(x − rᵢ) 를 만들어 계수를 구합니다. 20개까지 다룹니다.

0이 상수항, 15이 최고차항입니다. 윌킨슨의 그 예는 14차 계수입니다.

윌킨슨은 2⁻²³ ≈ 0.000000119를 썼습니다.

가장 민감한 근

x = 11

모든 계수를 상대적으로 ε만큼 흔들면 이 근은 최대 1.160e+11·ε만큼 움직일 것으로 추정됩니다. p′(r) = 8.709e+7이 분모에 들어가기 때문입니다.

근마다의 민감도

p′(r)가장 가까운 이웃|δr| / ε상대 조건수
18.718e+101240240
2-6.227e+9128,56014,280
39.580e+811.114e+6371,280
4-2.395e+812.116e+75.291e+6
58.709e+712.328e+84.656e+7
6-4.355e+711.630e+92.716e+8
72.903e+717.682e+91.097e+9
8-2.540e+712.524e+103.155e+9
92.903e+715.890e+106.544e+9
10-4.355e+719.816e+109.816e+9
118.709e+711.160e+111.055e+10
12-2.395e+819.492e+107.910e+9
139.580e+815.111e+103.931e+9
14-6.227e+911.629e+101.163e+9
158.718e+1012.327e+91.551e+8

|δr|/ε는 모든 계수를 상대적으로 ε만큼 흔들었을 때의 최악의 이동량입니다. 배정밀도의 반올림만으로도 ε ≈ 2⁻⁵³ ≈ 1.1×10⁻¹⁶만큼은 흔들리므로, 이 값이 10¹⁶을 넘으면 계수를 메모리에 적어 넣는 것만으로 근을 잃습니다.

차수15차
가장 큰 계수6.1658e+12
배정밀도에 정확히 담기는가담깁니다 (2⁵³ 이하)
14차 계수-120 → -120
근을 다시 구했는가수렴하지 못했습니다 — 그 자체가 나쁜 조건수의 증거입니다

실제로 흔들어 근을 다시 구하면

원래 근1차 예측 이동다시 구한 근허수부
1-1.1471e-1810
22.6311e-1320
3-4.9926e-1030
41.1208e-740
5-7.0082e-64.9999930
60.00026.000180
7-0.00236.9976760
80.01738.017872+0i
9-0.07888.927669−0i
100.229610.4319−0.07258i
11-0.43610.4319+0.072578i
120.536112.537966+0.334156i
13-0.41112.537966−0.334158i
140.178414.1533570
15-0.033514.9635210

허수부가 0이 아닌 줄은 실근이 켤레 복소수 쌍으로 갈라진 것입니다. 원래 근은 정수만 있었는데 계수를 조금 흔들었더니 복소수가 되었다는 것이 윌킨슨이 보인 그 현상입니다. 1차 예측은 흔들림이 작을 때만 맞고, 커지면 실제 이동이 예측보다 훨씬 작게 나옵니다 — 선형 근사가 통하는 범위를 넘어섰다는 뜻입니다.

한 줄로 유도됩니다. p(r) = 0에서 계수 a_j를 Δ만큼 흔들면 p(r+δ) + Δ(r+δ)ʲ = 0이고, 1차까지 펴면 δ ≈ −Δ·rʲ / p′(r)입니다. 분모가 p′(r)이라는 것이 전부입니다 — 근이 서로 가까우면 p′(r) = ∏(rᵢ − rⱼ)가 작아지고, 그러면 아무리 작은 Δ라도 δ가 폭발합니다.
근을 구하는 법이 아니라 믿을 수 있는가입니다. 이 도구는 근을 어떻게 찾는지가 아니라, 찾은 근이 계수의 작은 오차에 얼마나 흔들리는지를 봅니다. 조건수가 크면 어떤 알고리즘을 써도 정확한 답을 얻을 수 없습니다 — 문제 자체가 나쁜 것이지 방법이 나쁜 것이 아닙니다.
중근이면 조건수가 무한대입니다. p′(r) = 0이라 위의 1차 근사 자체가 성립하지 않습니다. 그때 오차는 Δ가 아니라 Δ^(1/m) 규모입니다(m은 중복도). 계수를 10⁻¹⁶만큼 흔들면 이중근은 10⁻⁸만큼 움직입니다 — 배정밀도로 계산해도 유효숫자가 절반으로 줄어든다는 뜻입니다.
20!은 배정밀도에 담기지 않습니다. 윌킨슨 20차의 상수항 20! ≈ 2.4×10¹⁸은 62비트라 배정밀도(53비트)로는 정확히 적을 수 없습니다. 계수를 double에 옮겨 적는 것만으로 이미 상대오차 2⁻⁵³만큼 흔든 셈이고, 그 상태에서 근을 구하면 아무 짓도 하지 않았는데 답이 틀립니다. 근이 15까지면 15! ≈ 1.3×10¹²라 정확히 담기므로, 두 경우를 번갈아 보면 차이가 분명해집니다.
근이 멀리 떨어져 있으면 안전합니다. 위 「멀리 떨어진 근」 예를 눌러 보세요. p′(r)이 커서 같은 흔들림에도 근이 거의 움직이지 않습니다. 윌킨슨 다항식의 근도 1씩 떨어져 있어 «충분히» 떨어져 보이지만, 차수가 높아 계수가 커지는 바람에 상대적으로 작은 흔들림이 절대적으로는 큰 변화가 됩니다.
p′(r)은 계수가 아니라 근에서 구했습니다. 계수로 p′(r)을 계산하면 큰 항들이 서로 상쇄되어 자릿수가 날아갑니다. 이 도구는 사용자가 근을 넣는다고 보고 ∏(rᵢ − rⱼ)로 계산하므로 표의 p′(r) 값 자체는 정확합니다. 아래쪽 「다시 구한 근」만 배정밀도 계수를 거치며, 그 차이가 곧 이 도구가 말하려는 것입니다.

계산 방법

  1. 1다항식의 근을 공백이나 쉼표로 나눠 넣습니다. 아래 예시 칩으로 윌킨슨 다항식을 바로 넣을 수도 있습니다.
  2. 2근마다의 p′(r)과 민감도 |δr|/ε를 확인합니다. p′(r)이 작을수록 위험합니다.
  3. 3흔들 계수의 차수와 흔드는 양을 정합니다. 윌킨슨의 그 예는 최고차 바로 아래 계수를 2⁻²³만큼 흔든 것입니다.
  4. 4「다시 구한 근」 표에서 실근이 복소수로 갈라지는지 봅니다.
  5. 5「멀리 떨어진 근」 예와 번갈아 보며 p′(r)이 클 때는 같은 흔들림에도 거의 안 움직이는 것을 확인합니다.

자주 묻는 질문

계수 a_j를 Δ만큼 흔들면 근이 δ ≈ −Δ·rʲ / p′(r)만큼 움직입니다. p(r+δ) + Δ(r+δ)ʲ = 0을 1차까지 편 결과이며, 분모가 p′(r)이라는 것이 핵심입니다. 모든 계수를 상대적으로 ε만큼 흔들면 최악의 경우 |δr| ≤ ε·Σ|a_j·rʲ| / |p′(r)|입니다.

p′(r) = ∏(rᵢ − rⱼ)이므로 근이 서로 가까우면 이 곱이 작아지기 때문입니다. 분모가 작아지니 아무리 작은 계수 오차라도 근의 이동이 폭발합니다. 반대로 근이 멀리 떨어져 있으면 p′(r)이 커서 같은 흔들림에도 거의 움직이지 않습니다.

근이 1, 2, …, 20으로 잘 떨어져 있는데도 극도로 불안정하기 때문입니다. x¹⁹ 계수(−210)를 2⁻²³만큼만 바꾸면 근들이 복소수로 갈라집니다. ∂r₂₀/∂a₁₉ = −20¹⁹/19! ≈ −4.3×10⁷이라, 계수를 10⁻⁷ 흔들면 근이 1 가까이 움직입니다.

p′(r) = 0이라 조건수가 무한대이고 1차 근사 자체가 성립하지 않습니다. 그때 오차는 Δ가 아니라 Δ^(1/m) 규모입니다(m은 중복도). 계수를 10⁻¹⁶만큼 흔들면 이중근은 10⁻⁸만큼 움직여, 배정밀도로 계산해도 유효숫자가 절반으로 줄어듭니다.

해결되지 않습니다. 조건수는 문제 자체의 성질이지 알고리즘의 성질이 아닙니다. 조건수가 10¹⁰이면 어떤 방법을 써도 배정밀도에서 유효숫자 여섯 자리쯤을 잃습니다. 해결하려면 정밀도를 올리거나, 애초에 계수 대신 근이나 인수분해된 꼴을 유지해야 합니다.

윌킨슨 20차의 상수항 20! ≈ 2.4×10¹⁸은 62비트라 배정밀도(53비트)에 정확히 담기지 않습니다. 계수를 double로 옮겨 적는 순간 이미 상대오차 2⁻⁵³만큼 흔든 셈이고, 그 상태에서 근을 구하면 아무 짓도 하지 않았는데 답이 틀립니다. 근이 15까지면 15! ≈ 1.3×10¹²라 정확히 담깁니다.

목적이 반대입니다. 근을 구하는 도구는 「답이 무엇인가」를 묻고, 이 도구는 「그 답을 믿을 수 있는가」를 묻습니다. 조건수가 크면 구한 근이 아무리 정밀해 보여도 자릿수 대부분이 의미 없습니다.

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

알아두면 좋은 점

  • 실근만 넣을 수 있습니다. 복소근을 가진 다항식은 이 도구의 범위 밖입니다.
  • 민감도는 1차 근사입니다. 흔들림이 커지면 예측이 실제 이동과 어긋나는데, 그것 자체도 화면에서 확인할 수 있습니다.
  • 근을 다시 구하는 데는 두랑–케르너 법을 씁니다. 조건이 나쁜 다항식에서는 수렴하지 못할 수 있으며, 그 사실 자체가 나쁜 조건수의 증거입니다.
  • p′(r)은 계수가 아니라 근에서 ∏(rᵢ − rⱼ)로 계산합니다. 계수로 구하면 상쇄로 자릿수가 날아갑니다.

함께 보면 좋은 도구

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