numeric_algs/integration/
mod.rs1mod dormand_prince;
2mod rk4;
3mod rk8;
4use crate::traits::State;
5
6#[derive(Clone, Copy, Debug, PartialEq)]
7pub enum StepSize {
8 UseDefault,
9 Step(f64),
10}
11
12pub trait Integrator<S: State> {
13 fn propagate_in_place<D>(&mut self, start: &mut S, diff_eq: D, step: StepSize)
14 where
15 D: Fn(&S) -> S::Derivative;
16
17 fn propagate<D>(&mut self, start: &S, diff_eq: D, step: StepSize) -> S
18 where
19 D: Fn(&S) -> S::Derivative,
20 {
21 let mut result = start.clone();
22 self.propagate_in_place(&mut result, diff_eq, step);
23 result
24 }
25}
26
27pub use self::dormand_prince::DPIntegrator;
28pub use self::rk4::RK4Integrator;
29pub use self::rk8::RK8Integrator;