[ Home ] Numerical Methods. Note « 8 »

Lectures

Integration of ordinary differential equations

Many physical problems can be reformulated in terms of a system of ordinary differential equations y'(x) = f(x,y), with an initial condition y(0) = y0, where y and f(x,y) are generally understood as vectors (columns). The standard libraries for these systems are netlib.org/ode and netlib.org/odepack.

Runge-Kutta methods. These are one-step methods where the solution y is advanced by one step h as y1=y0+hk, where k is a cleverly chosen constant. The first order Runge-Kutta method is simply the Euler's method k=f(x0,y0). Second order Runge-Kutta method advances the solution by an auxiliary evaluation of the derivative:
k=k1/2 : k0 = f(x0,y0), y1/2 = y0 + h/2 k0, k1/2 = f(x1/2 ,y1/2), y1 = y0 + hk1/2
k= 1/2 (k0+k1) : k1 = f(x1,y0+hk0), y1 = y0 + h 1/2 (k0+k1).
The two methods can be combined into a third order method k= 1/6 k0 + 4/6 k1/2 + 1/6 k1. Higher order R-K methods have been devised, with the most noted being the famous Runge-Kutta-Fehlberg fourth-fifth order method implemented in the renowned rkf45 (now superseded by "ode/rksuite").

Step-size control. Tolerance tol is the maximal accepted error consistent with the required absolute acc and relative eps accuracies

 tol = max(eps*max(y),acc*√(h/b-a)). 
Error err is estimated from comparing the solution for a full-step and two half-steps (the Runge principle):
err = |y(h) - y(2(h/2))|/(2k-1).
The next step is estimated according to the prescription hnext=hprevious*(acc/err)power*Safety, where power∼0.25, Safety∼0.95

Bulirsch-Stoer methods. The idea is to evaluate y1 with several (ever smaller) step-sizes and then make an extrapolation to step-size zero.

Multi-step and predictor-corrector methods.

Problems
  1. Implement second-third order Runge-Kutta method with adaptive step-size for a single first order differential equation.
  2. With this routine integrate the equation y'(x)=1/1+x2 from a=-10 to b=10 with the initial condition y(a)=0.

"Copyleft" © 2001 D.V.Fedorov (fedorov@ifa.au.dk)