Chapter 03

방정식의 근 찾기

x3−2x−5=0x^3 - 2x - 5 = 0에는 근의 공식이 있지만 쓰기 번거롭고, x=cos⁡xx = \cos x나 케플러 방정식 M=E−esin⁡EM = E - e\sin E에는 아예 공식이 없습니다. 공학의 방정식 대부분이 이런 꼴입니다. 이 장은 f(x)=0f(x) = 0을 반복으로 푸는 법을 다룹니다. 구간을 반씩 줄이는 가장 안전한 방법(이분법)에서 출발해, 방정식을 x=g(x)x = g(x)로 고쳐 쓰는 고정점 반복, 접선으로 한 번에 다가가는 뉴턴 방법, 도함수 없이 비슷한 속도를 내는 할선법, 그리고 안전과 속도를 함께 얻는 브렌트 방법까지 갑니다. 모든 방법을 같은 잣대, 곧 오차가 한 단계마다 어떤 법칙으로 줄어드는가(수렴 차수)로 비교하고, 언제 멈춰야 하는지, 어떻게 실패하는지도 직접 봅니다.

이 수식이 없었다면제곱근 버튼과 행성의 위치

계산기의 √ 버튼, 나눗셈 회로가 없는 프로세서의 나눗셈, 위성의 궤도 예보, 배관의 압력 손실 계산, 회로 시뮬레이터가 다이오드의 동작점을 찾는 일은 모두 같은 일을 합니다. 공식으로 풀 수 없는 방정식 f(x)=0f(x) = 0을 어림값에서 시작해 고쳐 나가는 일입니다. 오늘날 수치 계산 라이브러리의 근 찾기 함수(MATLAB의 fzero, SciPy의 brentq)는 이 장의 이분법·할선법·역2차 보간을 조합한 방법입니다.

고쳐 나가는 생각은 오래되었습니다. 바빌로니아 점토판 YBC 7289에는 2\sqrt2가 60진법으로 1;24,51,10(십진법 1.41421296…)으로 적혀 있습니다. 17세기에 뉴턴(Isaac Newton)과 랩슨(Joseph Raphson)이 다항식 방정식을 푸는 반복법을 내놓았고, 같은 세기 초 케플러(Johannes Kepler)가 행성의 위치를 구하려고 세운 방정식 M=E−esin⁡EM = E - e\sin E는 지금도 궤도 계산 프로그램 안에서 매번 뉴턴 방법으로 풀립니다.

f(x) = 0→근을 가두고, 접선으로 다가가기→xₙ₊₁ = xₙ − f(xₙ)/f′(xₙ)→√, 1/a, 궤도, 마찰 계수

근 가두기와 이분법

부호만 보고 근을 열 자리까지

f(x)=x3−2x−5f(x) = x^3 - 2x - 5는 f(2)=−1f(2) = -1, f(3)=16f(3) = 16입니다. 연속함수가 음수에서 양수로 바뀌었으니 2와 3 사이 어딘가에 근이 있습니다. 함숫값의 부호만 물어볼 수 있다면, 근을 소수 열째 자리까지 알려면 몇 번 물어봐야 할까요? 그리고 그 횟수를 계산을 시작하기 전에 알 수 있을까요?

답의 뿌리는 중간값 정리입니다(CalculusBook 2장: 이분법). ff가 [a,b][a, b]에서 연속이고 f(a)f(a)와 f(b)f(b)의 부호가 다르면 그 사이에 근이 적어도 하나 있습니다. 이 상태를 근을 가뒀다고 합니다.

정의 3.1 (근 가둠과 이분법) 연속함수 ff에 대해 f(a)f(b)<0f(a)f(b) \lt 0인 구간 [a,b][a, b]를 근의 가둠 구간(bracket)이라 한다. 이분법(bisection method)은 중점 m=(a+b)/2m = (a + b)/2에서 f(m)f(m)의 부호를 보고, 부호가 바뀌는 쪽 절반 [a,m][a, m] 또는 [m,b][m, b]를 새 가둠 구간으로 삼는 일을 되풀이한다.
근 r a₀b₀ m₀ m₁m₂ f(m) < 0 이면 오른쪽 절반, f(m) > 0 이면 왼쪽 절반을 남긴다 한 번에 길이가 정확히 1/2 길이 (b₀ − a₀)/2ⁿ
그림 3-1. 이분법은 함수의 모양을 전혀 쓰지 않는다. 중점의 부호 하나로 근이 있는 절반을 고르므로, 가둠 구간의 길이는 매번 정확히 절반이 된다. 근이 어디 있든 똑같은 속도다.
function bisect(f, a, b, tol)
  fa = f(a)                          // sign(f(a)) != sign(f(b)) 라고 가정
  while (b - a) / 2 > tol
    m  = a + (b - a) / 2             // (a+b)/2 보다 넘침·반올림에 안전
    fm = f(m)
    if fm == 0 then return m
    if sign(fm) == sign(fa) then a = m; fa = fm
    else b = m
  return a + (b - a) / 2

부호 판정을 fa*fm < 0으로 쓰면 두 값이 아주 작을 때 곱이 언더플로로 0이 되어 판정이 틀릴 수 있으므로 sign을 비교합니다. 반복마다 ff를 한 번만 계산한다는 것도 기억해 두세요. 비용을 셀 때의 단위입니다.

정리 3.2 (이분법의 오차 한계) ff가 [a0,b0][a_0, b_0]에서 연속이고 f(a0)f(b0)<0f(a_0)f(b_0) \lt 0이면, nn번 나눈 뒤의 가둠 구간 [an,bn][a_n, b_n]에는 근 rr이 있고 그 중점 mnm_n은
∣mn−r∣≤bn−an2=b0−a02 n+1|m_n - r| \le \frac{b_n - a_n}{2} = \frac{b_0 - a_0}{2^{\,n+1}}
을 만족한다. 따라서 ∣mn−r∣≤ε|m_n - r| \le \varepsilon을 보장하려면 n≥log⁡2b0−a0ε−1n \ge \log_2\dfrac{b_0 - a_0}{\varepsilon} - 1이면 된다.

증명. 매 단계 bk+1−ak+1=(bk−ak)/2b_{k+1} - a_{k+1} = (b_k - a_k)/2이고, 부호가 바뀌는 절반을 남기므로 중간값 정리에 의해 근이 늘 구간 안에 있다. 구간 안의 점과 중점의 거리는 반 길이를 넘지 않는다. ∎

정리 3.2는 함수와 무관한 한계라는 점이 특별합니다. 근이 어디 있든, 함수가 얼마나 휘었든 같은 식입니다. 구간 [2, 3]에서 오차 10−1010^{-10}을 보장하려면 log⁡21010−1=32.2\log_2 10^{10} - 1 = 32.2, 곧 33번이면 되고, 근 근처에서 자릿수 하나(10배)를 얻는 데 평균 log⁡210≈3.32\log_2 10 \approx 3.32번이 듭니다. 배정밀도에서는 길이 1인 구간을 약 52번 나누면 더 나눌 수 없을 만큼 좁아집니다(1장의 기계 엡실론).

예제 3.1 (이분법 손 계산) f(x)=x3−2x−5f(x) = x^3 - 2x - 5의 근을 [2,3][2, 3]에서 이분법으로 찾아라. 참 근은 r=2.0945514815423265r = 2.0945514815423265이다.
naₙbₙ중점 mf(m)|m − r|
1232.55.62504.05×10⁻¹
222.52.251.89061.55×10⁻¹
322.252.1250.345703.05×10⁻²
422.1252.0625−0.351323.21×10⁻²
52.06252.1252.09375−0.00894178.02×10⁻⁴
62.093752.1252.1093750.166841.48×10⁻²
72.093752.1093752.10156250.0785627.01×10⁻³
  1. f(2.5)=5.625>0f(2.5) = 5.625 > 0이므로 근은 [2,2.5][2, 2.5]에 있다. 같은 방식으로 f(2.25)>0f(2.25) > 0, f(2.125)>0f(2.125) > 0, f(2.0625)<0f(2.0625) \lt 0이 차례로 구간을 고른다.
  2. 오차가 단조롭게 줄지는 않는다. 5단계 중점 2.09375는 우연히 근에 매우 가까웠지만(8.0×10−48.0\times10^{-4}), 6단계 중점은 다시 멀어졌다(1.5×10−21.5\times10^{-2}). 줄어드는 것은 오차의 상한 2−(n+1)2^{-(n+1)}이다.
  3. f(2.09375)=−0.0089f(2.09375) = -0.0089로 아주 작았는데도 이분법은 이 정보를 쓰지 못한다. 부호만 보기 때문이다. 함숫값의 크기까지 쓰는 방법이 뒤에 나올 할선법·가위치법이다.
