braincell.quad.rk2_step

Contents

braincell.quad.rk2_step#

braincell.quad.rk2_step(target, *args)[source]#

Advance one step with a generic second-order Runge-Kutta method.

The two-stage scheme used here is

\[\begin{split}k_1 &= f(t_n, y_n), \\ k_2 &= f\!\left(t_n + \tfrac{2}{3}\Delta t,\ y_n + \tfrac{2}{3}\Delta t \, k_1\right), \\ y_{n+1} &= y_n + \Delta t \left(\tfrac{1}{4} k_1 + \tfrac{3}{4} k_2\right).\end{split}\]

It coincides with Ralston’s two-stage method, which is the second-order explicit Runge-Kutta method that minimises the leading-order truncation error coefficient. Local truncation error is \(O(\Delta t^3)\) and global error is \(O(\Delta t^2)\).

Parameters:
  • target (DiffEqModule) – Differential-equation module to advance.

  • *args – Extra positional arguments forwarded to target’s integration hooks.

Returns:

Updates target’s state in place.

Return type:

None

Notes

Butcher tableau (rk2_tableau):

\[\begin{split}\begin{array}{c|cc} 0 & 0 & 0 \\ \tfrac{2}{3} & \tfrac{2}{3} & 0 \\ \hline & \tfrac{1}{4} & \tfrac{3}{4} \end{array}\end{split}\]

Examples

>>> import brainstate
>>> import brainunit as u
>>> from braincell.quad import rk2_step
>>> with brainstate.environ.context(t=0. * u.ms, dt=0.01 * u.ms):
...     rk2_step(my_neuron)