도구스학업·수학

미분방정식 수치해(오일러·RK4) 계산기

dy/dx = f(x, y)를 오일러·개선오일러·RK4로 같이 풀어 나란히 보여 줍니다. h를 반씩 줄이며 오차가 1/2·1/4·1/16로 주는 것을 표로 보여 차수의 뜻을 눈으로 확인할 수 있습니다.

예제

x와 y를 씁니다. 곱은 x*y처럼 별표로 쓰세요 — xy는 «xy라는 이름»으로 읽혀 거절됩니다.

걸음

h = (끝 x − 시작 x) ÷ n = 0.1

알고 있으면 넣으세요. 오차와 수렴 차수를 함께 냅니다. x만 씁니다.

x = 1에서의 y

2.71827974

RK4 기준입니다. 참값 2.71828183과의 오차는 2.084e-6으로 추정됩니다

오일러 (1차)2.59374246 · 오차 0.12453937
개선오일러 (2차)2.71408085 · 오차 0.00420098
RK4 (4차)2.71827974 · 오차 2.084e-6
한 걸음 크기 h0.1
걸음 수10

세 방법의 자취

굵은 파랑이 RK4, 짧은 파선이 개선오일러, 긴 파선이 오일러입니다. 회색 굵은 선이 해석해입니다. h가 크면 오일러가 눈에 띄게 벌어집니다.

h를 반씩 줄이면 오차가 얼마나 주는가 — 차수가 여기 보입니다

nh오일러 오차개선 오차RK4 오차
100.11.25e-14.20e-32.08e-6
200.056.50e-20.5221.09e-30.261.36e-70.065
400.0253.32e-20.5112.78e-40.2558.67e-90.064
800.01251.68e-20.5067.01e-50.2525.47e-100.063
1600.006258.45e-30.5031.76e-50.2513.44e-110.063

«비»는 앞 줄 대비 오차입니다. 오일러가 0.5, 개선오일러가 0.25, RK4가 0.0625(=1/16)에 가까워지는 것이 각각 1·2·4차라는 뜻입니다.

걸음마다의 값

x오일러개선오일러RK4참값
01111
0.11.11.1051.105170831.10517092
0.21.211.2210251.221402571.22140276
0.31.3311.349232631.34985851.34985881
0.41.46411.490902051.491824241.4918247
0.51.610511.647446771.648720641.64872127
0.61.7715611.820428681.822117961.8221188
0.71.94871712.011573692.013751632.01375271
0.82.143588812.222788922.225539562.22554093
0.92.357947692.456181762.459601412.45960311
12.593742462.714080852.718279742.71828183
차수가 1, 2, 4라는 것은 이런 뜻입니다. h를 반으로 줄이면 구간 전체에 쌓인 오차가 오일러는 1/2, 개선오일러는 1/4, RK4는 1/16로 줄어듭니다. 위 표의 «비» 칸이 바로 그 숫자입니다.그래서 한 걸음에 f를 네 번 부르는 RK4가, 한 번만 부르는 오일러보다 압도적으로 쌉니다. 같은 정확도를 얻는 데 필요한 걸음 수가 비교가 안 되기 때문입니다. 위 예제에서 오일러가 160걸음으로 낸 정확도를 RK4는 10걸음으로 이미 넘어섭니다.
h를 계속 줄이면 좋아지기만 할까요 — 아닙니다. 자름오차는 h와 함께 줄지만 반올림오차는 걸음 수에 따라 늘어납니다. 배정도 실수는 유효숫자가 16자리뿐이라, 걸음이 아주 많아지면 매 걸음의 반올림이 쌓여 자름오차를 앞지릅니다.그래서 h를 줄이다 보면 어느 지점부터 오차가 다시 커집니다. RK4는 자름오차가 워낙 작아 이 지점이 일찍 옵니다 — 위 표에서 RK4의 «비»가 0.0625를 지나 흐트러지기 시작하면 그 자리입니다.
강성 방정식은 h를 줄이는 것으로 풀리지 않기도 합니다. y′ = −1000y의 해는 매끈하게 0으로 사그라드는데, 수치해만 진동하며 커집니다. 계산이 터졌다고 방정식을 의심하면 안 됩니다.안정 조건을 맞추려고 h를 아주 작게 잡으면 걸음 수가 감당이 안 됩니다. 이런 문제에는 음함수법(후진오일러 등)이 필요하며 이 계산기의 범위 밖입니다. 위 «강성» 예제를 걸음 수 20, 40, 100으로 바꿔 가며 눌러 보면 차이가 보입니다.
식을 쓸 때의 규칙 하나. 숫자 뒤의 곱은 생략할 수 있어 «2x»는 2*x로 읽지만, 이름끼리는 붙여 쓸 수 없습니다. «xy»는 x 곱하기 y가 아니라 «xy라는 모르는 이름»으로 읽혀 거절됩니다. «x*y»라고 쓰세요. 조용히 다른 뜻으로 읽히는 것보다 거절하는 편이 안전하기 때문입니다.1계 단일 방정식만 풉니다. 연립이나 2계 이상은 벡터로 바꿔야 하는데 입력이 복잡해져 다루지 않습니다.입력한 값은 브라우저 안에서만 계산되며 서버로 전송되지 않습니다.