SIMULATOR

이분법 한 단계씩: 가둠 구간이 반으로

목표 오차 ε
f(x)가둠 구간 [a, b]중점 m참 근
단계 n—
구간 길이 b − a—
실제 오차 |m − r|—
ε까지 필요한 n (정리 3.2)—
해볼 것: ① '다음 단계'를 누르며 구간 길이가 정확히 반씩 줄고, 실제 오차는 들쭉날쭉하지만 언제나 길이의 반 이하인 것을 확인하세요. ② 축 위의 두 끝점 a, b를 끌어 구간을 바꾸면 필요한 반복 수가 log₂(길이/ε)로 바뀝니다. 부호가 같은 구간은 거부됩니다. ③ tan x를 고르면 이분법은 근이 아니라 극점 π/2로 수렴합니다. 부호가 바뀐 이유가 근이 아니라 불연속이기 때문입니다. 모델: 중점 m = a + (b − a)/2, 부호만 판정.

고정점 반복과 축소 사상

같은 방정식, 다른 운명

x3−2x−5=0x^3 - 2x - 5 = 0은 x=2x+53x = \sqrt[3]{2x + 5}로도, x=(x3−5)/2x = (x^3 - 5)/2로도, x=5/(x2−2)x = 5/(x^2 - 2)로도 고쳐 쓸 수 있습니다. 셋 다 오른쪽에 어림값을 넣고 나온 값을 다시 넣는 일을 되풀이할 수 있습니다. 같은 근을 가진 식인데 어떤 것은 근으로 다가가고 어떤 것은 무한대로 달아납니다. 무엇이 운명을 가를까요?

정의 3.3 (고정점과 고정점 반복) g(r)=rg(r) = r인 점 rr을 gg의 고정점(fixed point)이라 한다. 어림값 x0x_0에서 xn+1=g(xn)x_{n+1} = g(x_n)을 되풀이하는 방법을 고정점 반복(fixed-point iteration)이라 한다. f(x)=0f(x) = 0을 x=g(x)x = g(x) 꼴로 고쳐 쓰면 ff의 근이 gg의 고정점이 된다.

그림으로 보면 고정점은 곡선 y=g(x)y = g(x)와 직선 y=xy = x의 교점입니다. 반복 한 번은 "곡선까지 세로로 가서(g(xn)g(x_n)을 계산), 대각선까지 가로로 가는(그 값을 새 xx로)" 일이라서, 궤적이 거미줄이나 계단 모양을 그립니다. 이것을 거미줄 그림(cobweb diagram)이라 합니다.

x₀ y = xy = g(x) |g′| < 1: 계단이 고정점으로 x₀ y = xy = g(x) |g′| > 1: 계단이 멀어진다
그림 3-2. 거미줄 그림. 곡선이 대각선보다 완만하면(∣g′∣<1|g'| \lt 1) 계단이 고정점으로 빨려 들어가고, 가파르면(∣g′∣>1|g'| > 1) 밀려난다. 기울기가 음수면 계단 대신 고정점 둘레를 도는 거미줄이 된다.

고정점 근처에서 평균값 정리를 쓰면 xn+1−r=g(xn)−g(r)=g′(ξn)(xn−r)x_{n+1} - r = g(x_n) - g(r) = g'(\xi_n)(x_n - r)입니다. 한 번 반복할 때마다 오차에 g′g'가 곱해지는 셈입니다. 그래서 ∣g′∣<1|g'| \lt 1이면 오차가 줄고, ∣g′∣>1|g'| > 1이면 커집니다.

정리 3.4 (축소 사상 정리, 1차원) gg가 [a,b][a, b]를 자기 자신으로 보내고(g([a,b])⊆[a,b]g([a, b]) \subseteq [a, b]), 어떤 L<1L \lt 1에 대해 [a,b][a, b]에서 ∣g′(x)∣≤L|g'(x)| \le L이면
  1. gg는 [a,b][a, b]에 고정점 rr을 정확히 하나 가진다.
  2. 임의의 x0∈[a,b]x_0 \in [a, b]에서 xn+1=g(xn)x_{n+1} = g(x_n)은 rr로 수렴하고 ∣xn−r∣≤Ln∣x0−r∣|x_n - r| \le L^n|x_0 - r|이다.
  3. 사후 오차 추정: ∣xn−r∣≤L1−L ∣xn−xn−1∣|x_n - r| \le \dfrac{L}{1 - L}\,|x_n - x_{n-1}|.

증명의 핵심. 존재: h(x)=g(x)−xh(x) = g(x) - x는 h(a)≥0≥h(b)h(a) \ge 0 \ge h(b)라 중간값 정리로 근이 있다. 유일성: 고정점이 둘이면 ∣r1−r2∣=∣g(r1)−g(r2)∣≤L∣r1−r2∣|r_1 - r_2| = |g(r_1) - g(r_2)| \le L|r_1 - r_2|라 r1=r2r_1 = r_2. 수렴: 평균값 정리로 ∣xn+1−r∣≤L∣xn−r∣|x_{n+1} - r| \le L|x_n - r|. 사후 추정: ∣xn−r∣≤∣xn−xn+1∣+∣xn+1−r∣≤L∣xn−xn−1∣+L∣xn−r∣|x_n - r| \le |x_n - x_{n+1}| + |x_{n+1} - r| \le L|x_n - x_{n-1}| + L|x_n - r|를 정리한다. ∎

이런 gg를 축소 사상(contraction mapping)이라 합니다. 이 정리는 바나흐(Stefan Banach)의 고정점 정리의 1차원 판이고, 4장의 연립방정식, 미분방정식 해의 존재 증명(피카르 반복), 13장의 반복 해법이 모두 같은 뼈대를 씁니다. 사후 추정 3번은 참 근을 모를 때 멈춤 판정에 쓸 수 있다는 점에서 실용적입니다. L=0.5L = 0.5이면 ∣xn−r∣≤∣xn−xn−1∣|x_n - r| \le |x_n - x_{n-1}|이지만, L=0.99L = 0.99이면 이웃 반복의 차이보다 오차가 99배까지 클 수 있습니다.

예제 3.2 (세 가지 고쳐 쓰기) x3−2x−5=0x^3 - 2x - 5 = 0의 근 r=2.0945514815r = 2.0945514815를 x0=2x_0 = 2에서 세 가지 gg로 반복하라.
  1. g1(x)=(2x+5)1/3g_1(x) = (2x + 5)^{1/3}: g1′(r)=23(2r+5)2/3=0.1520g_1'(r) = \dfrac{2}{3(2r + 5)^{2/3}} = 0.1520. 반복값 2.0800838, 2.0923507, 2.0942170, 2.0945007, … 오차가 9.46×10−2→1.45×10−2→2.20×10−3→3.35×10−49.46\times10^{-2} \to 1.45\times10^{-2} \to 2.20\times10^{-3} \to 3.35\times10^{-4}으로, 매번 정확히 약 0.152배가 된다. 11번이면 10−1010^{-10} 아래다.
  2. g2(x)=(x3−5)/2g_2(x) = (x^3 - 5)/2: g2′(r)=3r2/2=6.58g_2'(r) = 3r^2/2 = 6.58. 반복값 1.5, −0.8125, −2.768, −13.11, −1128.1로 폭주한다.
  3. g3(x)=5/(x2−2)g_3(x) = 5/(x^2 - 2): g3′(r)=−10r/(r2−2)2=−3.68g_3'(r) = -10r/(r^2 - 2)^2 = -3.68. 반복값 2.5, 1.176, −8.118, 0.0782, …로 근 둘레를 크게 튀며 벗어난다.
같은 근인데 ∣g′(r)∣|g'(r)|가 1보다 작은 g1g_1만 수렴한다. 수렴하는 경우에도 속도는 ∣g′(r)∣|g'(r)|가 정한다. x=cos⁡xx = \cos x는 ∣g′(r)∣=∣sin⁡0.7390851∣=0.674|g'(r)| = |\sin 0.7390851| = 0.674라서 x0=1x_0 = 1에서 10−1010^{-10}까지 55번이 걸린다.
SIMULATOR

거미줄 그림: 고정점 반복의 수렴과 발산

y = g(x)와 y = x, 반복 궤적
|xₙ − r| (로그 눈금)
x₀ (끌기)—
g′(r)—
측정한 |eₙ₊₁/eₙ|—
xₙ—
해볼 것: ① (2x + 5)^(1/3)에서 오른쪽 그래프가 직선(기울기 log 0.152)으로 내려가는 것을 보세요. 선형 수렴입니다. ② (x³ − 5)/2와 5/(x² − 2)는 x₀를 근 가까이 두어도 달아납니다. ③ 완화 반복 x − λ(x² − 2)에서 λ를 움직이면 g′(√2) = 1 − 2√2·λ가 바뀝니다. λ ≈ 0.354(= 1/(2√2))에서 g′ = 0이 되어 오차 그래프가 갑자기 꺾여 내려갑니다. 2차 수렴이고, 뉴턴 방법의 정체입니다. 모델: 축 위의 점 x₀를 끌어 출발점을 바꿉니다.

