# brainpy.integrators.ode.explicit_rk.RK4#

class brainpy.integrators.ode.explicit_rk.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

1

Lambert, J. D. and Lambert, D. Ch. 5 in Numerical Methods for Ordinary Differential Systems: The Initial Value Problem. New York: Wiley, 1991.

2

Press, W. H.; Flannery, B. P.; Teukolsky, S. A.; and Vetterling, W. T. “Runge-Kutta Method” and “Adaptive Step Size Control for Runge-Kutta.” §16.1 and 16.2 in Numerical Recipes in FORTRAN: The Art of Scientific Computing, 2nd ed. Cambridge, England: Cambridge University Press, pp. 704-716, 1992.

__init__(f, var_type=None, dt=None, name=None, show_code=False, state_delays=None, neutral_delays=None)#

Methods

 __init__(f[, var_type, dt, name, show_code, ...]) build() load_states(filename[, verbose]) Load the model states. nodes([method, level, include_self]) Collect all children nodes. register_implicit_nodes(nodes) register_implicit_vars(variables) save_states(filename[, variables]) Save the model states. set_integral(f) Set the integral function. train_vars([method, level, include_self]) The shortcut for retrieving all trainable variables. unique_name([name, type_]) Get the unique name for this object. vars([method, level, include_self]) Collect all variables in this node and the children nodes.

Attributes

 A B C arg_names arguments All arguments when calling the numer integrator of the differential equation. dt The numerical integration precision. integral The integral function. name neutral_delays neutral delays. parameters The parameters defined in the differential equation. state_delays State delays. variables The variables defined in the differential equation.