Explicit Runge-Kutta Methods#

This module provides explicit Runge-Kutta methods for ODEs.

Given an initial value problem specified as:

\[\frac{dy}{dt}=f(t,y),\quad y(t_{0})=y_{0}.\]

Let the step-size \(h > 0\).

Then, the general schema of explicit Runge–Kutta methods is 1:

\[y_{n+1}=y_{n}+h\sum _{i=1}^{s}b_{i}k_{i},\]


\[\begin{split}\begin{aligned} k_{1}&=f(t_{n},y_{n}),\\ k_{2}&=f(t_{n}+c_{2}h,y_{n}+h(a_{21}k_{1})),\\ k_{3}&=f(t_{n}+c_{3}h,y_{n}+h(a_{31}k_{1}+a_{32}k_{2})),\\ &\\ \vdots \\ k_{s}&=f(t_{n}+c_{s}h,y_{n}+h(a_{s1}k_{1}+a_{s2}k_{2}+\cdots +a_{s,s-1}k_{s-1})). \end{aligned}\end{split}\]

To specify a particular method, one needs to provide the integer \(s\) (the number of stages), and the coefficients \(a_{ij}\) (for \(1 \le j < i \le s\)), \(b_i\) (for \(i = 1, 2, \cdots, s\)) and \(c_i\) (for \(i = 2, 3, \cdots, s\)).

The matrix \([a_{ij}]\) is called the Runge–Kutta matrix, while the \(b_i\) and \(c_i\) are known as the weights and the nodes. These data are usually arranged in a mnemonic device, known as a Butcher tableau (named after John C. Butcher):

\[\begin{split}\begin{array}{c|llll} 0 & & & & & \\ c_{2} & a_{21} & & & & \\ c_{3} & a_{31} & a_{32} & & & \\ \vdots & \vdots & & \ddots & \\ c_{s} & a_{s 1} & a_{s 2} & \cdots & a_{s, s-1} \\ \hline & b_{1} & b_{2} & \cdots & b_{s-1} & b_{s} \end{array}\end{split}\]

A Taylor series expansion shows that the Runge–Kutta method is consistent if and only if

\[\sum _{i=1}^{s}b_{i}=1.\]

Another popular condition for determining coefficients is:

\[\sum_{j=1}^{i-1}a_{ij}=c_{i}{\text{ for }}i=2,\ldots ,s.\]

More details please see references 2 3 4.


Press, W. H., B. P. Flannery, S. A. Teukolsky, and W. T. Vetterling. “Section 17.1 Runge-Kutta Method.” Numerical Recipes: The Art of Scientific Computing (2007).




Butcher, John Charles. Numerical methods for ordinary differential equations. John Wiley & Sons, 2016.


Iserles, A., 2009. A first course in the numerical analysis of differential equations (No. 44). Cambridge university press.

ExplicitRKIntegrator(f[, var_type, dt, ...])

Explicit Runge–Kutta methods for ordinary differential equation.

Euler(f[, var_type, dt, name, show_code, ...])

The Euler method for ODEs.

MidPoint(f[, var_type, dt, name, show_code, ...])

Explicit midpoint method for ODEs.

Heun2(f[, var_type, dt, name, show_code, ...])

Heun's method for ODEs.

Ralston2(f[, var_type, dt, name, show_code, ...])

Ralston's method for ODEs.

RK2(f[, beta, var_type, dt, name, ...])

Generic second order Runge-Kutta method for ODEs.

RK3(f[, var_type, dt, name, show_code, ...])

Classical third-order Runge-Kutta method for ODEs.

Heun3(f[, var_type, dt, name, show_code, ...])

Heun's third-order method for ODEs.

Ralston3(f[, var_type, dt, name, show_code, ...])

Ralston's third-order method for ODEs.

SSPRK3(f[, var_type, dt, name, show_code, ...])

Third-order Strong Stability Preserving Runge-Kutta (SSPRK3).

RK4(f[, var_type, dt, name, show_code, ...])

Classical fourth-order Runge-Kutta method for ODEs.

Ralston4(f[, var_type, dt, name, show_code, ...])

Ralston's fourth-order method for ODEs.

RK4Rule38(f[, var_type, dt, name, ...])

3/8-rule fourth-order method for ODEs.