수렴 차수: 오차가 줄어드는 법칙

이분법은 한 번에 오차 상한이 1/2배, g1g_1 반복은 0.152배, cos⁡x\cos x 반복은 0.674배가 되었습니다. 모두 "매번 일정한 비율"로 줄어드는 같은 종류입니다. 거미줄 시뮬레이터의 λ = 0.354처럼 비율 자체가 0으로 가는 더 빠른 종류도 있습니다. 이를 구별하는 언어가 수렴 차수입니다.

정의 3.5 (수렴 차수) xn→rx_n \to r이고 en=xn−re_n = x_n - r이라 하자. 상수 p≥1p \ge 1과 C>0C > 0이 있어
lim⁡n→∞∣en+1∣∣en∣ p=C\lim_{n\to\infty}\frac{|e_{n+1}|}{|e_n|^{\,p}} = C
이면 수열이 수렴 차수(order of convergence) pp, 점근 상수 CC로 수렴한다고 한다. p=1p = 1(이때 C<1C \lt 1이어야 한다)이면 선형 수렴(linear convergence), p=2p = 2이면 2차 수렴(quadratic convergence), ∣en+1∣/∣en∣→0|e_{n+1}|/|e_n| \to 0이면 초선형 수렴(superlinear convergence)이라 한다.

차이를 숫자로 느껴 봅시다. 오차 10−110^{-1}에서 출발해 C=0.5C = 0.5로 선형 수렴하면 10−1610^{-16}까지 약 50번이 걸립니다. 2차 수렴(C=1C = 1)이면 10−2,10−4,10−8,10−1610^{-2}, 10^{-4}, 10^{-8}, 10^{-16}, 곧 네 번입니다. 2차 수렴은 맞는 자릿수가 매번 두 배가 된다는 뜻입니다.

차수를 실험으로 재려면 ∣en+1∣≈C∣en∣p|e_{n+1}| \approx C|e_n|^p의 로그를 이웃한 두 단계에서 빼서 CC를 지웁니다.

p≈log⁡(∣en+1∣/∣en∣)log⁡(∣en∣/∣en−1∣)p \approx \frac{\log\left(|e_{n+1}|/|e_n|\right)}{\log\left(|e_n|/|e_{n-1}|\right)}
참 근을 모르면 ene_n 대신 이웃 반복의 차이 xn+1−xnx_{n+1} - x_n을 쓴다. 초선형 수렴에서는 xn+1−xn≈−enx_{n+1} - x_n \approx -e_n이기 때문이다. 오차가 반올림 수준(10−1610^{-16} 근처)에 닿은 단계는 빼야 한다.

또 하나의 그림이 있습니다. log⁡∣en∣\log|e_n|을 nn에 대해 그리면 선형 수렴은 직선(기울기 log⁡C\log C), 2차 수렴은 아래로 점점 가팔라지는 곡선입니다. log⁡∣en+1∣\log|e_{n+1}|을 log⁡∣en∣\log|e_n|에 대해 그리면 어떤 방법이든 직선이 되고 그 기울기가 바로 pp입니다. 이 장의 비교 시뮬레이터가 두 그림을 모두 보여 줍니다.

고정점 반복의 차수는 gg의 도함수가 근에서 몇 번째까지 0인가로 정해집니다. 이것이 뉴턴 방법이 빠른 이유를 한 줄로 설명합니다.

정리 3.6 (고정점 반복의 차수) gg가 rr 근처에서 pp번 연속 미분 가능하고 g′(r)=⋯=g(p−1)(r)=0g'(r) = \cdots = g^{(p-1)}(r) = 0, g(p)(r)≠0g^{(p)}(r) \ne 0이면, rr에 충분히 가까운 x0x_0에서 고정점 반복은 차수 pp로 수렴하고 C=∣g(p)(r)∣/p!C = |g^{(p)}(r)|/p!이다. p=1p = 1이면 0<∣g′(r)∣<10 \lt |g'(r)| \lt 1이어야 하고 C=∣g′(r)∣C = |g'(r)|이다.

증명. 테일러 정리로 g(xn)=g(r)+g(p)(ξn)p!(xn−r)pg(x_n) = g(r) + \dfrac{g^{(p)}(\xi_n)}{p!}(x_n - r)^p(앞의 항들은 0). g(r)=rg(r) = r이므로 en+1=g(p)(ξn)p!enpe_{n+1} = \dfrac{g^{(p)}(\xi_n)}{p!}e_n^p이고 ξn→r\xi_n \to r. ∎

뉴턴 방법: 접선으로 다가가기

함숫값과 기울기를 함께 쓰면

이분법은 부호만, 고정점 반복은 gg만 씁니다. 현재 점에서 함숫값 f(xn)f(x_n)과 기울기 f′(xn)f'(x_n)을 안다면 함수를 직선(접선)으로 어림하고 그 직선의 근으로 단숨에 건너갈 수 있습니다. 이것이 얼마나 빠르고, 언제 믿을 수 있을까요?

CalculusBook에서 접선 근사로 뉴턴 방법을 만났습니다(CalculusBook 6장: 뉴턴 방법). 여기서는 오차 분석을 끝까지 합니다. xnx_n에서의 테일러 전개를 1차에서 자르면 f(x)≈f(xn)+f′(xn)(x−xn)f(x) \approx f(x_n) + f'(x_n)(x - x_n)이고, 이 직선이 0이 되는 점을 다음 어림값으로 삼습니다.

