polykin.math.derivatives¤
ode_rk ¤
ode_rk(
f: Callable[[float, float], float],
t0: float,
tf: float,
y0: float,
h: float,
order: Literal[1, 2, 4] = 1,
) -> float
Integrate an ODE using a fixed-step Runge-Kutta scheme.
This method is intentionally simple, so that it can be used inside a gradient-based optimizer without creating numerical noise and overhead.
Important
This method is jitted with Numba and, thus, requires a JIT-compiled function.
PARAMETER | DESCRIPTION |
---|---|
f
|
Function to be integrated. Takes two arguments,
TYPE:
|
t0
|
Initial value of
TYPE:
|
tf
|
Final value of
TYPE:
|
y0
|
Initial value of
TYPE:
|
h
|
Step size.
TYPE:
|
order
|
Order of the method. Defaults to 1 (i.e., Euler).
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
float
|
Final value of |
Examples:
Find the solution of the differential equation \(y(t)'=y+t\) with initial condition \(y(0)=1\) at \(t=2\).
>>> from polykin.math import ode_rk
>>> from numba import njit
>>> def ydot(t, y):
... return y + t
>>> ode_rk(njit(ydot), 0., 2., 1., 1e-3, order=1)
11.763351307112204
>>> ode_rk(njit(ydot), 0., 2., 1., 1e-3, order=2)
11.778107275517668
>>> ode_rk(njit(ydot), 0., 2., 1., 1e-3, order=4)
11.778112197860988
Source code in src/polykin/math/derivatives/ode.py
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
|