RK4

Contents

RK4#

class brainpy.integrators.ode.RK4(f, var_type=None, dt=None, name=None, show_code=False, state_delays=None, neutral_delays=None)[source]#

Classical fourth-order Runge-Kutta method for ODEs.

For the given initial value problem of

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

The fourth-order RK method is formulated as:

\[\begin{split}\begin{aligned} y_{n+1}&=y_{n}+{\frac {1}{6}}h\left(k_{1}+2k_{2}+2k_{3}+k_{4}\right),\\ t_{n+1}&=t_{n}+h\\ \end{aligned}\end{split}\]

for \(n = 0, 1, 2, 3, \cdot\), using

\[\begin{split}\begin{aligned} k_{1}&=\ f(t_{n},y_{n}),\\ k_{2}&=\ f\left(t_{n}+{\frac {h}{2}},y_{n}+h{\frac {k_{1}}{2}}\right),\\ k_{3}&=\ f\left(t_{n}+{\frac {h}{2}},y_{n}+h{\frac {k_{2}}{2}}\right),\\ k_{4}&=\ f\left(t_{n}+h,y_{n}+hk_{3}\right). \end{aligned}\end{split}\]

Here \(y_{n+1}\) is the RK4 approximation of \(y(t_{n+1})\), and the next value (\(y_{n+1}\)) is determined by the present value (\(y_{n}\)) plus the weighted average of four increments, where each increment is the product of the size of the interval, \(h\), and an estimated slope specified by function \(f\) on the right-hand side of the differential equation.

  • \(k_{1}\) is the slope at the beginning of the interval, using \(y\) (Euler’s method);

  • \(k_{2}\) is the slope at the midpoint of the interval, using \(y\) and \(k_{1}\);

  • \(k_{3}\) is again the slope at the midpoint, but now using \(y\) and \(k_{2}\);

  • \(k_{4}\) is the slope at the end of the interval, using \(y\) and \(k_{3}\).

The RK4 method is a fourth-order method, meaning that the local truncation error is on the order of (\(O(h^{5}\)), while the total accumulated error is on the order of (\(O(h^{4}\)).

The corresponding Butcher tableau is:

\[\begin{split}\begin{array}{c|cccc} 0 & 0 & 0 & 0 & 0 \\ 1 / 2 & 1 / 2 & 0 & 0 & 0 \\ 1 / 2 & 0 & 1 / 2 & 0 & 0 \\ 1 & 0 & 0 & 1 & 0 \\ \hline & 1 / 6 & 1 / 3 & 1 / 3 & 1 / 6 \end{array}\end{split}\]

References