Chapter 11

미분방정식의 수치 해법

ODEBook 5장에서 오일러·호인·RK4, 내장 쌍의 걸음 조절, 안정성 영역, 음적 오일러, 심플렉틱 오일러를 만났습니다. 이 장은 그 도구들을 설계하고 검증하는 쪽에서 다시 봅니다. 왜 "일관성 + 안정성 = 수렴"인지, 부처 표 한 장으로 룽게–쿠타 방법을 정의하고 차수 조건을 확인하는 법, 지난 걸음의 기울기를 재활용하는 다단계 방법(애덤스·BDF), 다단계 방법의 안정성 영역과 달퀴스트 장벽, 강성 문제에서 매 걸음 뉴턴 반복을 돌리는 실제 구현, 수백만 걸음 동안 에너지를 지키는 스퇴르머–베를레, 그리고 끝 조건이 주어진 경계값 문제를 다룹니다. 이 장의 공통 언어는 차수 p, 안정성 영역, 그리고 f 계산 횟수입니다.

이 수식이 없었다면회로 시뮬레이터와 화학 반응 모델

칩 설계자는 실리콘을 굽기 전에 수만 개의 트랜지스터가 얽힌 회로의 과도 응답을 시뮬레이션합니다. 연소 엔진이나 대기 화학 모델에는 나노초 단위로 끝나는 반응과 몇 시간에 걸친 반응이 한 방정식 안에 섞여 있습니다. 이런 방정식은 RK4로 돌리면 걸음 폭이 가장 빠른 시상수에 묶여 사실상 끝나지 않습니다. 해결책은 1950년대에 커티스(C. F. Curtiss)와 허시펠더(J. O. Hirschfelder)가 화학 반응 계산에서 제안한 후방 차분 공식(BDF)이었고, 기어(C. W. Gear)가 1970년대 초에 차수와 걸음을 함께 바꾸는 실용 프로그램으로 만들었습니다. 오늘날 SPICE 계열 회로 시뮬레이터, MATLAB의 ode15s, SciPy의 BDF가 모두 이 계보에 있습니다.

y′ = f(t, y), 강성→음적 공식 + 뉴턴 반복→BDF: Σ αⱼ yₙ₊ⱼ = h β f(yₙ₊ₖ)→회로·반응·격자 PDE

일관성 + 안정성 = 수렴

3차 정확한 공식이 왜 터지는가

두 걸음짜리 명시적 공식 yn+2+4yn+1−5yn=h(4fn+1+2fn)y_{n+2} + 4y_{n+1} - 5y_n = h(4f_{n+1} + 2f_n)을 생각해 봅시다. 테일러 전개로 확인하면 국소 절단 오차가 O(h4)O(h^4), 즉 3차 정확합니다. 애덤스–배시포스 2단계(2차)보다 한 차수 높고 계산량은 같습니다. 그런데 y′=−yy' = -y에 h=0.1h = 0.1로 돌리면 y(1)y(1)의 오차가 7, h=0.05h = 0.05로 줄이면 4.7×1064.7\times10^{6}입니다. 걸음을 줄일수록 더 틀립니다. 무엇이 빠졌을까요?

ODEBook 5장의 정리 5.3은 오일러 방법에 대해 "국소 오차 O(h2)O(h^2)가 쌓여 전역 오차 O(h)O(h)"라는 것을 보였습니다. 그 증명에서 몰래 쓴 성질이 하나 있습니다. 앞선 오차가 다음 걸음에서 많아야 1+hL1 + hL배로 커진다는 것, 곧 오차가 걸음마다 폭발하지 않는다는 성질입니다. 수렴하려면 이것과 "한 걸음이 맞다"는 성질이 둘 다 필요합니다.

정의 11.1 (일관성·차수, 일단계 방법) 일단계 방법을 yn+1=yn+h Φ(tn,yn;h)y_{n+1} = y_n + h\,\Phi(t_n, y_n; h)로 쓰자(Φ\Phi를 증분 함수(increment function)라 한다). 참 해 y(t)y(t)를 대입했을 때 남는 양
τn+1=y(tn+1)−y(tn)h−Φ(tn,y(tn);h)\tau_{n+1} = \frac{y(t_{n+1}) - y(t_n)}{h} - \Phi(t_n, y(t_n); h)
를 (단위 걸음당) 국소 절단 오차라 한다. h→0h \to 0에서 τ→0\tau \to 0이면 일관성(consistency)이 있다고 하고, τ=O(hp)\tau = O(h^p)이면 p차라 한다. 일관성은 Φ(t,y;0)=f(t,y)\Phi(t, y; 0) = f(t, y)와 같다.
정리 11.2 (일단계 방법의 수렴) Φ\Phi가 yy에 대해 립시츠 상수 LΦL_\Phi를 가지고 방법이 p차로 일관적이면, 유한 구간 [t0,T][t_0, T]에서 전역 오차는
max⁡n∣y(tn)−yn∣≤eLΦ(T−t0)−1LΦ max⁡n∣τn∣=O(hp).\max_n |y(t_n) - y_n| \le \frac{e^{L_\Phi (T - t_0)} - 1}{L_\Phi}\,\max_n|\tau_n| = O(h^p).

증명의 핵심. En+1=En+h(Φ(y(tn))−Φ(yn))+hτn+1E_{n+1} = E_n + h\bigl(\Phi(y(t_n)) - \Phi(y_n)\bigr) + h\tau_{n+1}이므로 ∣En+1∣≤(1+hLΦ)∣En∣+h∣τ∣|E_{n+1}| \le (1 + hL_\Phi)|E_n| + h|\tau|. 오일러 때와 똑같이 등비급수로 더하면 된다. 룽게–쿠타 방법의 Φ\Phi는 ff를 유한 번 합성한 것이라 ff가 립시츠이면 Φ\Phi도 립시츠다. 따라서 일단계 방법은 일관적이기만 하면 언제나 수렴한다. ∎

다단계 방법은 사정이 다릅니다. kk단계 선형 다단계 방법(linear multistep method)은

∑j=0kαj yn+j=h∑j=0kβj fn+j,fn+j=f(tn+j,yn+j),αk=1\sum_{j=0}^{k} \alpha_j\, y_{n+j} = h \sum_{j=0}^{k} \beta_j\, f_{n+j}, \qquad f_{n+j} = f(t_{n+j}, y_{n+j}),\quad \alpha_k = 1
βk=0\beta_k = 0이면 명시적, βk≠0\beta_k \ne 0이면 음적이다. 특성 다항식 ρ(ζ)=∑αjζj\rho(\zeta) = \sum \alpha_j\zeta^j, σ(ζ)=∑βjζj\sigma(\zeta) = \sum\beta_j\zeta^j로 방법을 요약한다.

꼴이고, 다음 값이 kk개의 이전 값으로 정해지는 차분 방정식입니다. h=0h = 0으로 두면 ∑αjyn+j=0\sum\alpha_j y_{n+j} = 0, 해는 ρ\rho의 근 ζi\zeta_i에 대해 ζin\zeta_i^n 꼴입니다. 참 해에 해당하는 근은 ζ=1\zeta = 1(일관성 조건 ρ(1)=0\rho(1) = 0)이고 나머지는 계산이 만들어 낸 기생 해입니다. 반올림 오차나 출발값 오차가 이 기생 해를 조금이라도 깨우면, ∣ζi∣>1|\zeta_i| > 1일 때 그것이 ∣ζi∣n|\zeta_i|^n으로 자랍니다. n=(T−t0)/hn = (T - t_0)/h이므로 걸음을 줄일수록 더 많이 자랍니다.

정의 11.3 (근 조건과 영 안정성) ρ(ζ)\rho(\zeta)의 모든 근이 ∣ζ∣≤1|\zeta| \le 1이고, ∣ζ∣=1|\zeta| = 1인 근은 모두 단근이면 방법이 근 조건(root condition)을 만족한다고 하고, 이런 방법을 영 안정(zero-stable)이라 한다. 일단계 방법은 ρ(ζ)=ζ−1\rho(\zeta) = \zeta - 1이라 언제나 영 안정이다.
정리 11.4 (달퀴스트 동등성 정리) 출발값 오차가 h→0h \to 0에서 0으로 가는 선형 다단계 방법이 수렴할 필요충분조건은 일관성과 영 안정성이다. 또한 영 안정인 kk단계 방법의 차수는 kk가 홀수면 k+1k + 1, 짝수면 k+2k + 2를 넘지 못하고, 명시적이면 kk를 넘지 못한다(달퀴스트 제1 장벽).

이 "일관성 + 안정성 ⇔ 수렴"은 수치해석 전체를 꿰는 원리입니다. 16장에서 편미분방정식의 격자 방법에 대해 같은 모양의 랙스 동등성 정리를 다시 만납니다(16장). 문제 상자의 공식은 ρ(ζ)=ζ2+4ζ−5=(ζ−1)(ζ+5)\rho(\zeta) = \zeta^2 + 4\zeta - 5 = (\zeta - 1)(\zeta + 5)이라 기생 근 −5-5가 있습니다. 2단계 명시적 공식이 3차라는 것 자체가 제1 장벽(명시적이면 차수 ≤ 2)을 넘었으니, 영 안정일 수가 없었던 것입니다.

