초기값 문제 y′=f(t,y)의 고전적 4단 Runge–Kutta(RK4) 방법은 한 step에서 기울기를 네 번 계산한다.
k1k2k3k4yn+1=f(tn,yn)=f(tn+2h, yn+2hk1)=f(tn+2h, yn+2hk2)=f(tn+h, yn+hk3)=yn+6h(k1+2k2+2k3+k4)
함수 rk4_step(f, t, y, h)를 완성해 yn+1을 반환한다.
f(t, y)는 시각 t(float)와 상태 y(shape (d,) 배열)를 받아 shape (d,) 배열을 돌려준다.
y는 리스트로 들어올 수도 있다. np.asarray(y, dtype=float)로 바꾸어 쓴다.
- 입력
y를 제자리에서 바꾸지 않는다.
테스트는 다음을 확인한다.
- y′=y, y0=1에서 한 step의 결과가 1+h+h2/2+h3/6+h4/24와 같다(RK4는 지수함수의 Taylor 전개를 4차까지 재현한다).
- y′=t3처럼 f가 t에만 의존하면 RK4는 Simpson 규칙이 되어 정확하다. 그래서
t를 각 단계에 올바르게 넘겨야 한다.
- 조화 진동자를 [0,2π]에서 풀 때 h를 절반으로 하면 전역 오차가 약 16배 준다(전역 4차).