Trait bacon_sci::ivp::BDFSolver

source ·
pub trait BDFSolver<N, const S: usize, const O: usize>: Sizedwhere
    N: ComplexField,{
    // Required methods
    fn higher_coefficients() -> SVector<N::RealField, O>;
    fn lower_coefficients() -> SVector<N::RealField, O>;
    fn solve_ivp<T: Clone, F: FnMut(N::RealField, &[N], &mut T) -> Result<SVector<N, S>, String>>(
        self,
        f: F,
        params: &mut T
    ) -> Result<Vec<(N::RealField, SVector<N, S>)>, String>;
    fn with_tolerance(self, tol: N::RealField) -> Result<Self, String>;
    fn with_dt_max(self, max: N::RealField) -> Result<Self, String>;
    fn with_dt_min(self, min: N::RealField) -> Result<Self, String>;
    fn with_start(self, t_initial: N::RealField) -> Result<Self, String>;
    fn with_end(self, t_final: N::RealField) -> Result<Self, String>;
    fn with_initial_conditions(self, start: &[N]) -> Result<Self, String>;
    fn build(self) -> Self;
}
Expand description

This trait allows a struct to be used in the BDF

Types implementing BDFSolver should have a BDFInfo to handle the actual IVP solving. O should be one more than the order of the higher-order solver (to allow room for the coefficient on f).

Examples

See struct BDF6 for an example of implementing this trait.

Required Methods§

source

fn higher_coefficients() -> SVector<N::RealField, O>

The polynomial interpolation coefficients for the higher-order method. Should start with the coefficient for the derivative function without h, then n - 1. The coefficients for the previous terms should have the sign as if they’re on the same side of the = as the next state.

source

fn lower_coefficients() -> SVector<N::RealField, O>

The polynomial interpolation coefficients for the lower-order method. Must be one less in length than higher_coefficients. Should start with the coefficient for the derivative function without h, then n-1. The coefficients for the previous terms should have the sign as if they’re on the same side of the = as the next state.

source

fn solve_ivp<T: Clone, F: FnMut(N::RealField, &[N], &mut T) -> Result<SVector<N, S>, String>>( self, f: F, params: &mut T ) -> Result<Vec<(N::RealField, SVector<N, S>)>, String>

Use BDFInfo to solve an initial value problem

source

fn with_tolerance(self, tol: N::RealField) -> Result<Self, String>

Set the error tolerance for this solver.

source

fn with_dt_max(self, max: N::RealField) -> Result<Self, String>

Set the maximum time step for this solver.

source

fn with_dt_min(self, min: N::RealField) -> Result<Self, String>

Set the minimum time step for this solver.

source

fn with_start(self, t_initial: N::RealField) -> Result<Self, String>

Set the initial time for this solver.

source

fn with_end(self, t_final: N::RealField) -> Result<Self, String>

Set the end time for this solver.

source

fn with_initial_conditions(self, start: &[N]) -> Result<Self, String>

Set the initial conditions for this solver.

source

fn build(self) -> Self

Build this solver.

Implementors§

source§

impl<N, const S: usize> BDFSolver<N, S, 3> for BDF2<N, S>where N: ComplexField + FromPrimitive + Copy, <N as ComplexField>::RealField: FromPrimitive + Copy, Const<S>: DimMin<Const<S>, Output = Const<S>>,

source§

impl<N, const S: usize> BDFSolver<N, S, 7> for BDF6<N, S>where N: ComplexField + FromPrimitive + Copy, <N as ComplexField>::RealField: FromPrimitive + Copy, Const<S>: DimMin<Const<S>, Output = Const<S>>,