예제 11.1 (기생 근이 깨어나는 속도) y′=−yy' = -y, y(0)=1y(0) = 1, h=0.1h = 0.1, 출발값 y1=e−0.1y_1 = e^{-0.1}(정확한 값)으로 문제 상자의 공식을 돌려라.
  1. f=−yf = -y를 넣어 정리하면 yn+2=−4.4 yn+1+4.8 yny_{n+2} = -4.4\,y_{n+1} + 4.8\,y_n.
  2. y2=−4.4(0.904837)+4.8(1)=0.818715y_2 = -4.4(0.904837) + 4.8(1) = 0.818715. 참값 e−0.2=0.818731e^{-0.2} = 0.818731, 오차 −1.5×10−5-1.5\times10^{-5}. 3차 공식답게 아주 정확하다.
  3. 그런데 오차가 5.4×10−5, −3.2×10−4, 1.7×10−3, −8.9×10−3, 4.7×10−25.4\times10^{-5},\ -3.2\times10^{-4},\ 1.7\times10^{-3},\ -8.9\times10^{-3},\ 4.7\times10^{-2}로 부호를 바꾸며 걸음마다 약 5.3배씩 커진다. hλ=−0.1h\lambda = -0.1에서 기생 근은 −5-5 근처의 −5.3-5.3이다.
  4. t=1t = 1까지 10걸음이면 오차 약 7, h=0.05h = 0.05면 20걸음이라 4.7×1064.7\times10^{6}, h=0.025h = 0.025면 2.9×10192.9\times10^{19}. 같은 조건에서 애덤스–배시포스 2단계의 오차는 1.46×10−3, 3.75×10−4, 9.48×10−51.46\times10^{-3},\ 3.75\times10^{-4},\ 9.48\times10^{-5}으로 h2h^2에 비례해 준다.
SIMULATOR

영 안정성: 걸음을 줄일수록 터지는 공식

y′ = −y의 수치 해 (점) vs 참 해 e^(−t)
ρ(ζ)의 근과 단위원
방법
ρ(ζ)의 근—
걸음 수 N—
|오차| at t = 3—
해볼 것: ① '불안정 3차'에서 h를 0.2 → 0.1 → 0.05로 줄이며 오차가 오히려 폭발하는 것을 보세요. 근 하나가 단위원 밖(−5)에 있습니다. ② 'AB2'는 기생 근이 0이라 h를 줄이면 오차가 4분의 1씩 줄어듭니다. ③ '도약' yn+2 = yn + 2h fn+1은 근이 ±1로 영 안정이지만, λ < 0에서는 기생 근이 −(1 + h)쯤이라 오래 돌리면 진동이 서서히 자랍니다(약한 불안정). 모델: 출발값 y₀ = 1, y₁ = e−h(1 + 교란), t ∈ [0, 3].

룽게–쿠타 계열과 부처 표

기울기 계산 네 번으로 4차, 그다음은?

RK4는 기울기를 네 번 재서 4차를 얻습니다. 그럼 다섯 번 재면 5차가 될까요? 그렇지 않습니다. 5차를 얻으려면 최소 여섯 번이 필요합니다. 계수가 수십 개인 공식을 설계하고 검증하려면 공식을 적는 표준 형식과 차수를 확인하는 체계적인 조건이 필요합니다.

ss단 명시적 룽게–쿠타 방법은 단계 기울기 kik_i를 앞선 기울기의 조합으로 차례로 계산하고, 마지막에 가중 평균으로 걷습니다.

정의 11.5 (룽게–쿠타 방법과 부처 표)
ki=f(tn+cih, yn+h∑j=1i−1aijkj),i=1,…,s,yn+1=yn+h∑i=1sbiki.k_i = f\Bigl(t_n + c_i h,\ y_n + h\sum_{j=1}^{i-1} a_{ij}k_j\Bigr),\quad i = 1, \dots, s, \qquad y_{n+1} = y_n + h\sum_{i=1}^{s} b_i k_i.
계수를 cAbT\begin{array}{c|c} \mathbf c & A \\ \hline & \mathbf b^{\mathsf T}\end{array} 꼴의 표로 적은 것을 부처 표(Butcher tableau)라 한다. 명시적 방법은 AA가 순하삼각(대각 포함 위쪽이 0)이다. 보통 ci=∑jaijc_i = \sum_j a_{ij}로 둔다(행 합 조건).
오일러 001 중점법 0½ ½ 01 고전 RK4 0½½1 ½ 0½ 001 ⅙⅓⅓⅙ 왼쪽 열: cᵢ (언제 재나) 가운데: aᵢⱼ (어디서 재나) 아래: bᵢ (가중치)
그림 11-1. 부처 표. ii행은 kik_i를 잴 시각 tn+ciht_n + c_ih와, 그 점의 yy를 만들 때 앞선 kjk_j에 곱할 계수 aija_{ij}를 적는다. 맨 아래 행은 마지막 가중 평균의 가중치다.

차수 조건은 방법의 한 걸음과 참 해의 테일러 전개를 hh의 거듭제곱별로 맞춘 것입니다. 스칼라 자율 방정식만 보면 조건이 실제보다 적게 보이므로, 부처는 연립 방정식의 전개에 나타나는 항을 뿌리 있는 나무(rooted tree)로 분류했습니다. 차수 qq의 나무 하나가 조건 하나이고, 나무의 개수는 q=1,2,3,4,5q = 1, 2, 3, 4, 5에서 1, 1, 2, 4, 9개입니다.

정리 11.6 (4차까지의 차수 조건) ci=∑jaijc_i = \sum_j a_{ij}일 때 명시적 룽게–쿠타 방법이 p차일 필요충분조건은 아래 표에서 차수 ≤p\le p인 조건이 모두 성립하는 것이다.
차수조건
1∑bi=1\sum b_i = 1
2∑bici=12\sum b_ic_i = \tfrac12
3∑bici2=13,∑biaijcj=16\sum b_ic_i^2 = \tfrac13,\quad \sum b_ia_{ij}c_j = \tfrac16
4∑bici3=14,  ∑biciaijcj=18,  ∑biaijcj2=112,  ∑biaijajkck=124\sum b_ic_i^3 = \tfrac14,\ \ \sum b_ic_ia_{ij}c_j = \tfrac18,\ \ \sum b_ia_{ij}c_j^2 = \tfrac1{12},\ \ \sum b_ia_{ij}a_{jk}c_k = \tfrac1{24}
누적 조건 수는 p = 1, …, 8에서 1, 2, 4, 8, 17, 37, 85, 200개로 빠르게 늘어난다. 또한 부처 장벽에 따라 명시적 방법에서 s=ps = p는 p≤4p \le 4까지만 가능하고, 5차는 6단, 6차는 7단, 7차는 9단이 필요하다.
예제 11.2 (고전 RK4가 4차임을 표로 확인) b=(16,13,13,16)\mathbf b = (\tfrac16, \tfrac13, \tfrac13, \tfrac16), c=(0,12,12,1)\mathbf c = (0, \tfrac12, \tfrac12, 1), a21=a32=12a_{21} = a_{32} = \tfrac12, a43=1a_{43} = 1.
  1. ∑bi=16+13+13+16=1\sum b_i = \tfrac16 + \tfrac13 + \tfrac13 + \tfrac16 = 1. ∑bici=13⋅12+13⋅12+16=12\sum b_ic_i = \tfrac13\cdot\tfrac12 + \tfrac13\cdot\tfrac12 + \tfrac16 = \tfrac12.
  2. ∑bici2=13⋅14⋅2+16=13\sum b_ic_i^2 = \tfrac13\cdot\tfrac14\cdot 2 + \tfrac16 = \tfrac13. ∑biaijcj\sum b_ia_{ij}c_j: a32c2=14a_{32}c_2 = \tfrac14, a43c3=12a_{43}c_3 = \tfrac12이므로 13⋅14+16⋅12=16\tfrac13\cdot\tfrac14 + \tfrac16\cdot\tfrac12 = \tfrac16.
  3. ∑bici3=23⋅18+16=14\sum b_ic_i^3 = \tfrac23\cdot\tfrac18 + \tfrac16 = \tfrac14. ∑biciaijcj=13⋅12⋅14+16⋅1⋅12=18\sum b_ic_ia_{ij}c_j = \tfrac13\cdot\tfrac12\cdot\tfrac14 + \tfrac16\cdot 1\cdot\tfrac12 = \tfrac18.
  4. ∑biaijcj2=13⋅12⋅14+16⋅14=112\sum b_ia_{ij}c_j^2 = \tfrac13\cdot\tfrac12\cdot\tfrac14 + \tfrac16\cdot\tfrac14 = \tfrac1{12}. ∑biaijajkck\sum b_ia_{ij}a_{jk}c_k: 유일한 사슬 4→3→24 \to 3 \to 2가 16⋅1⋅12⋅12=124\tfrac16\cdot 1\cdot\tfrac12\cdot\tfrac12 = \tfrac1{24}.
  5. 여덟 조건이 모두 성립하므로 4차다. 5차 조건(9개 중 하나 ∑bici4=15\sum b_ic_i^4 = \tfrac15)은 23⋅116+16=524≠15\tfrac23\cdot\tfrac1{16} + \tfrac16 = \tfrac5{24} \ne \tfrac15라 깨진다.
