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 \displaystyle \sum_{i=1}^s \beta_i k_i
where
\begin{align*} k_1 & = f(t_n, y_n), \\ k_2 & = f(t_n+\gamma_2h, y_n+h(\alpha_{21}k_1)), \\ k_3 & = f(t_n+\gamma_3h, y_n+h(\alpha_{31}k_1+\alpha_{32}k_2)), \\ & \ \ \vdots \\ k_s & = f(t_n+\gamma_sh, y_n+h(\alpha_{s1}k_1+\alpha_{s2}k_2+\cdots+\alpha_{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 \alpha_{ij}, \beta_i and \gamma_i. This structure is known as the Butcher's tableau of the method.