계산 방법

  1. 1예제 버튼을 누르거나 dy/dx = f(x, y)를 직접 씁니다. 곱은 x*y처럼 별표로 씁니다.
  2. 2시작점 (x₀, y₀)과 어디까지 풀지를 넣습니다.
  3. 3걸음 수를 정합니다. h는 (끝 x − 시작 x) ÷ 걸음 수입니다.
  4. 4해석해를 알면 넣으세요. 오차와 수렴 차수를 함께 냅니다.
  5. 5세 방법의 자취와 걸음마다의 값, 그리고 h를 반씩 줄인 오차 표를 봅니다.

자주 묻는 질문

기울기를 몇 번 보느냐가 다릅니다. 오일러는 지금 자리의 기울기 하나로 직선처럼 밀고 나가고, 개선오일러는 끝의 기울기까지 평균 내며, RK4는 가운데를 두 번 더 봐서 네 기울기를 가중평균합니다. 한 걸음에 f를 각각 1·2·4번 부릅니다.

h를 반으로 줄일 때 오차가 얼마나 주는지를 말합니다. 1차인 오일러는 오차가 1/2, 2차인 개선오일러는 1/4, 4차인 RK4는 1/16로 줄어듭니다. 이 계산기는 h를 반씩 줄인 오차 표를 함께 내는데, 그 «비» 칸이 0.5·0.25·0.0625에 가까워지는 것이 바로 차수입니다.

같은 정확도를 훨씬 적은 걸음으로 내기 때문입니다. dy/dx = y를 x=1까지 풀면 오일러가 160걸음으로 낸 정확도를 RK4는 10걸음으로 이미 넘어섭니다. 한 걸음의 비용이 4배여도 걸음 수가 비교가 안 되게 줄어 전체로는 훨씬 쌉니다.

아닙니다. 자름오차는 h와 함께 줄지만 반올림오차는 걸음 수에 따라 늘어납니다. 배정도 실수는 유효숫자가 16자리뿐이라 걸음이 아주 많아지면 매 걸음의 반올림이 쌓여 자름오차를 앞지릅니다. 그래서 어느 지점부터는 h를 줄여도 오차가 다시 커지며, 자름오차가 워낙 작은 RK4는 그 지점이 일찍 옵니다.

h가 너무 클 가능성이 큽니다. 아주 빠르게 사그라드는 성분이 섞인 방정식(강성)에서는 h가 조금만 커도 수치해가 진동하며 커집니다. 오일러의 안정 조건은 |1 + hλ| < 1이라 y′ = −1000y면 h < 0.002여야 하고, RK4는 hλ > −2.785까지 버팁니다. 걸음 수를 늘려 보세요.

음함수법(후진오일러, BDF 등)이 필요하며 이 계산기의 범위 밖입니다. 안정 조건을 맞추려고 h를 아주 작게 잡으면 걸음 수가 감당이 안 되기 때문입니다. 해는 매끈하게 사그라드는데 수치해만 진동하는 것이므로, 계산이 터졌다고 방정식을 의심하면 안 됩니다.

«xy»가 x 곱하기 y가 아니라 «xy라는 이름» 하나로 읽히기 때문입니다. 여러 글자를 한 이름으로 집어야 sin이나 atan2 같은 함수 이름을 쓸 수 있어서입니다. 곱은 «x*y»라고 명시하세요. 다만 숫자 뒤의 곱은 생략할 수 있어 «2x»는 2*x로 읽습니다.

이 계산기로는 안 됩니다. 1계 단일 방정식만 풉니다. 2계는 y′ = v, v′ = f(x, y, v)처럼 1계 연립으로 바꿔야 하는데 입력이 복잡해져 다루지 않습니다.

넣지 않아도 풉니다. 다만 해석해를 넣으면 오차와 수렴 차수 표를 함께 볼 수 있어, 지금 h가 충분히 작은지 판단하는 데 도움이 됩니다. 해석해를 모르는 경우에는 걸음 수를 두 배로 늘려 값이 거의 안 변하는지 보는 것이 실무적인 방법입니다.

전송되지 않습니다. 모든 계산은 브라우저 안에서 이루어지며 입력값은 이 기기에만 남습니다.

알아두면 좋은 점

  • 오일러·개선오일러(호이네)·RK4를 같은 자료에 나란히 돌립니다. 값은 같은 알고리즘을 numpy로 다시 돌려 대조했습니다.
  • h를 반씩 줄인 오차 표가 이 계산기의 요점입니다. 오차비가 0.5·0.25·0.0625로 가는 것이 차수 1·2·4의 뜻입니다.
  • 식은 eval 없이 자체 파서로 읽습니다. 이름끼리 붙여 쓴 xy는 x*y가 아니라 모르는 이름으로 거절됩니다.
  • 값이 너무 커지면 그 걸음에서 멈추고 발산으로 표시합니다.
  • 강성 방정식은 h를 줄이는 것만으로는 실용적이지 않습니다. 음함수법이 필요하며 범위 밖입니다.
  • 1계 단일 방정식만 풉니다. 연립·2계 이상은 다루지 않습니다.
  • 입력한 값은 브라우저 안에서만 계산되며 서버로 전송되지 않습니다.

함께 보면 좋은 도구

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