예제 11.3 (쿠타 3차 한 걸음) 쿠타의 3차 방법 k1=f(t,y)k_1 = f(t, y), k2=f(t+h2,y+h2k1)k_2 = f(t + \tfrac h2, y + \tfrac h2k_1), k3=f(t+h,y−hk1+2hk2)k_3 = f(t + h, y - hk_1 + 2hk_2), yn+1=yn+h6(k1+4k2+k3)y_{n+1} = y_n + \tfrac h6(k_1 + 4k_2 + k_3)로 y′=y2y' = y^2, y(0)=1y(0) = 1, h=0.1h = 0.1을 한 걸음 계산하라(참 해 1/(1−t)1/(1 - t)).
  1. k1=1k_1 = 1, k2=(1.05)2=1.1025k_2 = (1.05)^2 = 1.1025, k3=(1−0.1+0.2205)2=1.12052=1.255520k_3 = (1 - 0.1 + 0.2205)^2 = 1.1205^2 = 1.255520.
  2. y1=1+0.16(1+4.41+1.255520)=1.1110920y_1 = 1 + \tfrac{0.1}{6}(1 + 4.41 + 1.255520) = 1.1110920. 참값 1.11111111.1111111, 오차 −1.9×10−5-1.9\times10^{-5}.
  3. 비교: 오일러 오차 −1.1×10−2-1.1\times10^{-2}, RK4 오차 −6.2×10−7-6.2\times10^{-7}. y′=f(t)y' = f(t)이면 이 방법도 심프슨 공식이 된다(b\mathbf b가 16,46,16\tfrac16, \tfrac46, \tfrac16).

아래 시뮬레이터에서 부처 표의 칸을 직접 고쳐 보세요. 분수(1/6)로 입력할 수 있고, 차수 조건이 하나씩 켜지고 꺼집니다. 그와 동시에 y′=ycos⁡ty' = y\cos t를 여러 걸음 폭으로 풀어 로그–로그 기울기를 측정합니다. 조건으로 예측한 차수와 측정한 기울기가 일치하는지가 핵심입니다.

SIMULATOR

부처 표 → 방법 실행: 차수 조건과 측정 기울기

