BrainFM / ShapeID /DiffEqs /fixed_grid.py
peirong26's picture
Upload 187 files
2571f24 verified
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