2~4장에서 푼 방정식은 운이 좋은 경우였습니다. 변수가 분리되거나, 선형이거나, 적분 인자가 보였습니다. y′=t−y2처럼 한 글자만 바꿔도 기본 함수로 쓸 수 있는 해는 사라집니다. 그래도 4장의 존재·유일성 정리는 해가 있다고 말해 줍니다. 이 장은 그 해를 숫자로 만드는 법입니다. 1장에서 맛본 오일러 방법, 곧 "지금의 기울기로 조금 걷기"를 출발점으로 삼아, 왜 그것이 느린지(오차 차수 1), 기울기를 몇 번 더 재면 얼마나 빨라지는지(룽게–쿠타 4차), 걸음 폭을 스스로 고르는 법(적응 간격), 그리고 걸음 폭을 아무리 줄여도 터지는 방정식(강성)과 오래 돌리면 에너지가 새는 궤도(심플렉틱 적분)까지 다룹니다.
오일러 방법을 테일러 전개로 유도하고, 국소 절단 오차 O(h2)가 전역 오차 O(h)로 쌓이는 과정을 설명한다.
오차–간격 로그–로그 그래프의 기울기로 방법의 차수를 읽고, 계산 비용과 정확도를 비교한다.
개선 오일러(호인), 중점법, 룽게–쿠타 4차의 기울기 조합을 그림으로 이해하고 한 걸음을 손으로 계산한다.
고계 방정식을 1계 연립으로 바꾸어 같은 방법을 벡터에 적용한다.
내장 쌍으로 국소 오차를 추정해 걸음 폭을 자동으로 조절하는 원리를 안다.
시험 방정식 y′=λy로 안정성 영역을 그리고, 강성 방정식에서 음적 오일러가 필요한 이유와 심플렉틱 방법이 에너지를 지키는 이유를 설명한다.
이 수식이 없었다면일기예보와 궤도 계산
대기의 운동 방정식, 행성 세 개가 서로 끌어당기는 삼체 문제, 트랜지스터 수천 개가 얽힌 회로의 방정식은 손으로 풀리는 꼴이 아닙니다. 삼체 문제는 일반적인 경우 기본 함수로 쓸 수 있는 해가 없다고 알려져 있습니다. 그런데도 우리는 내일의 기압 배치를 예보하고, 탐사선을 수년 뒤의 행성 근처로 보내고, 칩을 만들기 전에 회로를 시뮬레이션합니다. 모두 "지금 상태와 변화율에서 조금 뒤의 상태를 계산하고, 이를 수백만 번 되풀이하는" 수치 적분 덕분입니다.
이 아이디어의 뿌리는 오일러(Leonhard Euler)의 18세기 적분학 교재에 있고, 기울기를 한 걸음 안에서 여러 번 재는 방법은 19세기 말 룽게(Carl Runge)가 제안하고 20세기 초 쿠타(Martin Wilhelm Kutta)가 체계화했습니다. 오늘날 MATLAB의 ode45나 SciPy의 solve_ivp 기본값은 이 계열에 걸음 폭 자동 조절을 더한 방법입니다.
y′ = f(t, y)→기울기로 한 걸음→yₙ₊₁ = yₙ + h·(기울기의 가중 평균)→예보·궤도·회로 시뮬레이션
오일러 방법과 국소·전역 오차
걸음을 반으로 줄이면 오차는 얼마나 줄까
1장에서 오일러 방법으로 y′=y, y(0)=1을 h=0.1로 풀면 y(1)≈2.5937이었습니다. 참값 e=2.7183과 0.12만큼 차이가 납니다. 소수 넷째 자리까지 맞추려면 h를 얼마로 해야 할까요? 그러려면 오차가 h에 따라 어떤 법칙으로 줄어드는지 알아야 합니다.
초기값 문제 y′=f(t,y), y(t0)=y0의 해를 시각 tn=t0+nh에서의 근삿값 yn으로 구합니다. h를 걸음 폭(step size)이라 합니다. 해 y(t)를 tn에서 테일러 전개하면(CalculusBook 12장)
ξn은 tn과 tn+1 사이의 어떤 점(테일러 정리의 라그랑주 나머지). 미분방정식 덕분에 y′은 f로 바로 계산된다.
마지막 항을 버리고, 모르는 y(tn) 대신 이미 계산한 yn을 넣은 것이 오일러 방법입니다.
정의 5.1 (오일러 방법) 걸음 폭 h와 tn=t0+nh에 대해
yn+1=yn+hf(tn,yn),n=0,1,2,…
로 근삿값을 만드는 방법을 (전진) 오일러 방법이라 한다. 한 걸음에 f를 한 번 계산한다.
버린 항이 오차의 원천입니다. 그런데 오차에는 두 종류가 있다는 것을 구별해야 합니다. 한 걸음에서 새로 생기는 오차와, 지금까지 쌓인 오차입니다.
정의 5.2 (국소 절단 오차와 전역 오차)un(t)를 점 (tn,yn)을 지나는 미분방정식의 정확한 해라 하자. 한 걸음의 국소 절단 오차(local truncation error)는 τn+1=un(tn+1)−yn+1, 곧 맞는 점에서 출발해 한 걸음만 걸었을 때의 오차다. 전역 오차(global error)는 원래 해와의 차이 En=y(tn)−yn이다.
그림 5-1. 오일러 걸음은 지금 점의 접선을 따라간다. 한 걸음 동안 생기는 국소 오차(노랑)는 지금 점을 지나는 해 un과의 차이이고, 전역 오차(청록)는 처음 해 y와의 차이다. 앞선 걸음의 오차 때문에 이미 다른 해곡선 위에 올라탔다는 점이 핵심이다.
국소 오차는 위의 테일러 나머지 그 자체라서 ∣τn+1∣≤2Mh2(M=max∣y′′∣)입니다. 구간 [t0,T]를 지나려면 N=(T−t0)/h걸음이 필요하니, 국소 오차를 그냥 더하면 N⋅2Mh2=2M(T−t0)h, 즉 h의 1제곱입니다. 실제로는 앞선 오차가 다음 걸음에서 해곡선의 벌어짐에 따라 커지거나 줄어드므로 한 가지 인자가 더 붙습니다.
정리 5.3 (오일러 방법의 오차)f가 y에 대해 립시츠 상수 L을 가지고(∣f(t,y)−f(t,z)∣≤L∣y−z∣), 해가 ∣y′′∣≤M을 만족하면 tn≤T인 모든 n에 대해
∣En∣=∣y(tn)−yn∣≤2LMh(eL(tn−t0)−1).
증명의 핵심. 참 해의 테일러 전개에서 오일러 식을 빼면 En+1=En+h(f(tn,y(tn))−f(tn,yn))+2h2y′′(ξn). 립시츠 조건으로 ∣En+1∣≤(1+hL)∣En∣+2Mh2. 이 부등식을 E0=0부터 되풀이하면 등비수열의 합 2Mh2⋅hL(1+hL)n−1이 나오고, 1+hL≤ehL을 쓰면 위 식이다. ∎
정리의 메시지는 둘입니다. 첫째, 전역 오차는 h에 비례합니다. h를 반으로 줄이면 오차도 반이 됩니다. 국소 오차는 h2인데 걸음 수가 1/h이므로 하나가 깎입니다. 둘째, eL(t−t0) 인자 때문에 해곡선이 서로 벌어지는 방정식(∂f/∂y>0)에서는 오래 적분할수록 오차가 지수적으로 커질 수 있습니다. 해곡선이 모이는 방정식에서는 이 상한이 지나치게 비관적입니다.
비율 0.124539/0.064984=1.92. h를 반으로 줄였더니 오차가 거의 반이 되었다. 오차 10−4를 원하면 h를 약 0.1×0.1245/10−4≈10−4까지, 즉 1만 걸음 가까이 줄여야 한다. 오일러 방법이 "정확하지만 느리다"는 말의 정량적 뜻이다.
아래 시뮬레이터에서 각 걸음의 국소 오차(노란 막대)와 끝점의 전역 오차(청록 막대)를 보세요. 점선은 각 걸음의 출발점을 지나는 정확한 해 un입니다. y′=y에서는 점선들이 위로 벌어지므로 국소 오차가 쌓이며 커지고, y′=t−y에서는 점선들이 한데 모이므로 앞선 오차가 저절로 줄어듭니다.
SIMULATOR
오일러 걸음: 국소 오차가 전역 오차로 쌓이는 과정
참 해오일러 근사국소 오차전역 오차 (t = 2)
걸음 수 N—
yN / 참값 y(2)—
전역 오차 EN—
국소 오차 합 Σ|τ|—
|EN| / h—
해볼 것: ① h를 0.2 → 0.1 → 0.05로 반씩 줄이며 아래 메시지의 오차 비율이 2에 가까운지 보세요. |EN|/h가 거의 일정합니다. ② y′ = y에서는 전역 오차가 국소 오차 합보다 크고, y′ = t − y에서는 더 작습니다. 해곡선이 벌어지느냐 모이느냐의 차이입니다. ③ h = 0.5에서 각 노란 막대가 h²에 비례해 큰 것을 보세요. 모델: 국소 해 uₙ는 각 방정식의 일반해 공식으로 정확히 그립니다.
오차 차수: 로그–로그 그래프의 기울기
정리 5.3은 오일러 방법의 오차가 Ch 꼴이라는 것을 말합니다. 더 좋은 방법은 Ch2, Ch4처럼 h의 더 높은 거듭제곱으로 줄어듭니다. 이 지수를 방법의 차수라 합니다.
정의 5.4 (방법의 차수) 충분히 매끄러운 f에 대해 국소 절단 오차가 O(hp+1)이고, 따라서 고정된 구간에서 전역 오차가 ∣EN∣≤Chp이면 그 방법을 p차 방법(method of order p)이라 한다. 오일러 방법은 1차다.
E≈Chp의 양변에 로그를 취하면 logE≈logC+plogh. 그래서 오차를 h에 대해 로그–로그 눈금으로 그리면 직선이 되고, 그 기울기가 차수p입니다. 두 간격 h와 h/2의 오차만 있어도 p≈log2(Eh/Eh/2)로 차수를 추정할 수 있습니다. 예제 5.1에서 log21.92=0.94, 1에 가깝습니다.
이 기울기는 새 프로그램을 검증하는 가장 강력한 도구입니다. RK4를 구현했는데 기울기가 4가 아니라 1로 나오면 어딘가에 버그가 있습니다(흔히 k2를 계산할 때 t+h/2 대신 t를 넣은 경우). 반대로 h를 너무 줄이면 오차가 더 이상 줄지 않고 들쭉날쭉해지는 바닥이 나타납니다. 컴퓨터의 실수가 약 16자리만 저장하기 때문에 생기는 반올림 오차로, 걸음 수가 많을수록 쌓입니다(MathBook: 컴퓨터는 어떻게 틀리는가).
SIMULATOR
오차–간격 로그–로그 그래프: 기울기가 차수다
가로축
오일러호인중점법RK4기준선
오일러 기울기—
호인 기울기—
중점법 기울기—
RK4 기울기—
해볼 것: ① 네 직선의 기울기가 1, 2, 2, 4인 것을 확인하세요(기울기는 반올림 바닥 위의 점들로만 맞춥니다). ② RK4는 h ≈ 10⁻³ 아래에서 10⁻¹⁴ 근처의 바닥에 닿아 더 줄지 않습니다. 반올림 오차입니다. ③ 가로축을 'f 계산 횟수'로 바꾸면 공정한 비용 비교가 됩니다. 같은 오차 10⁻⁶을 얻는 데 오일러는 백만 번이 넘게, RK4는 수십 번이면 됩니다(아래 메시지). 모델: h = 2⁻¹ … 2⁻¹³, 오차는 끝점에서 참 해와의 차이입니다.
개선 오일러(호인)와 중점법
기울기를 한 번 더 재면
오일러 방법은 구간의 왼쪽 끝 기울기만 씁니다. 해가 휘어 있으면 걸음 내내 그 기울기가 틀려 갑니다. 적분에서 왼쪽 직사각형 합보다 사다리꼴 공식이나 중점 공식이 훨씬 정확했던 것(CalculusBook 7장)과 같은 처방을 쓸 수 있지 않을까요?
미분방정식을 한 걸음 적분하면 y(tn+1)=y(tn)+∫tntn+1f(t,y(t))dt입니다. 오일러 방법은 이 적분을 왼쪽 직사각형으로 근사한 것입니다. 사다리꼴 공식을 쓰면 오른쪽 끝의 기울기 f(tn+1,yn+1)이 필요한데, 그 yn+1이 바로 지금 구하려는 값입니다. 해결책은 오일러로 먼저 어림해서(예측) 그 점의 기울기를 재고, 평균을 쓰는(수정) 것입니다.
그림 5-2. 호인 방법. 오일러 걸음(빨강 점선)은 예측일 뿐이고, 그 끝점에서 잰 기울기 k2와 처음 기울기 k1의 평균으로 처음 점에서 다시 걷는다(청록). 아래로 볼록한 해에서 k1은 너무 작고 k2는 너무 크므로 평균이 오차를 상쇄한다.
왜 2차일까요? 참 해의 테일러 전개를 2차 항까지 쓰면 y(t+h)=y+hf+2h2(ft+fyf)+O(h3)입니다(연쇄 법칙으로 y′′=ft+fyy′=ft+fyf). 한편 호인의 k2를 전개하면 k2=f+h(ft+fyf)+O(h2)이므로 y+2h(k1+k2)=y+hf+2h2(ft+fyf)+O(h3). 2차 항까지 정확히 일치합니다.
정리 5.6 (2단 방법의 2차 조건)yn+1=yn+h(b1k1+b2k2), k2=f(tn+ch,yn+chk1) 꼴의 방법이 2차일 필요충분조건은 b1+b2=1, b2c=21이다. 호인은 b1=b2=21,c=1, 중점법은 b1=0,b2=1,c=21이다. 국소 오차는 O(h3), 전역 오차는 O(h2)이다.
예제 5.2 (한 걸음 손계산)y′=t+y, y(0)=1, h=0.1로 한 걸음을 세 방법으로 계산하고 참 해 y=2et−t−1과 비교하라.
중점법: 반 걸음 점 (0.05,1.05)에서 k2=1.1. y1=1+0.1⋅1.1=1.11. 오차 3.4×10−4.
계산 한 번을 더해 오차가 30분의 1이 되었다. (f가 t와 y에 대해 1차식이라 두 2차 방법의 결과가 같아졌다. 비선형 f에서는 서로 다르다.)
아래 시뮬레이터는 세 방법(그리고 다음 절의 RK4)을 같은 방향장 위에서 나란히 걷게 합니다. 출발점을 끌고 걸음 폭을 바꿔 보세요. 회색 굵은 선은 아주 작은 걸음으로 계산한 기준 해입니다.
SIMULATOR
세 방법 나란히: 오일러 · 호인 · 중점법 (+ RK4)
t = 0의 점을 위아래로 끌기
기준 해오일러호인중점법RK4
오일러 |오차| (t = 4)—
호인—
중점법—
RK4—
해볼 것: ① h = 0.5에서 오일러는 처음 구간에서 기준 해보다 크게 뒤처지지만 호인·중점법은 거의 붙어 갑니다. 출발점을 y = 2.5로 올리고 h = 1로 하면 오일러는 첫 걸음에 아래로 튀어 발산합니다. ② 'y′ = −4(y − sin 2t)'에서 h = 0.5로 하면 오일러가 위아래로 지그재그합니다. h·4 = 2가 경계라는 것을 6절에서 봅니다. ③ RK4를 켜고 h = 1로 키워도 꽤 맞는 것을 보세요. 괄호 안 숫자는 f 계산 횟수입니다. 모델: 기준 해는 h = 0.002의 RK4.
룽게–쿠타 4차: 기울기 네 개의 가중 평균
같은 생각을 더 밀고 나가면, 한 걸음 안에서 기울기를 네 번 재서 테일러 전개의 4차 항까지 맞출 수 있습니다. 이것이 공학 계산의 표준 도구인 룽게–쿠타 4차 방법(classical Runge–Kutta, RK4)입니다.
k1: 왼쪽 끝, k2: k1로 반 걸음 간 중점, k3: k2로 다시 반 걸음 간 중점, k4: k3로 한 걸음 간 오른쪽 끝의 기울기. 한 걸음에 f를 네 번 계산한다.
가중치 1,2,2,1(합 6)이 낯익습니다. f가 t에만 의존하면(y′=f(t)) k2=k3=f(tn+h/2)이고 RK4는 6h(f(tn)+4f(tn+2h)+f(tn+h)), 바로 심프슨 공식입니다. 심프슨 공식이 4차인 것처럼 RK4도 4차입니다.
정리 5.8 (RK4는 4차)f가 충분히 매끄러우면 RK4의 국소 절단 오차는 O(h5), 전역 오차는 O(h4)이다.
선형 방정식에서 확인. 일반적인 증명은 다변수 테일러 전개의 긴 계산이지만, y′=λy에서는 바로 보인다. z=hλ라 하면 hk1=zyn, hk2=z(1+2z)yn, hk3=z(1+2z+4z2)yn, hk4=z(1+z+2z2+4z3)yn. 가중 평균을 정리하면
yn+1=(1+z+2z2+6z3+24z4)yn이고, 이는 참 해의 한 걸음 인자 ez의 테일러 다항식 4차까지와 정확히 같다. 차이는 z5/120부터다. ∎
예제 5.3 (RK4 한 걸음) 예제 5.2의 y′=t+y, y(0)=1, h=0.1을 RK4로 한 걸음 계산하라.
표의 마지막 열이 차수입니다. h를 반으로 줄이면 RK4의 오차는 24=16분의 1이 됩니다. 아래 시뮬레이터에서 기울기 네 개가 어디서 재어지는지 단계별로 보세요.
SIMULATOR
RK4 한 걸음 해부: 기울기 네 개 k₁ … k₄
출발점 (tₙ, yₙ)을 끌기
보일 단계
참 해k₁k₂k₃k₄RK4 걸음
k₁, k₂, k₃, k₄—
가중 평균 (k₁+2k₂+2k₃+k₄)/6—
RK4 yₙ₊₁ / 참값—
오차 RK4 · 오일러—
해볼 것: ① 단계를 k₁ → k₄로 넘기며 시험점(작은 원)이 반 걸음, 반 걸음, 한 걸음 위치에 놓이는 것을 보세요. ② 'y′ = 1 + y²'에서 출발점을 y = 1 위로 올리고 h를 키우면 해가 곧 폭발(4장)하므로 k₄가 매우 커집니다. RK4도 이런 곳에서는 작은 h가 필요합니다. ③ h를 반으로 줄이면 RK4 오차가 약 16분의 1이 됩니다. 모델: 참 해는 h/200의 RK4.
연립 방정식과 고계 방정식에 적용하기
큰 각도로 흔들리는 진자의 주기
길이 L인 진자의 각도는 θ′′=−Lgsinθ를 따릅니다. 작은 각도에서는 sinθ≈θ로 단진동(7장)이 되어 주기가 2πL/g이지만, 90°에서 놓으면 얼마일까요? 이 방정식은 2계이고 비선형입니다. 지금까지의 방법은 1계 스칼라 방정식용이었습니다.
요령은 두 가지입니다. 첫째, 고계 방정식은 1계 연립으로 바꿉니다. 각도 θ와 각속도 ω=θ′를 함께 상태로 보면 θ′=ω, ω′=−Lgsinθ입니다. 일반적으로 y(m)=F(t,y,y′,…,y(m−1))은 u=(y,y′,…,y(m−1))로 두면 u′=f(t,u) 꼴의 1계 연립이 됩니다(11장에서 다시 씁니다). 둘째, 오일러·호인·RK4의 식은 그대로 벡터에 적용됩니다. yn을 벡터 un으로, f를 벡터 함수로 읽기만 하면 됩니다.
그림 5-3. 2계 방정식의 상태는 위치와 속도의 쌍이다. 위상 평면(θ, ω)의 각 점에 화살표 f가 붙은 벡터장이 되고, 수치 해법은 1계 스칼라 때와 똑같이 이 화살표를 따라 걷는다.
예제 5.4 (진자의 오일러 한 걸음과 RK4 주기)g/L=1, θ(0)=π/2, ω(0)=0.
상태 u0=(1.5708,0), f(u0)=(0,−sin1.5708)=(0,−1).
오일러 h=0.1: u1=(1.5708,0)+0.1(0,−1)=(1.5708,−0.1). 각도는 그대로이고 속도만 생겼다.
RK4(h=0.001)로 θ가 처음 0이 되는 시각을 찾아 4배 하면 주기 T=7.4163. 작은 진동의 주기 2π=6.2832의 1.1803배다.
이 값은 타원 적분으로 표현되는 정확한 주기 4K(sin45°)와 소수 넷째 자리까지 일치한다. 수치 해법은 닫힌 꼴이 없거나 특수 함수가 필요한 답을 곧바로 준다.
진폭 θ₀
10°
30°
60°
90°
120°
150°
170°
주기 / 2π√(L/g)
1.0019
1.0174
1.0732
1.1803
1.3729
1.7622
2.4394
표는 RK4로 계산한 값입니다. 진폭 30°에서도 단진동 공식과 1.7%밖에 차이 나지 않으니 괘종시계의 작은 흔들림에는 단진동 근사가 충분하고, 180°에 가까워지면 진자가 꼭대기에서 오래 머물러 주기가 한없이 길어집니다. 위상 평면의 그림은 12장에서 다시 봅니다.
실무 메모 라이브러리 함수(solve_ivp, ode45)는 모두 1계 연립 u′=f(t,u) 꼴만 받습니다. 그래서 2계 방정식을 넘길 때는 항상 상태 벡터로 바꾸는 이 단계를 손으로 해야 합니다. 질량 m, 감쇠 c, 강성 k인 용수철이라면 f(t,(x,v))=(v,(F(t)−cv−kx)/m)입니다.
적응 간격: 걸음 폭을 스스로 고르기
혜성은 태양 근처에서만 빠르다
이심률이 큰 타원 궤도를 도는 혜성은 태양에서 멀 때는 느릿느릿 움직이다가 근일점을 순식간에 지나갑니다. 고정된 h를 쓰면 근일점에 맞춰 h를 아주 작게 해야 하는데, 그러면 궤도 대부분에서 걸음을 낭비합니다. 어려운 곳에서만 촘촘히 걸을 수는 없을까요?
걸음 폭을 고르려면 지금 걸음의 오차를 알아야 하는데, 참 해를 모르니 오차를 직접 잴 수는 없습니다. 대신 차수가 다른 두 방법으로 같은 걸음을 계산해 그 차이를 오차의 추정값으로 씁니다. 차수가 높은 쪽이 훨씬 정확하므로 차이는 거의 낮은 쪽의 오차입니다.
정의 5.9 (내장 쌍과 걸음 폭 조절) 같은 기울기 k1,…,ks를 다른 가중치로 조합해 p차 근사 yn+1과 p+1차 근사 y^n+1을 함께 만드는 룽게–쿠타 공식을 내장 쌍(embedded pair)이라 한다. 오차 추정 err=∣y^n+1−yn+1∣를 허용 오차 tol과 비교해
err≤tol이면 걸음을 받아들이고(정확한 쪽 y^를 쓴다),
그렇지 않으면 버리고 더 작은 h로 다시 시도한다.
어느 경우든 다음 걸음 폭은 hnew=0.9h(tol/err)1/(p+1)로 정한다.
마지막 식의 뜻은 간단합니다. 국소 오차가 Chp+1에 비례하므로, 오차를 tol로 맞추려면 h에 (tol/err)1/(p+1)을 곱하면 됩니다. 0.9는 다음 걸음이 다시 버려지지 않도록 두는 안전 계수입니다. 실무의 표준은 6단 공식 안에 4차와 5차 근사를 함께 담은 RK45 계열이며, ode45와 solve_ivp의 기본값인 도르만드–프린스 쌍(Dormand–Prince)도 그중 하나입니다.
그림 5-4. 적응 간격 제어. 오차 추정이 허용 오차보다 작으면 걸음을 채택하고 더 크게, 크면 버리고 더 작게 다시 걷는다. 사용자는 h 대신 원하는 정확도 tol을 준다.
SIMULATOR
적응 간격 점 찍기: 혜성 궤도의 도르만드–프린스 RK45
궤도 위 채택된 걸음 (색 = 걸음 폭)
걸음 폭 h(t), 로그 눈금
채택 / 버린 걸음—
최소 h · 최대 h—
한 바퀴 뒤 위치 오차—
같은 오차의 고정 RK4—
해볼 것: ① e = 0(원 궤도)에서는 점이 고르게 찍히고 h가 거의 일정합니다. ② e를 0.9로 키우면 근일점(오른쪽, 태양 근처)에서 점이 빽빽해지고 h가 수백 배 작아집니다. ③ tol을 100배 줄이면 걸음 수는 약 1001/5 ≈ 2.5배만 늘어납니다. 모델: 중력 상수 1, 장반경 1(주기 2π), 근일점에서 출발. 오차 척도는 tol·(1 + |y|), 처음 h = 0.01. 고정 RK4 걸음 수는 두 배씩 늘려 찾은 값입니다.
시뮬레이터에서 이심률을 0.9, tol을 10⁻⁶으로 두면 적응 방법은 한 바퀴에 54걸음을 채택하고(24번 버림) 위치 오차 약 9×10−4으로 돌아옵니다. 고정 간격 RK4로 같은 오차를 얻으려면 걸음 수를 두 배씩 늘려 찾았을 때 3200걸음이 필요합니다. 걸음 폭은 근일점 근처의 10⁻³ 수준부터 원일점 근처의 0.5 가까이까지 수백 배 바뀝니다. 적응 간격이 h를 고르는 일을 사용자에게서 덜어 줄 뿐 아니라 계산량도 몇 분의 1로 줄인 것입니다.
안정성 영역과 강성, 음적 오일러
정확도는 충분한데 해가 터진다
회로에 아주 빨리 사라지는 과도 성분(시상수 1 μs)과 천천히 변하는 신호(주기 1 ms)가 함께 있습니다. 우리가 보고 싶은 것은 느린 신호뿐이라 h=10 μs면 충분해 보입니다. 그런데 오일러 방법으로 돌리면 몇 걸음 만에 값이 1030으로 튑니다. 이미 사라진 빠른 성분이 왜 계산을 망칠까요?
이 현상을 이해하는 열쇠는 가장 단순한 방정식, 시험 방정식y′=λy입니다. λ는 복소수일 수도 있습니다(진동하는 성분). 실수부가 음수면 참 해 eλt는 0으로 줄어듭니다. 수치 해도 줄어드는가가 질문입니다. 앞 절의 계산처럼 어떤 룽게–쿠타 방법도 이 방정식에서는 yn+1=R(z)yn, z=hλ 꼴이 됩니다.
정의 5.10 (안정성 함수와 절대 안정 영역) 시험 방정식에 적용한 한 걸음 인자 R(z)를 그 방법의 안정성 함수(stability function), 복소평면에서 ∣R(z)∣≤1인 z=hλ의 집합을 절대 안정 영역(region of absolute stability)이라 한다.
정리 5.11 (오일러 방법의 안정 조건) 오일러 방법의 절대 안정 영역은 −1을 중심으로 하는 반지름 1인 원판 ∣1+z∣≤1이다. 특히 λ<0인 실수이면 수치 해가 줄어들 조건은
h≤∣λ∣2
이고, h>2/∣λ∣이면 ∣yn∣=∣1+hλ∣n∣y0∣가 부호를 바꾸며 지수적으로 커진다. 순허수 λ=iω(감쇠 없는 진동)에서는 어떤 h>0도 ∣1+ihω∣>1이라 진폭이 항상 커진다.
RK4의 영역은 더 넓어서 실수축에서는 −2.785≤z≤0, 허수축에서는 ∣z∣≤22≈2.83까지 안정합니다. 그래도 크기가 유한하다는 점은 같습니다. 명시적 방법(다음 값을 이미 아는 값으로만 계산하는 방법)의 R(z)는 다항식이고, 다항식은 ∣z∣→∞에서 커지므로 영역은 언제나 유한합니다.
SIMULATOR
안정성 영역 지도: z = hλ를 끌어 보기
복소평면 z = hλ: 칠한 곳이 |R(z)| ≤ 1
Re yₙ = Re R(z)ⁿ (점) vs 참 해 Re e^(zn) (선)
방법
z = hλ—
|R(z)|—
참 해 인자 |ez|—
판정—
해볼 것: ① 오일러에서 z = −2.5로 두면 참 해는 줄어드는데 수치 해는 부호를 바꾸며 커집니다. 호인으로 바꿔도 불안정, RK4는 안정합니다(경계 −2.785). ② z = 1.5i(감쇠 없는 진동)에서 오일러·호인은 진폭이 커지고, RK4는 거의 유지, 음적 오일러는 줄어듭니다. ③ 음적 오일러는 왼쪽 반평면 전체가 칠해져 있습니다. 모델: y₀ = 1, n = 0 … 30.
이제 문제 상자의 회로를 이해할 수 있습니다. 다음 방정식은 해가 cost를 따라가는 느린 성분과 e−λt로 사라지는 빠른 과도 성분을 함께 가집니다.
y′=−λ(y−cost)−sint,y(0)=0⟹y(t)=cost−e−λt.
대입 확인: y′=−sint+λe−λt이고 −λ(y−cost)−sint=λe−λt−sint. 같다.
λ=50이면 과도 성분은 t=0.1 무렵 이미 e−5≈0.007로 사라지고, 그 뒤의 해는 cost처럼 매끄럽습니다. 정확도만 보면 h=0.1이면 충분합니다. 그러나 오일러 방법의 오차는 매 걸음 1−hλ=−4배로 증폭되므로 h≤2/50=0.04를 지켜야 합니다. 해의 모양이 아니라 이미 사라진 성분의 빠르기가 걸음 폭을 묶는 것, 이것이 강성입니다.
정의 5.12 (강성) 해의 관심 있는 부분은 천천히 변하는데, 방정식(의 야코비안)에 실수부가 크게 음수인 고유값이 있어서 명시적 방법의 걸음 폭이 정확도가 아니라 안정성 때문에 제한되는 문제를 강성(stiff) 문제라 한다. 시상수의 비가 클수록(예: 1 μs와 1 ms) 강성이 심하다.
처방은 오른쪽 끝의 기울기를 쓰는 것입니다. yn+1=yn+hf(tn+1,yn+1)은 구하려는 yn+1이 양변에 있는 방정식이라 매 걸음 그것을 풀어야 합니다(선형이면 나눗셈 한 번, 비선형이면 뉴턴 반복). 대신 시험 방정식에서 yn+1=yn+hλyn+1, 곧 R(z)=1/(1−z)이고, Rez<0이면 ∣1−z∣>1이라 언제나 ∣R∣<1입니다.
정리 5.13 (음적 오일러는 A-안정)음적 오일러 방법(backward Euler)yn+1=yn+hf(tn+1,yn+1)의 절대 안정 영역은 왼쪽 반평면 Rez≤0을 모두 포함한다. 이런 방법을 A-안정(A-stable)이라 한다. 따라서 감쇠하는 성분이 아무리 빨라도 h는 정확도만으로 고를 수 있다. 정확도는 오일러와 같은 1차다.
예제 5.5 (강성 방정식, λ = 50) 위 방정식을 t=2까지 풀어 참값 y(2)=cos2−e−100=−0.41615와 비교하라.
음적 오일러를 선형 방정식에 쓰면 yn+1=yn+h(−λ(yn+1−costn+1)−sintn+1)를 yn+1에 대해 풀어 yn+1=1+hλyn+h(λcostn+1−sintn+1).
오일러 h=0.03 (hλ=1.5): y(2)≈−0.4253. 안정하다.
오일러 h=0.041 (hλ=2.05): y(2)≈10.5. 경계를 조금 넘자 오차가 걸음마다 1.05배씩 자랐다.
음적 오일러 h=0.1 (hλ=5): y(2)≈−0.4158. 걸음 20번으로 소수 셋째 자리까지 맞다. λ=1000으로 바꿔도 h=0.1에서 −0.41613이다.
SIMULATOR
강성 방정식: 명시적 오일러의 폭발 vs 음적 오일러
참 해 cos t − e−λt명시적 오일러음적 오일러RK4
hλ—
증폭률 |1 − hλ| · 1/(1 + hλ)—
최대 오차 (t ≥ 0.5) 명시적—
음적—
해볼 것: ① λ = 50에서 h를 0.03 → 0.04 → 0.05로 올리며 hλ = 2를 넘는 순간 명시적 오일러가 지그재그로 터지는 것을 보세요. ② λ를 1000으로 올리면 명시적 오일러는 h = 0.002 이하가 필요하지만, 음적 오일러는 h = 0.2에서도 cos t를 따라갑니다. ③ RK4를 켜면 경계가 hλ ≈ 2.79로 조금 늘 뿐입니다. 모델: y(0) = 0, t ∈ [0, 3]. 화면 밖으로 나간 값은 잘립니다.
회로 시뮬레이터 SPICE가 사다리꼴 공식이나 후방 차분 공식(BDF) 같은 음적 방법을 쓰는 것, MATLAB이 강성 문제용으로 ode15s를 따로 두는 것이 이 때문입니다. 화학 반응(빠른 반응과 느린 반응이 섞인 계), 열 방정식을 격자로 나눈 연립 방정식(16장의 r≤1/2 조건)도 대표적인 강성 문제입니다.
에너지 보존: 심플렉틱 오일러와 궤도 계산
행성이 태양에서 멀어진다
원 궤도를 도는 행성을 오일러 방법으로 h=0.05(한 바퀴에 약 126걸음)로 계산하면 열 바퀴 뒤 궤도 반지름이 1에서 3.09로 커집니다. 걸음을 줄이면 늦출 수는 있지만, 오래 돌리면 결국 행성은 날아가 버립니다. 물리 법칙은 에너지를 보존하는데 왜 수치 해는 그러지 않을까요?
용수철 x′′=−x(위상 평면의 원 운동)에서 정확히 계산해 볼 수 있습니다. 오일러 방법은 xn+1=xn+hvn, vn+1=vn−hxn이고, 에너지 x2+v2를 계산하면
교차항 2hxnvn이 서로 지워진다. 매 걸음 에너지가 정확히 1+h2배가 된다. 정리 5.11의 순허수 경우 ∣1+ih∣2=1+h2와 같은 이야기다.
h=0.1로 100걸음(t=10, 1.6바퀴)이면 1.01100=2.70배, 에너지가 거의 세 배가 됩니다. 이제 아주 작은 수정을 해 봅시다. 속도를 먼저 갱신하고, 새 속도로 위치를 갱신합니다.
정의 5.14 (심플렉틱 오일러)x′′=a(x)(가속도가 위치에만 의존)에 대해
vn+1=vn+ha(xn),xn+1=xn+hvn+1
로 걷는 방법을 심플렉틱 오일러(symplectic Euler) 또는 반음적 오일러라 한다. 계산량은 오일러와 똑같고 차수도 1차다.
x′′=−x에서 한 걸음은 행렬 [xn+1vn+1]=[1−h2−hh1][xnvn]이고 행렬식은 (1−h2)+h2=1입니다. 오일러 행렬 [1−hh1]의 행렬식은 1+h2입니다. 행렬식이 1이라는 것은 위상 평면의 넓이를 보존한다는 뜻이고(LinearBook: 행렬식), 이것이 2차원에서 "심플렉틱"의 의미입니다. 참 해의 흐름도 넓이를 보존하는데(해밀턴 계의 리우빌 정리), 오일러는 이 성질을 깨고 심플렉틱 오일러는 지킵니다.
정리 5.15 (심플렉틱 오일러의 보존량)x′′=−x에 심플렉틱 오일러를 쓰면 ∣h∣<2일 때 수정된 에너지
E~=xn2+vn2−hxnvn
가 모든 n에서 정확히 일정하다. 따라서 참 에너지 x2+v2는 h에 비례하는 폭으로 진동할 뿐 한 방향으로 새지 않는다.
RK4는 어떨까요? 정확도가 높아 에너지 오차가 매우 작지만 심플렉틱은 아닙니다. x′′=−x에서 ∣R(ih)∣2=1−h6/72+h8/576이라 에너지가 매 걸음 아주 조금씩 줄어듭니다(h=0.1이면 걸음당 1.4×10−8). 짧은 계산에서는 RK4가 압도적으로 낫지만, 수억 걸음을 도는 태양계 장기 적분이나 분자 동역학에서는 이 꾸준한 표류가 문제가 되어 심플렉틱 방법(속도 베를레 등)을 씁니다. 게임 물리 엔진이 흔히 반음적 오일러를 쓰는 것도 같은 이유입니다.
SIMULATOR
행성 궤도의 에너지 표류: 오일러 vs 심플렉틱 오일러 vs RK4
궤도 (태양 = 원점, GM = 1)
에너지 E(t) = v²/2 − 1/r
에너지 축
오일러심플렉틱 오일러RK4참 궤도 / 처음 에너지
시간 (바퀴 수)—
ΔE/|E₀| 오일러—
심플렉틱—
RK4—
해볼 것: ① ▶로 돌리면 오일러 궤도는 바깥으로 나선을 그리며 에너지가 0(탈출)을 향해 오릅니다. ② 심플렉틱 오일러는 궤도가 조금 기울어진 타원으로 돌아가지만(세차) 에너지는 띠 안에서만 오르내립니다. '확대'로 보세요. ③ h = 0.2로 키우면 RK4의 에너지가 서서히 한쪽으로 미끄러지는 것이 보입니다. 같은 h에서 심플렉틱 오일러는 오르내릴 뿐입니다. 모델: 2체 문제 x″ = −x/r³, 처음 위치 (1, 0), 속도 (0, v₀).
이 도구가 쓰이는 곳
교과서의 방정식은 대부분 손으로 풀리지만, 실제 공학의 방정식은 대부분 수치로만 풀립니다. 그래서 어떤 방법이 어떤 문제에 맞는지 고르는 눈이 중요합니다.