정의 3.7 (뉴턴 방법) f′(xn)≠0f'(x_n) \ne 0일 때
xn+1=xn−f(xn)f′(xn),n=0,1,2,…x_{n+1} = x_n - \frac{f(x_n)}{f'(x_n)}, \qquad n = 0, 1, 2, \dots
로 반복하는 방법을 뉴턴 방법(Newton's method, Newton–Raphson)이라 한다. 한 번에 ff와 f′f'을 하나씩 계산한다. 고정점 반복으로 보면 g(x)=x−f(x)/f′(x)g(x) = x - f(x)/f'(x)이다.
x₀ x₁ x₂ r 접선: y = f(xₙ) + f′(xₙ)(x − xₙ) 그 근: xₙ₊₁ = xₙ − f(xₙ)/f′(xₙ) 근에 가까울수록 곡선이 접선과 닮아 오차가 제곱으로 줄어든다
그림 3-3. 뉴턴 방법의 두 단계. 현재 점의 접선이 xx축과 만나는 곳이 다음 어림값이다. 곡선과 접선의 차이는 12f′′ (x−xn)2\tfrac12 f''\,(x - x_n)^2 정도라서, 근에 가까워질수록 접선의 근이 참 근에 제곱으로 가까워진다.
function newton(f, df, x, tol, maxit)
  for n = 1 .. maxit
    d = df(x)
    if d == 0 then fail("평평한 곳: 접선이 x축과 만나지 않음")
    s = f(x) / d
    x = x - s
    if |s| <= tol * (1 + |x|) then return x   // 걸음 크기 판정 (멈춤 조건 절 참고)
  fail("maxit 안에 수렴하지 않음")
정리 3.8 (뉴턴 방법의 2차 수렴) ff가 근 rr 근처에서 두 번 연속 미분 가능하고 f(r)=0f(r) = 0, f′(r)≠0f'(r) \ne 0이면, rr에 충분히 가까운 x0x_0에서 뉴턴 방법은 rr로 수렴하고
en+1=f′′(ξn)2f′(xn) en2,lim⁡n→∞∣en+1∣en2=∣f′′(r)2f′(r)∣.e_{n+1} = \frac{f''(\xi_n)}{2f'(x_n)}\,e_n^2, \qquad \lim_{n\to\infty}\frac{|e_{n+1}|}{e_n^2} = \left|\frac{f''(r)}{2f'(r)}\right|.

증명의 핵심. xnx_n에서 테일러 전개해 rr을 넣으면 0=f(r)=f(xn)+f′(xn)(r−xn)+12f′′(ξn)(r−xn)20 = f(r) = f(x_n) + f'(x_n)(r - x_n) + \tfrac12 f''(\xi_n)(r - x_n)^2. 양변을 f′(xn)f'(x_n)으로 나누고 뉴턴 식 xn+1=xn−f(xn)/f′(xn)x_{n+1} = x_n - f(x_n)/f'(x_n)을 쓰면 xn+1−r=f′′(ξn)2f′(xn)(xn−r)2x_{n+1} - r = \dfrac{f''(\xi_n)}{2f'(x_n)}(x_n - r)^2. 근 근처에서 ∣f′′/(2f′)∣≤K|f''/(2f')| \le K이고 K∣e0∣<1K|e_0| \lt 1이면 ∣en+1∣≤(K∣en∣)∣en∣|e_{n+1}| \le (K|e_n|)|e_n|이라 오차가 줄고, 줄수록 더 빨리 준다. 정리 3.6으로 보면 g′(x)=f(x)f′′(x)/f′(x)2g'(x) = f(x)f''(x)/f'(x)^2이라 g′(r)=0g'(r) = 0이다. ∎

정리의 "충분히 가까운"이 중요합니다. 뉴턴 방법은 국소적으로만 수렴이 보장됩니다. 상수 K=∣f′′/(2f′)∣K = |f''/(2f')|가 크면(근에서 기울기가 작거나 곡률이 크면) 2차 수렴이 시작되는 반경 1/K1/K이 좁습니다. 그 바깥에서는 뒤의 실패 갤러리처럼 무슨 일이든 일어날 수 있습니다.

예제 3.3 (뉴턴 방법 손 계산) f(x)=x3−2x−5f(x) = x^3 - 2x - 5, f′(x)=3x2−2f'(x) = 3x^2 - 2, x0=2x_0 = 2.
nxₙf(xₙ)|eₙ||eₙ|/|eₙ₋₁|²
02−19.46×10⁻²
12.16.10×10⁻²5.45×10⁻³0.610
22.09456812110418511.86×10⁻⁴1.66×10⁻⁵0.560
32.09455148169819921.74×10⁻⁹1.56×10⁻¹⁰0.563
42.0945514815423265−8.9×10⁻¹⁶0
  1. x1=2−(−1)/10=2.1x_1 = 2 - (-1)/10 = 2.1. 첫 단계에서 이미 오차가 17분의 1이다.
  2. 맞는 자릿수: x1x_1 2자리, x2x_2 5자리, x3x_3 10자리, x4x_4는 배정밀도 전부. 매번 거의 두 배다.
  3. 비율 ∣en∣/∣en−1∣2|e_n|/|e_{n-1}|^2이 0.563에 모인다. 정리 3.8의 예측 f′′(r)/(2f′(r))=6r/(2(3r2−2))=12.567/22.323=0.563f''(r)/(2f'(r)) = 6r/(2(3r^2 - 2)) = 12.567/22.323 = 0.563과 같다. 차수를 재는 공식으로는 p≈2.03, 2.00p \approx 2.03,\ 2.00이다.
  4. x4x_4에서 f(x4)=−8.9×10−16f(x_4) = -8.9\times10^{-16}은 0이 아니다. ff를 계산할 때의 반올림 때문이고, 이보다 작게 만들 수는 없다(멈춤 조건 절).

중근에서는 1차로 떨어진다

정리 3.8은 f′(r)≠0f'(r) \ne 0을 가정했습니다. 근에서 곡선이 xx축에 접하면(중근) 무슨 일이 생길까요? f(x)=(x−r)mh(x)f(x) = (x - r)^m h(x), h(r)≠0h(r) \ne 0이면 근 근처에서 f/f′≈(x−r)/mf/f' \approx (x - r)/m이므로 뉴턴 걸음은 남은 거리의 1/m1/m만큼만 갑니다.

정리 3.9 (중근에서의 뉴턴 방법) rr이 ff의 mm중근(m≥2m \ge 2)이면 뉴턴 방법은 선형으로 수렴하고 lim⁡∣en+1∣/∣en∣=(m−1)/m\lim |e_{n+1}|/|e_n| = (m - 1)/m이다. 중복도 mm을 알면 수정 뉴턴 방법 xn+1=xn−m f(xn)/f′(xn)x_{n+1} = x_n - m\,f(x_n)/f'(x_n)이 2차 수렴을 되찾는다. mm을 모르면 u=f/f′u = f/f'(단순근만 가진다)에 뉴턴 방법을 쓴다.

증명의 핵심. g(x)=x−f/f′g(x) = x - f/f'에 f=(x−r)mhf = (x - r)^m h를 넣어 미분하면 g′(r)=1−1/mg'(r) = 1 - 1/m이다. 정리 3.6의 p=1p = 1 경우다. 수정 방법은 g(x)=x−mf/f′g(x) = x - mf/f'이라 g′(r)=1−m/m=0g'(r) = 1 - m/m = 0이 된다. ∎

예제 3.4 (이중근) f(x)=x3−3x+2=(x−1)2(x+2)f(x) = x^3 - 3x + 2 = (x - 1)^2(x + 2)의 이중근 r=1r = 1을 x0=2x_0 = 2에서 찾아라.
  1. 보통 뉴턴: 오차 1→0.556→0.298→0.155→0.0796→0.0403→0.02031 \to 0.556 \to 0.298 \to 0.155 \to 0.0796 \to 0.0403 \to 0.0203. 비율이 (m−1)/m=1/2(m - 1)/m = 1/2로 간다. 10−610^{-6}까지 21번이 걸리고, 27번째에 9.7×10−99.7\times10^{-9}에서 더 나아가지 못한다.
  2. 수정 뉴턴(m=2m = 2): 오차 1→0.111→1.95×10−3→6.33×10−7→3.83×10−111 \to 0.111 \to 1.95\times10^{-3} \to 6.33\times10^{-7} \to 3.83\times10^{-11}. 2차 수렴이 돌아왔지만 3.8×10−113.8\times10^{-11}에서 멈춘다.
  3. 둘 다 10−1610^{-16}까지 가지 못하는 이유: 이중근 근처에서 f(x)≈3(x−1)2f(x) \approx 3(x - 1)^2이라 ∣x−1∣=10−8|x - 1| = 10^{-8}이면 f≈3×10−16f \approx 3\times10^{-16}, 이미 ff를 계산하는 반올림 오차와 같은 크기다. mm중근은 대략 ε1/m\varepsilon^{1/m}까지만 구할 수 있다. 근 자체의 조건수가 나쁜 문제다(2장: 조건수).

할선법: 도함수 없이

f′f'을 식으로 구할 수 없거나 계산이 비싸면(예: ff가 시뮬레이션 한 번), 접선 대신 마지막 두 점을 잇는 할선을 씁니다. 도함수를 차분 몫 f(xn)−f(xn−1)xn−xn−1\dfrac{f(x_n) - f(x_{n-1})}{x_n - x_{n-1}}으로 바꾼 뉴턴 방법입니다.

정의 3.10 (할선법) 어림값 두 개 x0,x1x_0, x_1에서 출발해
xn+1=xn−f(xn) xn−xn−1f(xn)−f(xn−1)x_{n+1} = x_n - f(x_n)\,\frac{x_n - x_{n-1}}{f(x_n) - f(x_{n-1})}
로 반복하는 방법을 할선법(secant method)이라 한다. 앞 단계의 f(xn−1)f(x_{n-1})을 다시 쓰므로 한 번에 ff를 한 번만 새로 계산한다.
정리 3.11 (할선법의 차수는 황금비) f′(r)≠0f'(r) \ne 0, f′′(r)≠0f''(r) \ne 0이고 x0,x1x_0, x_1이 rr에 충분히 가까우면
en+1≈f′′(r)2f′(r) enen−1,p=1+52≈1.618.e_{n+1} \approx \frac{f''(r)}{2f'(r)}\,e_n e_{n-1}, \qquad p = \frac{1 + \sqrt5}{2} \approx 1.618.

증명의 핵심. 할선은 xn−1,xnx_{n-1}, x_n을 지나는 1차 보간이고, 보간 오차 공식(5장)으로 f(x)−ℓ(x)=12f′′(ξ)(x−xn)(x−xn−1)f(x) - \ell(x) = \tfrac12 f''(\xi)(x - x_n)(x - x_{n-1}). x=rx = r을 넣고 정리하면 위의 곱 공식이 나온다. ∣en+1∣≈C∣en∣p|e_{n+1}| \approx C|e_n|^p라 놓고 ∣en−1∣≈(∣en∣/C)1/p|e_{n-1}| \approx (|e_n|/C)^{1/p}를 넣으면 지수 비교에서 p=1+1/pp = 1 + 1/p, 곧 p2=p+1p^2 = p + 1. 양의 근이 황금비다. ∎

차수 1.618은 뉴턴의 2보다 작지만 한 단계 비용이 절반입니다. 공정한 비교 잣대는 효율 지수(efficiency index) p1/wp^{1/w}(ww는 한 단계의 함수 계산 수)입니다. f′f'의 비용이 ff와 같다면 뉴턴은 21/2=1.4142^{1/2} = 1.414, 할선법은 1.6181/1=1.6181.618^{1/1} = 1.618. 함수 계산 한 번당 할선법이 더 많이 줄입니다. 대신 할선법은 f(xn)−f(xn−1)f(x_n) - f(x_{n-1})에서 자릿수 상쇄가 생기고(1장), 근을 가두지 않으므로 뉴턴처럼 달아날 수 있습니다.

예제 3.5 (할선법) 같은 f=x3−2x−5f = x^3 - 2x - 5에 x0=2x_0 = 2, x1=3x_1 = 3으로 할선법을 써라.
nxₙ|eₙ||eₙ|/(|eₙ₋₁||eₙ₋₂|)
22.05882352941176453.57×10⁻²
32.08126365984502291.33×10⁻²
42.09482414609405242.73×10⁻⁴0.574
52.09454943103524732.05×10⁻⁶0.566
62.09455148122759923.15×10⁻¹⁰0.563
72.09455148154232704.4×10⁻¹⁶
비율 ∣en+1∣/(∣en∣∣en−1∣)|e_{n+1}|/(|e_n||e_{n-1}|)이 정리 3.11의 0.563으로 모인다. 오차의 지수 −1.4,−1.9,−3.6,−5.7,−9.5-1.4, -1.9, -3.6, -5.7, -9.5가 앞의 두 지수의 합에 가깝게 자란다(피보나치 수열처럼). ff를 2 + 6 = 8번 계산해 배정밀도에 닿았다. 뉴턴 방법은 같은 정확도에 ff와 f′f'을 4번씩, 합해서 8번 썼다.
SIMULATOR

뉴턴 접선 · 할선 · 수정 뉴턴 한 단계씩

방법
f(x)접선 / 할선반복점참 근
단계 n—
xₙ—
|eₙ|—
측정 차수 p—
해볼 것: ① x³ − 2x − 5에서 뉴턴을 4번 누르며 표의 |eₙ|/|eₙ₋₁|²가 0.563으로 모이는 것을 보세요. ② 이중근 함수로 바꾸면 비율 |eₙ|/|eₙ₋₁|이 0.5에 머뭅니다(1차). '수정 (m = 2)'를 고르면 다시 2차입니다. 단순근 함수에서 수정 방법을 쓰면 근을 지나쳐 오히려 1차로 느려집니다. ③ 할선법은 끄는 점이 두 개(x₀, x₁)입니다. 측정 차수가 1.6 근처에 머뭅니다. 모델: 참 근은 미리 고정밀로 구해 둔 값, 측정 차수는 마지막 세 오차로 계산합니다.

가위치법과 일리노이 수정

할선법의 속도와 이분법의 안전을 함께

할선법은 빠르지만 근을 가두지 않아 달아날 수 있고, 이분법은 안전하지만 함숫값의 크기를 버립니다. 가둠 구간의 두 끝을 잇는 할선을 쓰면 둘을 함께 얻을 수 있지 않을까요? 이 자연스러운 생각에는 함정이 하나 있습니다.

가둠 구간 [a,b][a, b]의 두 끝점 (a,f(a))(a, f(a)), (b,f(b))(b, f(b))를 잇는 직선이 xx축과 만나는 점 c=af(b)−bf(a)f(b)−f(a)c = \dfrac{a f(b) - b f(a)}{f(b) - f(a)}를 중점 대신 쓰고, 부호가 바뀌는 쪽을 남기는 방법이 가위치법(regula falsi, method of false position)입니다. 근은 늘 갇혀 있으니 안전합니다.

b (움직이지 않음) r a₀ 볼록한 곡선에서는 c가 늘 근의 왼쪽에 떨어져 a만 조금씩 움직이고 b는 영원히 남는다 구간 길이는 0으로 가지 않는다 → 선형 수렴
그림 3-4. 가위치법의 함정. 근 근처에서 ff가 볼록(또는 오목)하면 할선의 근이 늘 같은 쪽에 떨어져, 한 끝점이 처음 자리에 묶인다. 묶인 끝점이 멀리 있으니 할선의 기울기가 접선과 달라 매번 일정한 비율밖에 줄지 않는다.

함정은 그림 3-4입니다. 묶인 끝점 bb 때문에 오차가 en+1≈Cene_{n+1} \approx C e_n(선형)으로만 줄고, f(b)f(b)가 클수록 CC가 1에 가까워집니다. 처방은 놀랍도록 간단합니다. 같은 끝점이 두 번 연속 남으면 그 끝점의 함숫값을 반으로 줄여 할선을 그쪽으로 눕힙니다. 이것이 일리노이 수정(Illinois algorithm)입니다.

function illinois(f, a, b, tol)
  fa = f(a); fb = f(b); side = 0
  while |b - a| > tol
    c  = (a*fb - b*fa) / (fb - fa)     // 할선의 근 (가위치)
    fc = f(c)
    if sign(fc) == sign(fb)            // c가 b를 대신함, a는 남음
      b = c; fb = fc
      if side == -1 then fa = fa / 2  // a가 두 번 연속 남았다
      side = -1
    else                              // c가 a를 대신함, b는 남음
      a = c; fa = fc
      if side == +1 then fb = fb / 2
      side = +1
  return c
예제 3.6 (묶인 끝점 풀어 주기) f(x)=x3−2x−5f(x) = x^3 - 2x - 5, [2,3][2, 3].
  1. 가위치법: cc = 2.0588235, 2.0812637, 2.0896392, 2.0927396, … 모두 근의 왼쪽이고 b=3b = 3은 끝까지 그대로다. 오차 비율이 0.3719,0.3697,0.3689,⋯→0.36840.3719, 0.3697, 0.3689, \dots \to 0.3684로 선형이다. 10−1010^{-10}까지 21번.
  2. 일리노이: 처음 두 번은 같다. 3번째에 f(3)=16f(3) = 16을 8로 줄인 할선이 c=2.0978634c = 2.0978634로 근의 오른쪽에 떨어져 bb가 드디어 움직인다. 이후 오차 2.49×10−5, 4.63×10−8, 4.62×10−8, 8.9×10−162.49\times10^{-5},\ 4.63\times10^{-8},\ 4.62\times10^{-8},\ 8.9\times10^{-16}. 7번이면 끝난다.
  3. 이분법은 오차를 보장하려면 33번이 필요하다(이 예에서는 32번째 중점에서 처음 10−1010^{-10} 아래로 내려간다). 더 볼록한 함수에서 차이가 커진다. x10−1x^{10} - 1을 [0,1.3][0, 1.3]에서 풀면 10−1010^{-10}까지 가위치법 95번, 일리노이 14번이고, ex−2e^x - 2를 [0,4][0, 4]에서 풀면 171번 대 10번이다.
일리노이 방법의 수렴 차수는 약 31/3≈1.443^{1/3} \approx 1.44로 알려져 있다. 반으로 줄이는 단계와 할선 단계가 섞여 있기 때문이다.
SIMULATOR

가위치법 vs 일리노이 vs 이분법: 묶인 끝점

선택한 방법의 할선과 가둠 구간
|오차| vs 반복 n (세 방법)
위 그림에 보일 방법
가위치법일리노이이분법
단계 n—
가위치 |e|—
일리노이 |e|—
이분 |e|—
해볼 것: ① 가위치법을 보며 단계를 넘기면 한쪽 끝점(빨간 고리)이 움직이지 않습니다. 오른쪽 그래프에서 빨간 선은 기울기가 일정한 직선(선형 수렴)입니다. ② 일리노이로 바꾸면 반으로 줄인 함숫값(빈 원)이 할선을 눕혀 묶인 끝점을 풀어 줍니다. ③ x¹⁰ − 1은 가위치법이 이분법보다도 훨씬 느린 예입니다. 모델: 반복 최대 60번, 오차는 참 근과의 거리.

브렌트 방법: 안전하게, 그러나 빠르게

실무의 근 찾기 함수는 하나의 공식이 아니라 전략입니다. 브렌트 방법(Brent's method)은 데커(T. J. Dekker)의 아이디어를 브렌트(Richard Brent)가 다듬은 것으로, 늘 가둠 구간을 유지하면서 매 단계 가장 빠른 후보를 시도하고, 후보가 미덥지 않으면 이분법으로 물러납니다.

x=fbfc(fa−fb)(fa−fc) a+fafc(fb−fa)(fb−fc) b+fafb(fc−fa)(fc−fb) cx = \frac{f_b f_c}{(f_a - f_b)(f_a - f_c)}\,a + \frac{f_a f_c}{(f_b - f_a)(f_b - f_c)}\,b + \frac{f_a f_b}{(f_c - f_a)(f_c - f_b)}\,c
역2차 보간의 라그랑주 형식(5장). 세 yy값이 서로 달라야 한다. 이 xx가 다음 후보다.
function brent(f, a, b, tol)        // f(a), f(b)의 부호가 다름
  loop
    b = 지금까지 |f|가 가장 작은 점, c = b와 부호가 다른 끝점 (가둠 [b, c])
    if |c - b| / 2 <= tol then return b
    if 직전 걸음이 충분히 컸다
      x = 역2차 보간(세 점이 있으면) or 할선
      if x가 가둠 구간 안쪽이고 걸음이 직전 걸음의 절반보다 작다
        then 받아들임 else x = 이분 중점
    else x = 이분 중점
    f(x) 계산, 가둠 구간 갱신

브렌트 방법은 매끄러운 함수에서 초선형으로 수렴하고, 최악의 경우에도 이분법의 몇 배를 넘지 않도록 설계되어 있습니다(브렌트는 이분법이 NN번 걸리는 문제에서 많아야 약 N2N^2번임을 보였다). 아래 비교 시뮬레이터의 구현으로 x3−2x−5x^3 - 2x - 5를 [2,3][2, 3]에서 풀면 ff를 8번 계산하고 끝나며, 단계는 할선 → 역2차 → 할선 → 할선 → 역2차 → 할선 순입니다. x10−1x^{10} - 1에서는 처음 할선이 멀리 떨어지자 이분 단계가 두 번 끼어든 뒤 다시 빠른 단계로 돌아가 10번 만에 끝납니다.

방법 비교: 오차 그래프의 기울기

지금까지의 방법을 한 그림에 모아 봅시다. 세로축은 로그 눈금의 오차, 가로축은 반복 수 또는 함수 계산 횟수입니다. 반복 한 번의 값이 방법마다 다르므로(뉴턴은 ff와 f′f', 나머지는 ff 하나) 공정한 비교는 후자입니다. 두 번째 보기 log⁡∣en+1∣\log|e_{n+1}| 대 log⁡∣en∣\log|e_n|에서는 각 방법이 직선이 되고 그 기울기가 수렴 차수입니다.

SIMULATOR

여섯 방법의 오차 경주: 수렴 차수를 기울기로 읽기

그래프
이분고정점(기울기 고정)가위치일리노이할선뉴턴브렌트
10⁻¹² 도달 f 계산 수: 이분—
일리노이—
할선—
뉴턴 (f + f′)—
브렌트—
해볼 것: ① 'eₙ₊₁ vs eₙ'을 고르면 이분·가위치·고정점은 기울기 1, 할선은 약 1.6, 뉴턴은 2의 직선이 됩니다(기준선과 비교). ② 'f 계산 수'로 바꾸면 뉴턴과 할선의 차이가 줄거나 뒤집힙니다. 효율 지수 √2 = 1.41 대 1.62입니다. ③ x¹⁰ − 1에서 x₀ = 1.3의 뉴턴은 처음 몇 단계를 거의 일정한 비율(0.9배)로 기어가다가 근 근처에서 갑자기 2차로 바뀝니다. 브렌트 아래 메시지에서 단계 종류를 보세요. 모델: 고정점 반복은 기울기를 처음 값 f′(x₀)로 고정한 "평행선 방법"입니다.
방법가둠필요한 것차수 p단계당 계산효율 지수
이분법예f의 부호1 (C = 1/2)f 1번1 (확실)
고정점 반복아니오g, |g′(r)| < 11 (C = |g′(r)|)g 1번—
가위치법예f1 (끝점 묶임)f 1번—
일리노이예f≈ 1.44f 1번1.44
할선법아니오f, 시작점 2개1.618f 1번1.618
뉴턴 방법아니오f, f′2 (단순근)f, f′ 1번씩1.414
브렌트 방법예f초선형(≈ 1.8)f 1번≈ 1.8, 최악에도 안전

규칙은 단순합니다. 가둘 수 있으면 브렌트(fzero, brentq), 도함수가 싸고 좋은 어림값이 있으면 뉴턴(케플러 방정식, 제곱근, 음적 ODE 방법의 매 걸음), 다변수라면 4장의 다변수 뉴턴과 그 변형입니다.

언제 멈출까: 잔차와 간격

|f(x)|가 10⁻¹⁴인데 오차는 0.01

p(x)=(x−1)7p(x) = (x - 1)^7을 전개한 다항식 x7−7x6+21x5−⋯−1x^7 - 7x^6 + 21x^5 - \cdots - 1에서 p(1.01)=8.0×10−15p(1.01) = 8.0\times10^{-15}입니다. "∣f(x)∣<10−12|f(x)| \lt 10^{-12}이면 멈춘다"는 프로그램은 1.01을 근이라고 보고하겠지만 오차는 0.01입니다. 반대로 f(x)=1010(x−2)f(x) = 10^{10}(x - 2)에서는 오차가 10−1210^{-12}인 점도 ∣f∣=0.01|f| = 0.01이라 영원히 멈추지 않습니다. 무엇을 기준으로 멈춰야 할까요?

멈춤 조건에는 세 종류가 있습니다.

그리고 어떤 조건도 반올림 바닥 아래로는 내려갈 수 없습니다. ff를 계산한 값에는 대략 δ≈ε⋅∑∣akxk∣\delta \approx \varepsilon\cdot\sum|a_k x^k| 크기의 잡음이 섞이고, ∣f(x)∣|f(x)|가 그보다 작아지는 근 근처의 구간에서는 계산한 ff의 부호가 무작위가 됩니다. 이 불확실 구간의 반지름은 대략 δ/∣f′(r)∣\delta/|f'(r)|(단순근), mm중근이면 (δ m!/∣f(m)(r)∣)1/m(\delta\, m!/|f^{(m)}(r)|)^{1/m}입니다. 그래서 허용 오차는 4ε∣x∣4\varepsilon|x|보다 작게 잡지 않고, 반복 수 상한(maxit)을 꼭 둡니다.

예제 3.7 (7중근의 불확실 구간) p(x)=(x−1)7p(x) = (x - 1)^7을 전개한 계수로 호너 방법(4장) 계산하라.
  1. [0.98,1.02][0.98, 1.02]에서 계산값과 참값 (x−1)7(x - 1)^7의 차이는 최대 6.0×10−156.0\times10^{-15}이다. 참값이 이보다 작아지는 ∣x−1∣<(6×10−15)1/7=0.0093|x - 1| \lt (6\times10^{-15})^{1/7} = 0.0093에서는 부호를 믿을 수 없다. 실제로 [0.99,1.01][0.99, 1.01]을 2000칸으로 나눠 보면 계산한 pp의 부호가 694번 바뀐다.
  2. 이분법은 여전히 "부호가 바뀌는 점"을 찾아 주지만, 그 점은 근이 아니다. [0.5,1.6][0.5, 1.6]에서 시작하면 0.99978(오차 2.2×10−42.2\times10^{-4}), [0.7,1.25][0.7, 1.25]에서 시작하면 0.99648(오차 3.5×10−33.5\times10^{-3})을 보고한다.
  3. 교훈: 문제의 조건수가 나쁘면(mm중근, 평평한 함수) 어떤 알고리즘도 불확실 구간보다 정확할 수 없다. 이때 할 일은 알고리즘이 아니라 문제를 바꾸는 것, 예를 들어 인수 형태 (x−1)7(x - 1)^7을 그대로 계산하는 것이다.
SIMULATOR

근 근처의 반올림 잡음: 불확실 구간 확대경

참 곡선배정밀도 계산값잡음 크기 ±δ이분법이 보고한 근
잡음 크기 δ (창 안 최대)—
불확실 구간 반지름—
창 안 부호 바뀜—
이분법 결과 오차 범위—
해볼 것: ① (x − 1)⁷에서 창을 10⁻² 근처로 확대하면 매끄럽던 곡선이 톱니 같은 잡음으로 바뀝니다. 잡음 띠 안에서는 부호가 무작위입니다. ② '이분법 20번 실행'은 무작위 처음 구간 20개로 이분법을 돌려 보고된 근을 빨간 점으로 찍습니다. 점들이 불확실 구간 전체에 흩어집니다. ③ 단순근 (x − 1)(x − 2)(x − 3)에서는 10⁻¹⁵까지 확대해야 잡음이 보입니다. 불확실 구간이 δ/|f′(1)| = δ/2 정도로 작습니다. 모델: 계수로 호너 계산, 참값은 곱 형태.

뉴턴 방법이 실패할 때

뉴턴 방법의 수렴은 국소적입니다. 출발점이 나쁘면 다음과 같은 일이 실제로 일어납니다.

처방은 셋입니다. ① 가둠 구간을 알면 안전장치를 단 뉴턴: 뉴턴 걸음이 가둠 구간 밖으로 나가거나 충분히 줄지 않으면 이분 걸음을 대신 둔다(브렌트와 같은 생각, Numerical Recipes의 rtsafe). ② 걸음을 줄이는 감쇠 뉴턴: ∣f∣|f|가 줄어들 때까지 걸음을 반으로 줄인다(4장). ③ 물리적 직관이나 근사식으로 좋은 출발점을 고른다(케플러 방정식의 E0=πE_0 = \pi, 콜브룩 방정식의 하알란 근사).

SIMULATOR

뉴턴 방법 실패 갤러리와 안전장치

사례
f(x)접선반복점참 근가둠 구간
x₀ (끌기)—
xₙ—
|f(xₙ)|—
이분 걸음 수—
해볼 것: ① '순환'에서 x₀를 0에서 조금씩 움직여 보세요. 대부분은 결국 순환을 벗어나 근 −1.769로 가지만, 0 바로 근처는 오래 갇힙니다. ② '발산'에서 x₀를 1.39와 1.40 사이로 옮기며 수렴과 발산의 경계 1.3917을 찾으세요. ③ 아무 사례에서나 '안전장치'를 켜면 걸음이 가둠 구간 밖으로 나갈 때마다 이분 걸음(초록 구간이 반으로)으로 바뀌어 언제나 근에 닿습니다. 모델: 가둠 구간은 사례마다 미리 정한 부호 바뀜 구간입니다.

응용: 제곱근, 역수, 케플러 방정식, 콜브룩 방정식

제곱근과 역수: 하드웨어 안의 뉴턴

f(x)=x2−af(x) = x^2 - a에 뉴턴 방법을 쓰면 xn+1=xn−xn2−a2xn=12(xn+axn)x_{n+1} = x_n - \dfrac{x_n^2 - a}{2x_n} = \dfrac12\left(x_n + \dfrac{a}{x_n}\right)입니다. "어림값과 aa/어림값의 평균"이라는 이 식을 흔히 바빌로니아 방법이라 부릅니다. 2\sqrt2를 x0=1x_0 = 1에서 구하면 1.5, 1.4166667, 1.4142157, 1.41421356237469, 1.4142135623730949로 오차가 8.6×10−2, 2.5×10−3, 2.1×10−6, 1.6×10−12, 2.2×10−168.6\times10^{-2},\ 2.5\times10^{-3},\ 2.1\times10^{-6},\ 1.6\times10^{-12},\ 2.2\times10^{-16}입니다. 다섯 번이면 배정밀도 끝입니다.

나눗셈도 뉴턴으로 합니다. 1/a1/a를 구하려고 f(x)=1/x−af(x) = 1/x - a를 고르면 f′=−1/x2f' = -1/x^2이고

xn+1=xn−1/xn−a−1/xn2=xn(2−axn)x_{n+1} = x_n - \frac{1/x_n - a}{-1/x_n^2} = x_n(2 - a x_n)
곱셈과 뺄셈만 쓴다. 1−axn+1=(1−axn)21 - ax_{n+1} = (1 - ax_n)^2이라 상대 오차가 매번 정확히 제곱된다. 0<x0<2/a0 \lt x_0 \lt 2/a이면 수렴한다.

a=7a = 7, x0=0.1x_0 = 0.1이면 1−axn1 - ax_n이 0.3, 0.09, 0.0081, 6.6×10−5, 4.3×10−90.3,\ 0.09,\ 0.0081,\ 6.6\times10^{-5},\ 4.3\times10^{-9}이고 다섯 번째에 1/71/7이 배정밀도로 나옵니다. 곱셈기는 있지만 나눗셈 회로가 느리거나 없는 하드웨어(GPU, DSP 등)가 표에서 읽은 어림값에 이런 반복을 몇 번 더해 역수와 역제곱근 1/a1/\sqrt a(반복 x(3−ax2)/2x(3 - ax^2)/2)을 만듭니다.

케플러 방정식: 행성은 어디에 있는가

이심률 ee인 타원 궤도에서 근일점 통과 후 시간 tt의 위치는 평균 근점 이각 M=2πt/TM = 2\pi t/T(시간에 비례)로부터 이심 근점 이각 EE를 구해 얻습니다. 둘을 잇는 식이 케플러 방정식(Kepler's equation)입니다.

M=E−esin⁡E,x=a(cos⁡E−e),y=a1−e2 sin⁡EM = E - e\sin E, \qquad x = a(\cos E - e),\quad y = a\sqrt{1 - e^2}\,\sin E
EE를 알면 태양(초점)을 원점으로 한 위치가 바로 나온다. 0≤e<10 \le e \lt 1이면 f(E)=E−esin⁡E−Mf(E) = E - e\sin E - M은 f′=1−ecos⁡E>0f' = 1 - e\cos E > 0이라 단조 증가, 근이 하나다.
예제 3.8 (케플러 방정식) M=1M = 1, e=0.5e = 0.5일 때 EE를 구하라.
  1. 고정점 반복 E=M+esin⁡EE = M + e\sin E(케플러 자신이 쓴 방식과 같은 꼴): g′(E)=ecos⁡Eg'(E) = e\cos E라 ∣g′∣≤e<1|g'| \le e \lt 1, 늘 수렴한다. E0=1E_0 = 1에서 1.4207355, 1.4943810, 1.4985409, 1.4986954, …로 ∣ΔE∣<10−15|\Delta E| \lt 10^{-15}까지 12번.
  2. 뉴턴 En+1=En−En−esin⁡En−M1−ecos⁡EnE_{n+1} = E_n - \dfrac{E_n - e\sin E_n - M}{1 - e\cos E_n}, E0=ME_0 = M: 1.5764694, 1.5002083, 1.4987017, 1.4987011335178(오차 7.8×10−2, 1.5×10−3, 5.9×10−7, 8.9×10−147.8\times10^{-2},\ 1.5\times10^{-3},\ 5.9\times10^{-7},\ 8.9\times10^{-14}). 답 E=1.498701133517848E = 1.498701133517848.
  3. 이심률이 1에 가까우면 사정이 달라진다. e=0.99e = 0.99, M=0.1M = 0.1에서 E0=ME_0 = M으로 뉴턴을 쓰면 f′(0.1)=1−0.99cos⁡0.1=0.015f'(0.1) = 1 - 0.99\cos 0.1 = 0.015로 평평해서 E1=6.71E_1 = 6.71, E2=−55.3E_2 = -55.3으로 튀고 21번 만에 겨우 E=0.8316604E = 0.8316604에 닿는다. E0=πE_0 = \pi에서 시작하면 3.1416, 1.6132, 1.1102, 0.8899, 0.8351, 0.8317로 8번이면 된다. 고정점 반복은 ∣g′∣≈e|g'| \approx e라 50번으로도 모자란다.
SIMULATOR

케플러 방정식: 궤도 위 행성의 위치를 뉴턴으로

궤도 (초점 = 태양), 보조원 위의 E
|f(Eₙ)| vs 반복 n
뉴턴 출발점 E₀
뉴턴고정점 E = M + e sin E보조원 · 균일 각 M
E—
뉴턴 반복 수—
고정점 반복 수—
태양 거리 r = a(1 − e cos E)—
해볼 것: ① ▶ 공전을 누르면 M이 일정하게 늘지만 행성은 근일점(오른쪽 끝) 근처에서 빠르고 원일점에서 느립니다. 케플러 제2법칙이고, 매 프레임 뉴턴 방법이 E를 풉니다. ② e = 0.99, M = 0.1로 두고 E₀ = M과 E₀ = π의 반복 수를 비교하세요. ③ 고정점 반복은 e가 클수록 느려집니다(점근 비율 e cos E). 모델: 장반경 a = 1, 멈춤 |f(E)| < 10⁻¹⁴ 또는 50번.

콜브룩 방정식: 배관의 마찰 계수

난류 배관 유동의 압력 손실은 다르시 마찰 계수 ff로 계산하고, 표준 공학 관계식인 콜브룩(Colebrook) 방정식은 ff에 대한 음함수입니다.

1f=−2log⁡10 ⁣(ε/D3.7+2.51Re f)\frac{1}{\sqrt f} = -2\log_{10}\!\left(\frac{\varepsilon/D}{3.7} + \frac{2.51}{\mathrm{Re}\,\sqrt f}\right)
ε/D\varepsilon/D는 상대 거칠기, Re\mathrm{Re}는 레이놀즈 수. y=1/fy = 1/\sqrt f로 두면 y=G(y)y = G(y) 꼴의 고정점 문제가 된다.
예제 3.9 (콜브룩 방정식의 고정점 반복) Re=105\mathrm{Re} = 10^5, ε/D=10−4\varepsilon/D = 10^{-4}일 때 ff를 구하라.
  1. y0=8y_0 = 8(f=0.0156f = 0.0156)에서 yn+1=G(yn)y_{n+1} = G(y_n): 7.2847895, 7.3560776, 7.3487036, 7.3494635, 7.3493852, 7.3493932.
  2. G′(y)=−2ln⁡10⋅2.51/Reε/(3.7D)+2.51y/Re=−0.103G'(y) = -\dfrac{2}{\ln 10}\cdot\dfrac{2.51/\mathrm{Re}}{\varepsilon/(3.7D) + 2.51y/\mathrm{Re}} = -0.103. 오차가 매번 약 10분의 1이 되며 부호를 바꾼다(근 둘레를 도는 거미줄). 여섯 번이면 f=0.0185139f = 0.0185139로 유효 숫자 6자리다.
  3. 명시적 근사식인 하알란(Haaland) 식 1/f=−1.8log⁡10[(ε/D/3.7)1.11+6.9/Re]1/\sqrt f = -1.8\log_{10}[(\varepsilon/D/3.7)^{1.11} + 6.9/\mathrm{Re}]은 f=0.018265f = 0.018265로 1.3% 차이다. 좋은 출발점으로 쓰면 반복 두세 번으로 충분하다.

이 도구가 쓰이는 곳

근 찾기는 그 자체로 쓰이기보다 더 큰 알고리즘 안에서 수없이 불립니다. 음적 ODE 방법은 매 걸음 비선형 방정식을, 최적화는 ∇f=0\nabla f = 0을, 고유값 계산은 특성 방정식의 근을 다른 길로 풉니다.

분야방정식흔히 쓰는 방법
궤도 역학케플러 방정식 M = E − e sin E뉴턴(좋은 출발점), 고차 뉴턴 변형
유체 공학콜브룩 방정식고정점 반복, 뉴턴, 명시적 근사식으로 출발
회로 시뮬레이션다이오드 I = Iₛ(e^(V/Vₜ) − 1)와 KCL감쇠·제한 뉴턴(4장)
금융채권 수익률(내부 수익률), 내재 변동성뉴턴, 브렌트
컴퓨터 산술√a, 1/a, 1/√a표 어림값 + 뉴턴 1~3번
음적 ODE 적분yₙ₊₁ − h f(yₙ₊₁) = yₙ뉴턴(야코비안 재사용)

핵심 정리

  1. 이분법은 부호만 보고 가둠 구간을 매번 정확히 반으로 줄인다. 오차 ≤(b0−a0)/2n+1\le (b_0 - a_0)/2^{n+1}이라 반복 수를 미리 안다. 느리지만(자릿수당 3.3번) 연속이고 부호가 바뀌면 반드시 수렴한다.
  2. 고정점 반복 xn+1=g(xn)x_{n+1} = g(x_n)은 오차에 매번 g′g'을 곱한다. ∣g′∣≤L<1|g'| \le L \lt 1인 축소 사상이면 유일한 고정점으로 수렴하고 ∣xn−r∣≤L1−L∣xn−xn−1∣|x_n - r| \le \frac{L}{1 - L}|x_n - x_{n-1}|. 같은 방정식도 고쳐 쓰는 방법에 따라 수렴·발산이 갈린다.
  3. 수렴 차수 pp는 ∣en+1∣≈C∣en∣p|e_{n+1}| \approx C|e_n|^p의 지수다. 이웃한 세 오차로 p≈log⁡(en+1/en)/log⁡(en/en−1)p \approx \log(e_{n+1}/e_n)/\log(e_n/e_{n-1})를 측정한다. g′(r)=⋯=g(p−1)(r)=0g'(r) = \cdots = g^{(p-1)}(r) = 0이면 고정점 반복의 차수는 pp다.
  4. 뉴턴 방법 xn+1=xn−f/f′x_{n+1} = x_n - f/f'은 단순근에서 2차 수렴, en+1≈f′′2f′en2e_{n+1} \approx \frac{f''}{2f'}e_n^2. 맞는 자릿수가 매번 두 배가 된다. mm중근에서는 비율 (m−1)/m(m-1)/m의 1차로 떨어지고, x−mf/f′x - mf/f'이 2차를 되찾는다.
  5. 할선법은 도함수 대신 차분 몫을 써서 차수 1.6181.618(p2=p+1p^2 = p + 1). 단계당 계산이 하나라 효율 지수는 뉴턴(1.414)보다 높다.
  6. 가위치법은 근을 가두지만 한 끝점이 묶여 선형으로 느려진다. 일리노이 수정은 묶인 끝의 함숫값을 반으로 줄여 이를 푼다. 브렌트 방법은 역2차 보간·할선·이분을 조합해 안전과 초선형 속도를 함께 얻는 실무 표준이다.
  7. 멈춤 조건: 오차 ≈ 잔차/|f′|. 걸음 크기(절대 + 상대 허용 오차)와 가둠 구간 길이를 함께 쓰고, 반올림 바닥이 만드는 불확실 구간보다 작은 허용 오차는 의미가 없다. 반복 수 상한을 늘 둔다.
  8. 뉴턴 방법은 순환·발산·평평한 곳·미분 불가능한 근에서 실패한다. 가둠 구간 안전장치, 감쇠, 좋은 출발점(케플러의 E₀ = π)이 처방이다.

확인 퀴즈

Q1. 길이 1인 가둠 구간에서 이분법으로 구간 길이를 10−610^{-6} 이하로 줄이려면 적어도 몇 번 나눠야 하는가?

n번 나누면 길이가 2⁻ⁿ. 2⁻ⁿ ≤ 10⁻⁶ ⇔ n ≥ 6 log₂10 = 19.93이므로 20번. 자릿수 하나에 약 3.3번이 든다. 함수 모양과 무관하다는 것이 이분법의 장점이다.

Q2. x3−2x−5=0x^3 - 2x - 5 = 0을 고정점 반복으로 풀 때 근 r≈2.0946r \approx 2.0946 근처에서 수렴하는 것은?

근에서 |g′(r)|을 보면 각각 0.152, 6.58, 3.68이다. 1보다 작은 첫 번째만 축소 사상이라 수렴하고, 오차가 매번 약 0.152배가 된다.

Q3. 뉴턴 방법에서 ∣f′′(r)/(2f′(r))∣=0.5|f''(r)/(2f'(r))| = 0.5이고 현재 오차가 10−310^{-3}이다. 다음 단계의 오차는 대략?

2차 수렴 |eₙ₊₁| ≈ C|eₙ|² = 0.5 × 10⁻⁶ = 5×10⁻⁷. 그다음은 0.5 × (5×10⁻⁷)² ≈ 1.25×10⁻¹³이다.

Q4. 삼중근(m=3m = 3)에서 보통 뉴턴 방법의 오차는 매 단계 대략 몇 배가 되는가?

m중근에서 g′(r) = 1 − 1/m = (m − 1)/m. m = 3이면 2/3배씩 줄어드는 선형 수렴이다. x − 3f/f′로 고치면 2차 수렴을 되찾는다.

Q5. 할선법의 수렴 차수와, 도함수 계산 비용이 함수 계산과 같을 때 뉴턴 방법과 비교한 결론으로 옳은 것은?

eₙ₊₁ ≈ C eₙ eₙ₋₁에서 p² = p + 1, p = 1.618. 효율 지수는 할선 1.618, 뉴턴 2^(1/2) = 1.414라 계산 횟수로 따지면 할선법이 낫다.

Q6. 가위치법이 x10−1=0x^{10} - 1 = 0을 [0,1.3][0, 1.3]에서 이분법보다도 느리게 푸는 이유는?

할선의 근이 늘 같은 쪽에 떨어져 b = 1.3이 끝까지 남는다. 10⁻¹⁰까지 95번이 걸린다. 일리노이 수정은 묶인 끝의 f값을 반으로 줄여 14번으로 줄인다.

Q7. 근에서 ∣f′(r)∣=10−6|f'(r)| = 10^{-6}인 함수에서 ∣f(x)∣=10−12|f(x)| = 10^{-12}를 얻었다. 근의 오차는 대략?

근 근처에서 f(x) ≈ f′(r)(x − r)이므로 |x − r| ≈ |f(x)|/|f′(r)| = 10⁻¹²/10⁻⁶ = 10⁻⁶. 평평한 함수에서는 잔차가 작아도 오차가 크다.

Q8. 바빌로니아 방법 xn+1=(xn+9/xn)/2x_{n+1} = (x_n + 9/x_n)/2로 9\sqrt9를 x0=1x_0 = 1에서 구할 때 x2x_2는?

x₁ = (1 + 9)/2 = 5, x₂ = (5 + 9/5)/2 = (5 + 1.8)/2 = 3.4. 다음은 (3.4 + 2.647)/2 = 3.0235, 그다음 3.00009로 2차 수렴한다.