Integrators for time stepping
This page describes how to solve ordinary differential equations numerically with examples from our library.
Introduction and notation
We are solving an initial value problem, given as
$ \begin{align*} \dot{y}(t) &= f(t, y) \\ y(t_0) &= y_0 \end{align*} $
where $y$ is the unknown (possibly vector) function, $t_0$ is the start time, $f$ is the derivative (the functions we wish to integrate) and $y_0$ is the initial value of $y$. Numerically, we usually choose a time step $\Delta t$ and integrate the function up to a certain time $t_{\max}$. Times os subsequent time steps are denoted with $t_i$ and function values with $y_i$.
The simplest method is explicit Euler's method: $y_{n+1} = y_{n} + \Delta t f(t, y_n)$
Explicit (single step) methods
A family of single step methods are exaplicit Runge-Kutta methods
It is given by $y_{n+1} = y_n + h \sum_{i=1}^s b_i k_i$ where
$ \begin{align*} k_1 & = f(t_n, y_n), \\ k_2 & = f(t_n+c_2h, y_n+h(a_{21}k_1)), \\ k_3 & = f(t_n+c_3h, y_n+h(a_{31}k_1+a_{32}k_2)), \\ & \ \ \vdots \\ k_s & = f(t_n+c_sh, y_n+h(a_{s1}k_1+a_{s2}k_2+\cdots+a_{s,s-1}k_{s-1})). \end{align*} $
To specify a particular method, one needs to provide the integer s (the number of stages), and the coefficients aij (for 1 ≤ j < i ≤ s), bi (for i = 1, 2, ..., s) and ci (for i = 2, 3, ..., s). The matrix [aij] is called the Runge–Kutta matrix, while the bi and ci are known as the weights and the nodes.[1] These data are usually arranged in a mnemonic device, known as a Butcher tableau (after John C. Butcher):