부처 표: 왼쪽 열 c, 가운데 A, 아래 b
    조건으로 본 차수—
    측정한 기울기—
    오차 (h = 1/16)—
    해볼 것: ① RK4에서 b₂를 1/3에서 0.3으로 바꾸면 ∑bᵢ = 1이 깨져 기울기가 0, 즉 수렴하지 않습니다. ② '버그' 프리셋은 c₂ = 0인데 a₂₁ = 1/2인 경우로, 비자율 방정식에서 차수가 1로 떨어집니다(행 합 조건 위반). ③ 3/8 규칙과 RK4는 다른 표인데 둘 다 기울기 4입니다. 모델: y′ = y cos t, y(0) = 1, t ∈ [0, 3], h = 2−1 … 2−9. 기울기는 오차가 10−12보다 큰 점으로 최소제곱 맞춤. 시각 cᵢ는 행 합에서 자동으로 계산하지 않고 왼쪽 열에 적힌 값을 그대로 씁니다(그래서 버그를 흉내 낼 수 있습니다).

    임베디드 룽게–쿠타와 오차 제어

    사용자는 h가 아니라 정확도를 말하고 싶다

    반데르폴 진동자 y′′−μ(1−y2)y′+y=0y'' - \mu(1 - y^2)y' + y = 0은 μ=5\mu = 5에서 천천히 기어가다 순식간에 뒤집히는 이완 진동을 합니다. 뒤집히는 구간에 맞춘 고정 hh는 나머지 구간에서 낭비이고, 기어가는 구간에 맞춘 hh는 뒤집히는 곳에서 틀립니다. 라이브러리는 rtol=1e-6 하나만 받고 나머지를 알아서 합니다. 그 "알아서"의 내부를 구현 수준에서 봅시다.

    ODEBook 5장 6절은 내장 쌍의 원리를 소개했습니다. 같은 단계 기울기에 두 벌의 가중치 b\mathbf b(p차)와 b^\hat{\mathbf b}(p^\hat p차)를 주면 추가 비용 없이 두 근사의 차이 e=h∑(bi−b^i)ki\mathbf{e} = h\sum(b_i - \hat b_i)k_i가 낮은 쪽의 국소 오차 추정이 됩니다. 실제 구현에는 세 가지 결정이 더 들어갑니다.

    1. 어느 쪽으로 걸을까. 추정한 것은 낮은 차수 쪽 오차지만, 채택된 걸음은 높은 차수 쪽 값으로 진행합니다. 이것을 국소 외삽(local extrapolation)이라 합니다. 도르만드–프린스 5(4)는 5차로, 보가키–샴핀 3(2)는 3차로 걷습니다.
    2. 오차를 무엇과 비교할까. 성분마다 크기가 다르므로 척도 sci=atol+rtol⋅max⁡(∣yi∣,∣yn+1,i∣)\mathrm{sc}_i = \mathrm{atol} + \mathrm{rtol}\cdot\max(|y_i|, |y_{n+1,i}|)로 나눈 노름 err=max⁡i∣ei∣/sci\mathrm{err} = \max_i |e_i| / \mathrm{sc}_i(또는 RMS)를 쓰고, err≤1\mathrm{err} \le 1이면 채택합니다.
    3. 다음 h는. 국소 오차가 Chq+1Ch^{q+1}(q=min⁡(p,p^)q = \min(p, \hat p))에 비례하므로 hnew=h⋅min⁡(fmax⁡, max⁡(fmin⁡, 0.9 err−1/(q+1)))h_{\text{new}} = h\cdot\min\bigl(f_{\max},\ \max(f_{\min},\ 0.9\,\mathrm{err}^{-1/(q+1)})\bigr). 0.9는 안전 계수, fmin⁡=0.2f_{\min} = 0.2, fmax⁡=5f_{\max} = 5는 한 번에 너무 크게 바뀌지 않게 하는 제한입니다.
    function adaptive_rk(f, t0, y0, T, rtol, atol, tableau)
      t ← t0;  y ← y0;  h ← 초기 추정        // 예: 0.01·|y0| / |f(t0, y0)|
      while t < T
        h ← min(h, T − t)
        k[1..s] ← 단계 기울기 (부처 표 A, c)
        y_hi ← y + h·Σ bᵢ kᵢ                  // 높은 차수: 채택되면 이 값으로 진행
        e    ← h·Σ (bᵢ − b̂ᵢ) kᵢ               // 오차 추정 (추가 f 계산 없음)
        err  ← max over i of |eᵢ| / (atol + rtol·max(|yᵢ|, |y_hiᵢ|))
        if err ≤ 1 then  t ← t + h;  y ← y_hi    // 채택
        end if                                // 아니면 버리고 같은 t에서 다시
        h ← h · min(5, max(0.2, 0.9 · err^(−1/(q+1))))
      end while
    정의 11.7 (허용 오차 비례성) 국소 오차를 걸음마다 tol\mathrm{tol} 이하로 맞추는 제어는 전역 오차를 직접 보장하지 않는다. 그러나 매끄러운 문제에서 전역 오차가 대략 tol\mathrm{tol}에 비례하면(tol을 10배 줄이면 전역 오차도 약 10배 준다) 그 구현이 허용 오차 비례성(tolerance proportionality)을 가진다고 한다. 이때 걸음 수는 tol−1/(q+1)\mathrm{tol}^{-1/(q+1)}에 비례해 늘어나므로 차수가 높은 쌍일수록 엄격한 tol에서 유리하다.
    예제 11.4 (보가키–샴핀 3(2) 한 걸음과 다음 h) y′=−2tyy' = -2ty, y(0)=1y(0) = 1, h=0.5h = 0.5. 표: c=(0,12,34,1)c = (0, \tfrac12, \tfrac34, 1), a21=12a_{21} = \tfrac12, a32=34a_{32} = \tfrac34, 3차 가중치 (29,13,49,0)(\tfrac29, \tfrac13, \tfrac49, 0), 2차 가중치 (724,14,13,18)(\tfrac7{24}, \tfrac14, \tfrac13, \tfrac18). k4k_4는 3차 결과에서 잰 기울기다.
    1. k1=0k_1 = 0, k2=f(0.25,1)=−0.5k_2 = f(0.25, 1) = -0.5, k3=f(0.375, 1+0.375(−0.5))=−0.75⋅0.8125=−0.609375k_3 = f(0.375,\ 1 + 0.375(-0.5)) = -0.75\cdot 0.8125 = -0.609375.
    2. 3차: y3=1+0.5(13(−0.5)+49(−0.609375))=0.781250y_3 = 1 + 0.5(\tfrac13(-0.5) + \tfrac49(-0.609375)) = 0.781250. k4=f(0.5,0.78125)=−0.78125k_4 = f(0.5, 0.78125) = -0.78125.
    3. 2차: y2=1+0.5(14(−0.5)+13(−0.609375)+18(−0.78125))=0.787109y_2 = 1 + 0.5(\tfrac14(-0.5) + \tfrac13(-0.609375) + \tfrac18(-0.78125)) = 0.787109.
    4. 추정 ∣y3−y2∣=5.86×10−3|y_3 - y_2| = 5.86\times10^{-3}. 참값 e−0.25=0.778801e^{-0.25} = 0.778801이므로 실제 오차는 3차 2.4×10−32.4\times10^{-3}, 2차 8.3×10−38.3\times10^{-3}. 추정값은 2차 쪽 오차의 크기를 제대로 잡는다.
    5. tol=10−3\mathrm{tol} = 10^{-3}(절대)이면 err=5.86>1\mathrm{err} = 5.86 > 1: 버린다. 다음 시도 h=0.9⋅0.5⋅(10−3/5.86×10−3)1/3=0.250h = 0.9\cdot 0.5\cdot(10^{-3}/5.86\times10^{-3})^{1/3} = 0.250. tol=10−2\mathrm{tol} = 10^{-2}이면 채택하고 다음 h=0.538h = 0.538.
    6. 이 쌍의 k4k_4는 다음 걸음의 k1k_1과 같다(FSAL: first same as last). 그래서 실제 비용은 걸음당 3회다.

    시뮬레이터는 세 쌍(호인–오일러 2(1), 보가키–샴핀 3(2), 도르만드–프린스 5(4))을 같은 문제에 돌립니다. 아래쪽 그래프는 tol을 10−310^{-3}에서 10−810^{-8}까지 바꾸며 얻은 전역 오차 대 f 계산 횟수, 이른바 작업–정밀도 그림입니다. 반데르폴(μ=5\mu = 5, t∈[0,20]t \in [0, 20])에서 tol = 10−610^{-6}이면 f 계산 횟수가 호인–오일러 36,944회, 보가키–샴핀 4,308회, 도르만드–프린스 1,960회이고(FSAL 절약은 세지 않음), 전역 오차는 각각 9.1×10−79.1\times10^{-7}, 2.9×10−62.9\times10^{-6}, 3.1×10−73.1\times10^{-7}입니다.

    SIMULATOR

    적응 간격 오차 제어: 세 임베디드 쌍의 걸음과 작업–정밀도

    y₁(t)과 채택된 걸음 (× = 버린 시도)
    걸음 폭 h(t), 로그 눈금
    작업–정밀도: 전역 오차 vs f 계산 횟수
    임베디드 쌍
    HE 2(1)BS 3(2)DP 5(4)기준 해
    채택 / 버림—
    f 계산 횟수—
    끝점 전역 오차—
    최소 h · 최대 h—
    해볼 것: ① 반데르폴에서 h(t)가 뒤집히는 순간마다 깊게 꺼지는 것을 보세요. ② 작업–정밀도 그림에서 tol이 작아질수록 DP 5(4)의 선이 가장 아래·왼쪽에 놓입니다. 느슨한 tol(10−3)에서는 BS 3(2)도 경쟁력이 있습니다. ③ '약한 강성'에서는 해가 매끄러운데도 h가 안정 경계(hλ ≈ −2.51(BS), −3.31(DP), −2(HE)) 근처에서 오르내리고 버린 걸음이 많습니다. 정확도가 아니라 안정성이 걸음을 정하는 강성의 신호입니다(5절). 모델: 척도 tol·(1 + |y|), 처음 h = 0.01, 기준 해는 DP 5(4), tol = 10−13.

    다단계 방법: 애덤스–배시포스, 애덤스–몰턴, 예측–수정

    이미 잰 기울기를 버리지 말자

    RK4는 한 걸음에 기울기를 네 번 재고, 다음 걸음에서는 그것을 모두 버립니다. ff 한 번 계산이 유체 시뮬레이션 한 판처럼 비싸다면 아깝습니다. 지난 몇 걸음의 기울기 fn,fn−1,…f_{n}, f_{n-1}, \dots는 이미 손에 있습니다. 그것으로 다음 걸음을 4차로 걸을 수 있을까요?

    y(tn+1)=y(tn)+∫tntn+1f(t,y(t)) dty(t_{n+1}) = y(t_n) + \int_{t_n}^{t_{n+1}} f(t, y(t))\,dt에서 피적분 함수를 이미 아는 점들을 지나는 보간 다항식(5장)으로 바꾸고 정확히 적분합니다. 보간점으로 tn,tn−1,…,tn−k+1t_n, t_{n-1}, \dots, t_{n-k+1}을 쓰면 구간 밖으로 외삽하는 명시적 공식, tn+1t_{n+1}까지 넣으면 음적 공식이 됩니다.

    tₙ₋₃tₙ₋₂tₙ₋₁tₙtₙ₊₁ 이미 계산한 fₙ₋ⱼ ∫ p(t) dt AB4 f 계산: 걸음당 1회 차수 4 RK4 f 계산: 걸음당 4회 차수 4
    그림 11-2. 애덤스–배시포스 4단계. 과거 네 점의 기울기를 지나는 3차 다항식 p(t)p(t)를 다음 구간 [tn,tn+1][t_n, t_{n+1}]까지 연장해 적분한다(색칠한 넓이). 새로 계산할 것은 fn+1f_{n+1} 하나뿐이다.
    정의 11.8 (애덤스 방법) kk단계 애덤스–배시포스(Adams–Bashforth, AB) 방법(명시적, 차수 kk)과 애덤스–몰턴(Adams–Moulton, AM) 방법(음적, 차수 k+1k + 1):
    AB2: yn+1=yn+h2(3fn−fn−1),AB4: yn+1=yn+h24(55fn−59fn−1+37fn−2−9fn−3),AM2 (사다리꼴): yn+1=yn+h2(fn+1+fn),AM4: yn+1=yn+h24(9fn+1+19fn−5fn−1+fn−2).\begin{aligned} \text{AB2: } & y_{n+1} = y_n + \tfrac{h}{2}(3f_n - f_{n-1}), \\ \text{AB4: } & y_{n+1} = y_n + \tfrac{h}{24}(55f_n - 59f_{n-1} + 37f_{n-2} - 9f_{n-3}), \\ \text{AM2 (사다리꼴): } & y_{n+1} = y_n + \tfrac{h}{2}(f_{n+1} + f_n), \\ \text{AM4: } & y_{n+1} = y_n + \tfrac{h}{24}(9f_{n+1} + 19f_n - 5f_{n-1} + f_{n-2}). \end{aligned}
    국소 오차의 주항은 Cp+1hp+1y(p+1)C_{p+1}h^{p+1}y^{(p+1)}이고 오차 상수는 AB2 512\tfrac5{12}, AM2 −112-\tfrac1{12}, AB4 251720\tfrac{251}{720}, AM4 −19720-\tfrac{19}{720}이다. 같은 차수에서 음적 공식의 오차 상수가 훨씬 작다.

    AB2의 계수는 fn−1,fnf_{n-1}, f_n을 지나는 직선 p(t)=fn+(t−tn)(fn−fn−1)/hp(t) = f_n + (t - t_n)(f_n - f_{n-1})/h를 [tn,tn+h][t_n, t_n + h]에서 적분하면 hfn+h2(fn−fn−1)=h2(3fn−fn−1)h f_n + \tfrac h2(f_n - f_{n-1}) = \tfrac h2(3f_n - f_{n-1})으로 바로 나옵니다. 다단계 방법에는 실무상 두 가지 일이 따라붙습니다. 첫째, 출발: 처음 k−1k - 1개의 값은 RK4 같은 일단계 방법으로 만듭니다. 둘째, 걸음 폭 바꾸기: 계수가 등간격을 가정하므로 hh를 바꾸려면 보간을 다시 하거나 계수를 다시 계산해야 합니다.

    음적인 AM은 yn+1y_{n+1}을 풀어야 합니다. 강성이 없는 문제에서는 뉴턴 반복까지 필요 없고, AB로 예측한 값을 AM의 우변에 넣어 한 번 수정하는 것으로 충분합니다.

    // PECE: AB(k) 예측 → f 계산 → AM 수정 → f 계산
    for n = k−1, k, …
      y_p ← yₙ + h·Σ βⱼᴬᴮ fₙ₋ⱼ              // P: 예측 (외삽)
      f_p ← f(tₙ₊₁, y_p)                    // E: 계산
      yₙ₊₁ ← yₙ + h·(β₀ᴬᴹ f_p + Σ βⱼᴬᴹ fₙ₊₁₋ⱼ)  // C: 수정
      fₙ₊₁ ← f(tₙ₊₁, yₙ₊₁)                  // E: 다음 걸음용
      est ← |yₙ₊₁ − y_p| · |C_AM| / |C_AB − C_AM|   // 밀른의 오차 추정
    end for

    마지막 줄이 다단계 방법의 공짜 오차 추정입니다. 예측자와 수정자의 국소 오차가 각각 CABhp+1y(p+1)C_{AB}h^{p+1}y^{(p+1)}, CAMhp+1y(p+1)C_{AM}h^{p+1}y^{(p+1)}이면(같은 차수의 쌍을 쓸 때) 두 값의 차이에서 y(p+1)y^{(p+1)}을 소거해 수정자의 오차를 추정할 수 있습니다. 이것을 밀른 장치(Milne's device)라 하며 임베디드 RK의 오차 추정과 같은 역할을 합니다.

    예제 11.5 (AB2와 사다리꼴 PECE 한 걸음) y′=−yy' = -y, h=0.1h = 0.1, y0=1y_0 = 1, y1=e−0.1=0.904837y_1 = e^{-0.1} = 0.904837에서 y2y_2를 구하라.
    1. AB2 예측: yp=0.904837+0.05(3(−0.904837)−(−1))=0.819112y_p = 0.904837 + 0.05(3(-0.904837) - (-1)) = 0.819112. 참값 e−0.2=0.818731e^{-0.2} = 0.818731, 오차 3.8×10−43.8\times10^{-4}.
    2. 사다리꼴 수정: y2=0.904837+0.05(−0.904837−0.819112)=0.818640y_2 = 0.904837 + 0.05(-0.904837 - 0.819112) = 0.818640. 오차 −9.1×10−5-9.1\times10^{-5}, 예측의 4분의 1 이하.
    3. 밀른 추정: ∣y2−yp∣⋅1/125/12+1/12=4.72×10−4/6=7.9×10−5|y_2 - y_p|\cdot\frac{1/12}{5/12 + 1/12} = 4.72\times10^{-4}/6 = 7.9\times10^{-5}. 실제 오차 9.1×10−59.1\times10^{-5}과 크기가 맞는다.
    4. 비용: f 계산 2회(예측점 1, 수정점 1). AB2 단독은 1회다.
    y′=ycos⁡ty' = y\cos t, t∈[0,3]t \in [0, 3] 최대 오차h=0.1h = 0.1h=0.05h = 0.05h=0.025h = 0.025관측 차수f / 걸음
    AB1 (오일러)8.26×10⁻²4.10×10⁻²2.05×10⁻²1.001
    AB22.00×10⁻²5.09×10⁻³1.29×10⁻³1.991
    AB45.27×10⁻⁴3.13×10⁻⁵1.88×10⁻⁶4.051
    PECE AB2–AM23.44×10⁻³9.43×10⁻⁴2.47×10⁻⁴1.932
    PECE AB4–AM43.94×10⁻⁵2.36×10⁻⁶1.42×10⁻⁷4.052

    표의 출발값은 정확한 해로 주었습니다. 같은 4차라도 PECE 4는 AB4보다 13배 정확하고, f 계산은 두 배입니다. 오차 상수의 비 25119≈13\tfrac{251}{19} \approx 13이 그대로 드러납니다.

    SIMULATOR

    애덤스 예측–수정: 과거 기울기의 다항식을 한 걸음씩

    y(t): 수치 해(점)와 참 해 e^(sin t)
    f(t, y) = y cos t: 보간 다항식과 적분 넓이
    방법
    참 해 / 참 f쓰이는 과거 fₙ₋ⱼ예측 다항식 (AB)수정 다항식 (AM)예측점의 기울기
    t—
    예측 yp · 수정 y—
    밀른 추정 · 실제 오차—
    f 계산 누계—
    ntₙyₙ참값오차
    해볼 것: ① '다음 단계'를 누르며 과거 점(보라)을 지나는 다항식이 다음 구간으로 연장되고 그 아래 넓이가 yₙ₊₁ − yₙ이 되는 것을 보세요. ② PECE에서는 예측점의 기울기(주황 원)를 포함한 두 번째 다항식(파란 점선)으로 다시 적분합니다. 밀른 추정과 실제 오차가 비슷한 크기로 움직입니다. ③ h = 0.4로 키우면 AB4의 외삽 다항식이 크게 빗나갑니다. 모델: 출발값 y₀ … yk−1은 참 해, t ∈ [0, 6].

    안정성 영역과 A-안정

    정확한 공식이 안정한 공식은 아니다

    AB4는 AB2보다 두 차수 높지만, y′=−yy' = -y처럼 단순한 감쇠 문제에서 h=0.5h = 0.5로 돌리면 AB2는 줄어드는데 AB4는 진동하며 커집니다. 차수가 높을수록 외삽이 공격적이라 안정 영역이 좁아집니다. 방법을 고를 때 차수만큼 중요한 것이 안정성 영역의 모양입니다.

    시험 방정식 y′=λyy' = \lambda y에 선형 다단계 방법을 쓰면 ∑(αj−zβj)yn+j=0\sum(\alpha_j - z\beta_j)y_{n+j} = 0(z=hλz = h\lambda)입니다. 이 차분 방정식의 해는 안정성 다항식(stability polynomial) π(ζ;z)=ρ(ζ)−zσ(ζ)\pi(\zeta; z) = \rho(\zeta) - z\sigma(\zeta)의 근 ζi(z)\zeta_i(z)의 거듭제곱입니다. 룽게–쿠타의 ∣R(z)∣≤1|R(z)| \le 1에 해당하는 조건이 "모든 근이 단위원 안"입니다.

    정의 11.9 (다단계 방법의 절대 안정 영역) π(ζ;z)\pi(\zeta; z)의 모든 근이 ∣ζ∣≤1|\zeta| \le 1이고 ∣ζ∣=1|\zeta| = 1인 근은 단근인 z∈Cz \in \mathbb C의 집합을 절대 안정 영역이라 한다. 영역의 경계는 ζ=eiθ\zeta = e^{i\theta}를 대입한 경계 궤적 z(θ)=ρ(eiθ)/σ(eiθ)z(\theta) = \rho(e^{i\theta})/\sigma(e^{i\theta}), 0≤θ<2π0 \le \theta \lt 2\pi 위에 있다.
    정의 11.10 (A-안정, A(α)-안정, L-안정) 절대 안정 영역이 왼쪽 반평면 전체를 포함하면 A-안정, 음의 실수축을 중심으로 반각 α\alpha인 쐐기 {∣arg⁡(−z)∣<α}\{|\arg(-z)| \lt \alpha\}를 포함하면 A(α)-안정, A-안정이면서 ∣R(z)∣→0|R(z)| \to 0(z→−∞z \to -\infty)이면 L-안정(L-stable)이라 한다. L-안정 방법은 아주 빠른 성분을 한 걸음 만에 지운다.
    정리 11.11 (달퀴스트 제2 장벽) A-안정인 선형 다단계 방법은 음적이어야 하고 차수가 2 이하이다. 2차 A-안정 방법 중 오차 상수의 절댓값이 가장 작은 것은 사다리꼴 공식(C3=−112C_3 = -\tfrac1{12})이다.

    사다리꼴 공식은 A-안정이지만 R(z)=1+z/21−z/2→−1R(z) = \frac{1 + z/2}{1 - z/2} \to -1(z→−∞z \to -\infty)이라 L-안정은 아닙니다. 아주 빠른 성분이 지워지지 않고 부호만 바꾸며 남아 회로 시뮬레이터에서 "링잉"이라 불리는 가짜 진동을 만듭니다. BDF1(음적 오일러)과 BDF2는 L-안정입니다. 3차 이상의 BDF는 제2 장벽 때문에 A-안정일 수 없지만 큰 각도의 A(α)-안정을 가집니다.

    방법차수음의 실수축 안정 구간성격
    AB2 · AB3 · AB42 · 3 · 4(−1, 0) · (−0.545, 0) · (−0.300, 0)명시적, 차수가 오를수록 좁아짐
    RK4 · DP54 · 5(−2.785, 0) · (−3.306, 0)명시적, 단당 비용 고려 시 AB와 비슷
    AM3 · AM43 · 4(−6, 0) · (−3, 0)음적이지만 유한 영역
    사다리꼴 (AM2)2(−∞, 0)A-안정, L-안정 아님
    BDF1 · BDF21 · 2(−∞, 0)A-안정 + L-안정
    BDF3 · 4 · 5 · 63 · 4 · 5 · 6(−∞, 0)A(α): α = 86.03°, 73.35°, 51.84°, 17.84°

    표의 수치는 시뮬레이터와 같은 방법(격자 위에서 안정성 다항식의 근을 직접 계산하고, BDF의 α는 경계 궤적에서 최소 각을 찾음)으로 계산했습니다. BDF7 이상은 영 안정성마저 잃으므로 실용 BDF 코드는 차수 5 또는 6까지만 씁니다.

    SIMULATOR

    안정성 영역 지도: 복소 hλ 평면과 특성근

    z = hλ 평면: 칠한 곳이 안정 (점을 끌기)
    현재 z에서 안정성 다항식의 근 ζᵢ
    보기 범위
    z = hλ—
    max |ζᵢ|—
    판정—
    실수축 안정 구간—
    해볼 것: ① AB2 → AB3 → AB4로 바꾸며 영역이 원점 근처로 오그라드는 것을 보세요. ② BDF2의 칠하지 않은 부분은 오른쪽 반평면 안의 작은 섬뿐입니다(A-안정). BDF5에서 쐐기를 켜면 허수축 근처가 잘려 나간 것이 보입니다. ③ z를 영역 경계 밖으로 끌면 오른쪽 그림에서 근 하나가 단위원을 뚫고 나갑니다. 다단계 방법은 근이 여러 개라 "어느 근이 먼저 나가는가"가 안정성을 정합니다. 모델: RK4는 |R(z)| ≤ 1, 다단계는 π(ζ; z) = ρ(ζ) − zσ(ζ)의 근을 칸마다 계산.

    강성과 BDF: 음적 방법의 뉴턴 반복

    세 물질의 반응을 40초 동안

    로버트슨의 화학 반응 모형은 강성 문제의 시험대로 널리 쓰입니다. A→BA \to B(속도 0.04), B+C→A+CB + C \to A + C(속도 10410^4), 2B→B+C2B \to B + C(속도 3×1073\times10^7). 농도 y1,y2,y3y_1, y_2, y_3은

    y1′=−0.04y1+104y2y3,y2′=0.04y1−104y2y3−3×107y22,y3′=3×107y22y_1' = -0.04y_1 + 10^4y_2y_3,\quad y_2' = 0.04y_1 - 10^4y_2y_3 - 3\times10^7y_2^2,\quad y_3' = 3\times10^7y_2^2

    을 따르고 y(0)=(1,0,0)y(0) = (1, 0, 0)입니다. 중간 물질 y2y_2는 t≈0.005t \approx 0.005에서 최댓값 3.6×10−53.6\times10^{-5}에 닿은 뒤 아주 천천히 줄어듭니다. 해가 이렇게 느린데 도르만드–프린스 5(4)(tol = 10−410^{-4})로 t=40t = 40까지 가는 데 34,557걸음(버린 걸음 1,550)이 걸립니다. 같은 tol의 BDF2는 154걸음입니다.

    원인은 야코비안 J=∂f/∂yJ = \partial f/\partial y의 고유값입니다. t=40t = 40 부근에서 JJ의 고유값은 00(질량 보존 y1+y2+y3=1y_1 + y_2 + y_3 = 1), −0.0214-0.0214, −3393-3393입니다. 해의 변화는 −0.02-0.02짜리 느린 모드가 정하지만, 명시적 방법의 걸음은 h∣λmax⁡∣≲3.3h|\lambda_{\max}| \lesssim 3.3(DP5의 실수축 안정 경계)에 묶여 h≈10−3h \approx 10^{-3}을 넘지 못합니다. 40/10−3=4×10440/10^{-3} = 4\times10^4걸음, 관찰한 걸음 수와 맞습니다. 강성비 3393/0.0214≈1.6×1053393/0.0214 \approx 1.6\times10^5가 걸음 수의 비가 됩니다.

    정의 11.12 (후방 차분 공식, BDF) kk단계 BDF(backward differentiation formula)는 yn+1,yn,…,yn+1−ky_{n+1}, y_n, \dots, y_{n+1-k}를 지나는 보간 다항식의 도함수를 tn+1t_{n+1}에서 f(tn+1,yn+1)f(t_{n+1}, y_{n+1})과 같게 놓은 음적 공식이다.
    BDF1: yn+1−yn=hfn+1,BDF2: yn+1−43yn+13yn−1=23hfn+1,BDF3: yn+1−1811yn+911yn−1−211yn−2=611hfn+1.\begin{aligned} \text{BDF1: } & y_{n+1} - y_n = hf_{n+1}, \\ \text{BDF2: } & y_{n+1} - \tfrac43y_n + \tfrac13y_{n-1} = \tfrac23hf_{n+1}, \\ \text{BDF3: } & y_{n+1} - \tfrac{18}{11}y_n + \tfrac9{11}y_{n-1} - \tfrac2{11}y_{n-2} = \tfrac6{11}hf_{n+1}. \end{aligned}
    애덤스가 ff를 보간해 적분한다면, BDF는 yy를 보간해 미분한다. 차수는 kk이고 k≤6k \le 6에서 영 안정이다.

    음적 공식은 매 걸음 비선형 방정식 G(yn+1)=yn+1−γhf(tn+1,yn+1)−ψn=0G(y_{n+1}) = y_{n+1} - \gamma h f(t_{n+1}, y_{n+1}) - \psi_n = 0(ψn\psi_n은 과거 값의 조합, BDF2에서 γ=23\gamma = \tfrac23)을 풉니다. 강성 문제에서는 단순 고정점 반복 y←ψ+γhf(y)y \leftarrow \psi + \gamma hf(y)가 γh∥J∥<1\gamma h\|J\| \lt 1일 때만 수렴하므로, 바로 그 걸음 제한을 다시 불러옵니다. 그래서 뉴턴 반복(3장, 4장)을 씁니다.

    function bdf_step(f, J, t, ψ, γh, y_guess)
      y ← y_guess                         // 과거 값의 외삽(예측자)
      M ← I − γh·J(t, y)                   // 반복 행렬: 걸음마다 한 번만
      LU ← factor(M)                       // 12장의 LU 분해, 여러 반복에서 재사용
      for it = 1, 2, …, maxit
        G ← y − γh·f(t, y) − ψ
        Δ ← solve(LU, −G)                  // 전진·후진 대입만: O(m²)
        y ← y + Δ
        if ‖Δ‖ ≤ 작은 수·‖y‖ then return y
      end for
      return 실패 → h를 줄여 다시

    위 구현은 반복 행렬을 걸음마다 한 번만 분해하는 단순화 뉴턴입니다. 수렴은 1차로 떨어지지만 mm차원 계에서 분해 O(m3)O(m^3)를 반복마다 하지 않아도 되어 훨씬 싸고, 실제 코드는 야코비안을 여러 걸음 동안 재사용하기도 합니다. 큰 계에서 이 분해가 비용의 대부분이라 희소 LU(12장)나 반복 해법(13장)이 강성 ODE 풀이기의 심장이 됩니다.

    예제 11.6 (강성 스칼라 문제의 BDF2 한 걸음) y′=−1000(y−cos⁡t)y' = -1000(y - \cos t), y(0)=1y(0) = 1, h=0.1h = 0.1(hλ=−100h\lambda = -100). 출발값 y0=1y_0 = 1, y1=y(0.1)=0.995103y_1 = y(0.1) = 0.995103(정확한 값)에서 y2y_2를 구하라.
    1. BDF2: y2−43y1+13y0=23(0.1)(−1000)(y2−cos⁡0.2)y_2 - \tfrac43y_1 + \tfrac13y_0 = \tfrac23(0.1)(-1000)(y_2 - \cos 0.2). 우변이 y2y_2에 대해 1차식이라 뉴턴 한 번에 정확히 풀린다.
    2. γhλ\gamma h\lambda의 크기 23⋅100=66.667\tfrac23\cdot 100 = 66.667을 써서 y2(1+66.667)=43(0.995103)−13+66.667(0.980067)y_2(1 + 66.667) = \tfrac43(0.995103) - \tfrac13 + 66.667(0.980067), y2=0.980265y_2 = 0.980265.
    3. 참값 y(0.2)=0.980264y(0.2) = 0.980264(과도 성분 e−1000te^{-1000t}은 이미 사라졌고 해는 cos⁡t+sin⁡t/1000\cos t + \sin t/1000에 가깝다). 오차 4.0×10−74.0\times10^{-7}. 명시적 오일러라면 증폭률 ∣1−100∣=99|1 - 100| = 99로 즉시 폭발한다.
    SIMULATOR

    강성 로버트슨 반응: 명시적 DP 5(4) vs BDF2 + 뉴턴

    농도 (로그 시간축): y₁, 10⁴·y₂, y₃
    누적 걸음 수 vs t (로그–로그)
    끝 시각 T
    허용 오차
    y₁10⁴·y₂y₃DP 5(4) 걸음 수BDF2 걸음 수
    DP 5(4) 채택/버림—
    BDF2 채택/버림 · 뉴턴 반복—
    y(T) (BDF2)—
    J의 가장 빠른 고유값 at T—
    해볼 것: ① T를 0.3 → 40으로 늘리면 DP 5(4)의 걸음 수는 t에 비례해(기울기 1) 늘고, BDF2는 로그 시간축에서 거의 일정한 간격으로 걸어 수백 걸음에 그칩니다. ② T = 4·10⁴에서는 명시적 방법이 20만 걸음 한도에서 멈춥니다. ③ 아래 그래프의 DP 곡선이 기울기 1의 직선이라는 것은 h가 상수(안정 경계)에 묶였다는 뜻입니다. 모델: 가변 걸음 BDF2(걸음 비 ω에 맞춘 계수), 2차 외삽 예측자, 오차 추정 |y − yp|/3, 걸음마다 뉴턴 반복과 3×3 부분 피벗팅 소거. 척도 tol·(|yᵢ| + 10−6).

    심플렉틱 적분: 스퇴르머–베를레와 장기 에너지

    정확한 방법이 오래 돌리면 진다

    진자 θ′′=−sin⁡θ\theta'' = -\sin\theta를 진폭 2 rad에서 놓고 h=0.2h = 0.2로 적분합니다. RK4의 에너지 오차는 t=100t = 100에서 3.2×10−43.2\times10^{-4}, t=1000t = 1000에서 3.2×10−33.2\times10^{-3}, t=104t = 10^4에서 3.2×10−23.2\times10^{-2}으로 시간에 비례해 쌓입니다. 2차밖에 안 되는 스퇴르머–베를레는 처음부터 최대 1.1×10−21.1\times10^{-2}이지만, t=104t = 10^4에서도 여전히 1.1×10−21.1\times10^{-2}입니다. 긴 시간에서는 2차 방법이 4차 방법을 이깁니다.

    ODEBook 5장 8절에서 심플렉틱 오일러가 용수철의 수정된 에너지를 정확히 지킨다는 것을 보았습니다. 실무에서 가장 많이 쓰는 심플렉틱 방법은 그것을 대칭으로 만든 2차 방법입니다.

    정의 11.13 (스퇴르머–베를레 / 속도 베를레) q′′=a(q)q'' = a(q)(해밀토니언 H=12p2+V(q)H = \tfrac12p^2 + V(q), a=−V′a = -V')에 대해
    pn+1/2=pn+h2a(qn),qn+1=qn+hpn+1/2,pn+1=pn+1/2+h2a(qn+1).p_{n+1/2} = p_n + \tfrac h2a(q_n),\qquad q_{n+1} = q_n + hp_{n+1/2},\qquad p_{n+1} = p_{n+1/2} + \tfrac h2a(q_{n+1}).
    걸음당 힘 계산은 1회(a(qn+1)a(q_{n+1})을 다음 걸음에 재사용)이고 2차이다. 위치만 쓰면 qn+1−2qn+qn−1=h2a(qn)q_{n+1} - 2q_n + q_{n-1} = h^2a(q_n), 곧 2계 도함수의 중앙 차분이며 이 꼴을 립프로그(leapfrog)라고도 한다.
    정리 11.14 (베를레의 기하학적 성질) 스퇴르머–베를레의 한 걸음 사상 Φh:(qn,pn)↦(qn+1,pn+1)\Phi_h: (q_n, p_n) \mapsto (q_{n+1}, p_{n+1})은 (1) 심플렉틱(symplectic)이고(2차원에서는 야코비 행렬식이 1, 곧 위상 공간 넓이 보존), (2) 시간 가역적이다(Φ−h=Φh−1\Phi_{-h} = \Phi_h^{-1}). 후방 오차 해석에 따르면 Φh\Phi_h는 H~=H+h2H2+h4H4+⋯\tilde H = H + h^2H_2 + h^4H_4 + \cdots라는 수정된 해밀토니언의 정확한 흐름에 지수적으로 작은 오차까지 가깝다. 따라서 에너지 오차 ∣H(qn,pn)−H0∣=O(h2)|H(q_n, p_n) - H_0| = O(h^2)가 지수적으로 긴 시간 동안 유계로 머문다.

    넓이 보존의 이유. 세 단계 각각이 "한 변수만 다른 변수의 함수만큼 민다"는 전단 사상이다. 예를 들어 (q,p)↦(q,p+h2a(q))(q, p) \mapsto (q, p + \tfrac h2a(q))의 야코비 행렬은 [10h2a′(q)1]\begin{bmatrix}1 & 0\\ \tfrac h2a'(q) & 1\end{bmatrix}이고 행렬식이 1이다. 행렬식 1인 사상의 합성도 행렬식이 1이다. ∎

    RK4가 에너지를 잃는 이유는 반대로 설명됩니다. RK4의 한 걸음은 넓이를 아주 조금 줄이는 사상이라(선형 진동자에서 걸음당 넓이 비가 1−h6/72+h8/5761 - h^6/72 + h^8/576), 그 작은 수축이 매 걸음 같은 방향으로 쌓입니다. 베를레의 오차는 크지만 한 방향으로 쌓이지 않습니다. 그래서 분자 동역학(수십억 걸음), 행성계의 장기 안정성 연구, 입자 가속기의 궤도 추적, 게임 물리 엔진이 베를레나 그 고차 합성(요시다 4차 등)을 씁니다.

    진자 θ₀ = 2, t ∈ [0, 1000]h = 0.2h = 0.1h = 0.05
    베를레: 최대 |ΔH|1.08×10⁻²2.71×10⁻³6.76×10⁻⁴
    RK4: t = 1000의 ΔH−3.24×10⁻³−1.02×10⁻⁴−3.18×10⁻⁶

    베를레의 오차는 hh를 반으로 줄일 때마다 4분의 1(2차)이고, RK4는 32분의 1입니다. RK4의 표류는 t⋅h4t \cdot h^4에 비례하는데, 이 계수가 작아서 t=1000t = 1000 정도에서는 RK4가 여전히 낫습니다. 승부는 적분 시간과 h로 정해지고, 시간이 충분히 길면 반드시 베를레가 이깁니다.

    SIMULATOR

    위상 공간의 넓이: 오일러 · RK4 · 스퇴르머–베를레

    진자 위상 평면 (θ, p): 초기값 원판의 변형
    |에너지 오차| vs t (로그–로그), 원판 중심 궤도
    오일러RK4베를레에너지 등고선
    t—
    넓이 / 처음 넓이: 오일러—
    RK4—
    베를레—
    해볼 것: ① ▶를 누르면 원판이 진자의 흐름을 따라 늘어나며 휘어집니다. 참 흐름은 넓이를 보존합니다(리우빌 정리). 오일러 원판은 부풀고, 베를레 원판의 넓이는 반올림 수준까지 1입니다. ② h = 0.3에서 RK4의 넓이 비가 1보다 조금씩 작아지는 것을 보세요. ③ 오른쪽 그래프에서 RK4 에너지 오차는 기울기 1로 자라고 베를레는 수평 띠에 머뭅니다. 모델: θ″ = −sin θ, 원판 중심 (θ, p) = (1.2, 0), 반지름 0.35, 경계점 160개의 다각형 넓이(신발끈 공식).

    경계값 문제: 슈팅 방법과 유한 차분

    끝 조건이 양쪽에 있다

    연소 이론의 브라투 문제 y′′+λey=0y'' + \lambda e^{y} = 0, y(0)=y(1)=0y(0) = y(1) = 0은 열이 온도에 대해 지수적으로 발생하는 판의 정상 온도입니다. 지금까지의 방법은 모두 t0t_0에서 yy와 y′y'을 알고 앞으로 걷는 초기값 문제용입니다. 여기서는 y′(0)y'(0)을 모르고 대신 y(1)y(1)을 압니다. 그리고 λ=1\lambda = 1이면 해가 두 개, λ>3.5138\lambda \gt 3.5138이면 하나도 없습니다(ODEBook: 경계값 문제).

    첫 번째 방법은 모르는 기울기 s=y′(0)s = y'(0)을 맞힐 때까지 쏘아 보는 것입니다. 초기값 문제 y′′=−λeyy'' = -\lambda e^y, y(0)=0y(0) = 0, y′(0)=sy'(0) = s를 RK4로 풀어 끝값 y(1;s)y(1; s)를 얻고, 빗나간 정도 F(s)=y(1;s)−0F(s) = y(1; s) - 0의 근을 3장의 근 찾기로 구합니다.

    정의 11.15 (슈팅 방법) 경계값 문제 y′′=g(x,y,y′)y'' = g(x, y, y'), y(a)=αy(a) = \alpha, y(b)=βy(b) = \beta에 대해 F(s)=y(b;s)−βF(s) = y(b; s) - \beta로 두고 F(s)=0F(s) = 0을 할선법 sk+1=sk−F(sk)sk−sk−1F(sk)−F(sk−1)s_{k+1} = s_k - F(s_k)\dfrac{s_k - s_{k-1}}{F(s_k) - F(s_{k-1})}이나 뉴턴 방법(F′(s)F'(s)는 변분 방정식 w′′=gyw+gy′w′w'' = g_y w + g_{y'}w', w(a)=0w(a) = 0, w′(a)=1w'(a) = 1의 w(b)w(b))으로 푸는 방법을 슈팅 방법(shooting method)이라 한다.
    예제 11.7 (브라투 λ = 1의 슈팅) RK4(200걸음)로 F(0)=−0.46316F(0) = -0.46316, F(1)=0.36270F(1) = 0.36270이다.
    1. 할선 1회: s2=1−0.36270⋅1−00.36270+0.46316=0.560826s_2 = 1 - 0.36270\cdot\frac{1 - 0}{0.36270 + 0.46316} = 0.560826, F=9.4×10−3F = 9.4\times10^{-3}.
    2. 할선 2회: s3=0.549085s_3 = 0.549085, F=−2.2×10−4F = -2.2\times10^{-4}. 3회: s4=0.5493529s_4 = 0.5493529, F=1.2×10−7F = 1.2\times10^{-7}. 4회: F=1.5×10−12F = 1.5\times10^{-12}.
    3. 정확한 해 y=−2ln⁡cosh⁡((x−12)θ/2)cosh⁡(θ/4)y = -2\ln\dfrac{\cosh((x - \frac12)\theta/2)}{\cosh(\theta/4)}(θ=2λcosh⁡(θ/4)\theta = \sqrt{2\lambda}\cosh(\theta/4), θ=1.51716\theta = 1.51716)의 y′(0)=0.549353y'(0) = 0.549353과 일치한다. 최고 온도 y(0.5)=0.140539y(0.5) = 0.140539.
    4. 다른 근 θ=10.9387\theta = 10.9387에 해당하는 두 번째 해는 y′(0)=10.8469y'(0) = 10.8469, y(0.5)=4.0915y(0.5) = 4.0915이다. 할선법을 s=10,11s = 10, 11에서 출발하면 그쪽으로 간다.

    슈팅은 간단하지만 약점이 있습니다. 초기값 문제가 불안정하면(해가 eLxe^{Lx}로 벌어지면) F(s)F(s)가 ss에 극도로 민감해져 반올림 오차만으로도 맞출 수 없습니다. 구간을 여러 조각으로 나눠 조각마다 쏘고 이음매를 맞추는 다중 슈팅이 처방입니다. 두 번째 방법은 구간 전체를 한꺼번에 푸는 것입니다.

    정의 11.16 (유한 차분 방법) xi=ihx_i = ih, h=1/Nh = 1/N에서 y′′(xi)≈(yi−1−2yi+yi+1)/h2y''(x_i) \approx (y_{i-1} - 2y_i + y_{i+1})/h^2(9장의 중앙 차분, 오차 O(h2)O(h^2))로 바꾸면 미지수 y1,…,yN−1y_1, \dots, y_{N-1}에 대한 비선형 연립방정식
    Gi(y)=yi−1−2yi+yi+1h2+λeyi=0,y0=yN=0G_i(\mathbf y) = \frac{y_{i-1} - 2y_i + y_{i+1}}{h^2} + \lambda e^{y_i} = 0,\qquad y_0 = y_N = 0
    을 얻는다. 야코비안 ∂Gi/∂yj\partial G_i/\partial y_j는 대각 −2/h2+λeyi-2/h^2 + \lambda e^{y_i}, 비대각 1/h21/h^2인 삼중대각 행렬이라 뉴턴 한 번이 토머스 알고리즘(12장)으로 O(N)O(N)에 끝난다.
    브라투 λ = 1, 유한 차분N = 4N = 8N = 16N = 32N = 64
    최대 오차9.08×10⁻⁴2.23×10⁻⁴5.57×10⁻⁵1.39×10⁻⁵3.47×10⁻⁶
    뉴턴 반복 (y = 0에서 출발)44444

    N을 두 배로 할 때마다 오차가 정확히 4분의 1, 2차 수렴입니다. 뉴턴 반복 수는 격자 크기와 무관합니다. 유한 차분은 불안정한 초기값 문제를 거치지 않으므로 슈팅이 실패하는 문제에서도 잘 동작하고, 같은 아이디어가 2차원 푸아송 방정식(16장)으로 그대로 확장됩니다.

    SIMULATOR

    브라투 경계값 문제: 슈팅(할선법) vs 유한 차분(뉴턴)

    y(x): 시도한 궤적과 경계 조건 y(1) = 0
    슈팅: 빗나감 F(s) = y(1; s) · 유한 차분: 뉴턴 잔차
    방법
    반복 k—
    s 또는 y(½)—
    |F| 또는 ‖Δy‖—
    정확한 해와 최대 차이—
    해볼 것: ① 슈팅에서 s 슬라이더를 움직여 끝점이 0을 지나는 s를 손으로 찾아보세요. 아래 그래프 F(s)가 0을 두 번 지납니다(해 두 개). ② '반복 한 번'은 할선법 한 걸음입니다. s = 10 근처에서 시작하면 두 번째 해로 갑니다. ③ λ를 3.6 이상으로 올리면 F(s)가 0에 닿지 않습니다. 해가 없습니다. ④ 유한 차분으로 바꾸면 y = 0에서 출발한 뉴턴 반복이 4~5번 만에 수렴하고, N을 두 배로 하면 오차가 약 4분의 1이 됩니다. 모델: 슈팅은 RK4 200걸음, 정확한 해는 θ = √(2λ) cosh(θ/4)의 작은 근으로 만든 공식.

    이 도구가 쓰이는 곳

    분야문제의 성격쓰이는 방법
    궤도 역학·천체 역학매끄럽고 긴 시간, 보존량고차 임베디드 RK(DP8 등), 다단계(애덤스), 장기 적분은 심플렉틱
    화학 반응·연소·대기 화학반응 속도가 수십 자릿수에 걸침(강성)BDF(가변 차수), 로젠브록 방법, 희소 야코비안
    회로 시뮬레이터(SPICE 계열)강성 + 불연속 스위칭사다리꼴과 BDF2(링잉 억제), 뉴턴 반복과 희소 LU
    분자 동역학·입자 가속기·게임 물리수십억 걸음, 에너지 표류 금지속도 베를레, 반음적 오일러
    구조물의 처짐·열전달·반도체 소자 단면경계값 문제유한 차분·유한 요소 + 뉴턴, 다중 슈팅·콜로케이션(solve_bvp)

    핵심 정리

    1. 수렴 = 일관성 + 안정성. 일단계 방법은 일관적이면 수렴한다(정리 11.2). 다단계 방법은 ρ(ζ)\rho(\zeta)의 근이 단위원 안에 있고 경계의 근이 단근이어야(영 안정) 수렴한다(달퀴스트 동등성 정리).
    2. 룽게–쿠타 방법은 부처 표 (A,b,c)(A, \mathbf b, \mathbf c)로 정의된다. p차 조건은 뿌리 있는 나무마다 하나씩, 4차까지 8개이며, 5차에는 6단이 필요하다(부처 장벽).
    3. 임베디드 쌍은 두 가중치의 차이로 국소 오차를 공짜로 추정하고, 높은 차수 쪽으로 진행하며, h←h⋅min⁡(5,max⁡(0.2,0.9 err−1/(q+1)))h \leftarrow h\cdot\min(5, \max(0.2, 0.9\,\mathrm{err}^{-1/(q+1)}))로 걸음을 조절한다. 척도는 atol + rtol·|y|.
    4. 애덤스–배시포스(명시적, k차)와 애덤스–몰턴(음적, k+1차)은 f의 보간 다항식을 적분한다. 걸음당 f 계산 1~2회로 고차를 얻고, PECE의 예측–수정 차이가 오차 추정(밀른 장치)이 된다.
    5. 다단계 방법의 안정 영역은 ρ(ζ)−zσ(ζ)\rho(\zeta) - z\sigma(\zeta)의 근이 단위원 안인 z의 집합이다. 명시적 방법은 차수가 높을수록 영역이 좁다. A-안정 다단계 방법은 2차가 한계다(달퀴스트 제2 장벽).
    6. 강성 문제에서 명시적 방법의 걸음은 h∣λmax⁡∣h|\lambda_{\max}|의 안정 경계에 묶인다. BDF(k≤6k \le 6, BDF1·2는 L-안정)는 I−γhJI - \gamma hJ의 LU 분해를 재사용하는 단순화 뉴턴으로 걸음마다 음적 방정식을 푼다. 로버트슨 문제에서 걸음 수가 200배 이상 준다.
    7. 스퇴르머–베를레는 전단 사상의 합성이라 넓이를 보존하고 시간 가역적이다. 수정된 해밀토니언 덕에 에너지 오차가 O(h2)O(h^2) 띠 안에 머물러, 긴 시간에서는 표류가 tt에 비례하는 RK4를 이긴다.
    8. 경계값 문제는 슈팅(초기값 문제 + 할선/뉴턴)이나 유한 차분(삼중대각 뉴턴, O(h2)O(h^2))으로 푼다. 초기값 문제가 불안정하면 유한 차분이나 다중 슈팅이 필요하다.

    확인 퀴즈

    Q1. 2단계 방법 yn+2−3yn+1+2yn=h(… )y_{n+2} - 3y_{n+1} + 2y_n = h(\dots)의 ρ(ζ)\rho(\zeta)의 근은 1과 2이다. 이 방법에 대해 옳은 것은?

    기생 근 2가 단위원 밖에 있어 근 조건이 깨진다. 오차의 기생 성분이 2ⁿ으로 자라고 n = (T − t₀)/h이므로 h를 줄일수록 더 나빠진다. 달퀴스트 동등성 정리에 따라 수렴하지 않는다.

    Q2. 3단 명시적 RK의 가중치가 b=(14,0,34)\mathbf b = (\tfrac14, 0, \tfrac34), c=(0,13,23)\mathbf c = (0, \tfrac13, \tfrac23)이다. ∑bici\sum b_ic_i와 ∑bici2\sum b_ic_i^2의 값은?

    ∑bici=34⋅23=12\sum b_ic_i = \tfrac34\cdot\tfrac23 = \tfrac12, ∑bici2=34⋅49=13\sum b_ic_i^2 = \tfrac34\cdot\tfrac49 = \tfrac13. 2차 조건과 3차 조건 하나가 맞는다(이것은 호인의 3차 방법이며 a32=23a_{32} = \tfrac23이면 나머지 조건 ∑biaijcj=34⋅23⋅13=16\sum b_ia_{ij}c_j = \tfrac34\cdot\tfrac23\cdot\tfrac13 = \tfrac16도 성립한다).

    Q3. 3(2) 임베디드 쌍에서 오차 추정이 허용 오차의 8배였다(err = 8). 안전 계수 0.9를 쓰면 다음 시도의 h는 지금의 몇 배인가?

    낮은 차수 q = 2이므로 국소 오차 ∝ h³, 지수는 1/(q + 1) = 1/3. 0.9·8−1/3 = 0.9/2 = 0.45. 이 걸음은 버리고 0.45h로 다시 계산한다.

    Q4. 비싼 f를 쓰는 강성 없는 문제에서, 4차 정확도를 원할 때 걸음당 f 계산이 가장 적은 방법은?

    AB4는 과거 기울기 네 개를 재활용해 걸음당 f를 1회만 계산한다. RK4는 4회. BDF4는 음적이라 뉴턴 반복이 필요하고 강성 문제용이다. 베를레는 2차다.

    Q5. A-안정이면서 3차인 선형 다단계 방법에 대해 옳은 것은?

    A-안정 선형 다단계 방법의 차수는 2 이하다. BDF3는 A(86.03°)-안정일 뿐이고, AM3의 실수축 안정 구간은 (−6, 0)이다. 3차 이상의 A-안정 방법을 원하면 음적 룽게–쿠타(가우스, 라다우)로 가야 한다.

    Q6. 강성 계 y′=f(y)y' = f(y)(차원 m)를 BDF로 풀 때 단순 고정점 반복 대신 뉴턴 반복을 쓰는 이유는?

    y ← ψ + γh f(y)는 축소 사상일 때, 곧 γh·‖J‖ < 1일 때 수렴한다. 강성 문제의 ‖J‖가 크므로 이는 명시적 방법의 안정 조건과 같은 제한이다. 뉴턴 반복은 (I − γhJ)의 LU 분해로 이 제한을 없앤다.

    Q7. 진자를 h = 0.1로 10⁶ 걸음 적분해 에너지를 지켜야 한다. 가장 알맞은 선택과 이유는?

    RK4의 에너지 표류는 시간에 비례해 쌓인다. 베를레는 심플렉틱이라 수정된 해밀토니언을 따라가며 에너지 오차가 유계다. 음적 오일러는 오히려 에너지를 인위적으로 소산시킨다.

    Q8. 유한 차분으로 2점 경계값 문제를 푸는데 N = 20에서 최대 오차가 8×10−48\times10^{-4}였다. 중앙 차분을 쓸 때 N = 80이면 오차는 대략?

    중앙 차분은 O(h²). h가 1/4이 되면 오차는 1/16: 8×10⁻⁴/16 = 5×10⁻⁵. 브라투 표에서도 N을 두 배로 할 때마다 정확히 1/4씩 줄었다.