File size: 739 Bytes
2571f24 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
from ShapeID.DiffEqs.solvers import FixedGridODESolver
import ShapeID.DiffEqs.rk_common as rk_common
class Euler(FixedGridODESolver):
def step_func(self, func, t, dt, y):
return tuple(dt * f_ for f_ in func(t, y))
@property
def order(self):
return 1
class Midpoint(FixedGridODESolver):
def step_func(self, func, t, dt, y):
y_mid = tuple(y_ + f_ * dt / 2 for y_, f_ in zip(y, func(t, y)))
return tuple(dt * f_ for f_ in func(t + dt / 2, y_mid))
@property
def order(self):
return 2
class RK4(FixedGridODESolver):
def step_func(self, func, t, dt, y):
return rk_common.rk4_alt_step_func(func, t, dt, y)
@property
def order(self):
return 4
|