pub struct DormandPrince {
pub abs_tol: Scalar,
pub rel_tol: Scalar,
pub dt_beta: Scalar,
pub dt_expn: Scalar,
pub dt_cut: Scalar,
pub dt_min: Scalar,
}Expand description
Explicit, six-stage, fifth-order, variable-step, Runge-Kutta method.1
\frac{dy}{dt} = f(t, y)t_{n+1} = t_n + hk_1 = f(t_n, y_n)k_2 = f(t_n + \tfrac{1}{5} h, y_n + \tfrac{1}{5} h k_1)k_3 = f(t_n + \tfrac{3}{10} h, y_n + \tfrac{3}{40} h k_1 + \tfrac{9}{40} h k_2)k_4 = f(t_n + \tfrac{4}{5} h, y_n + \tfrac{44}{45} h k_1 - \tfrac{56}{15} h k_2 + \tfrac{32}{9} h k_3)k_5 = f(t_n + \tfrac{8}{9} h, y_n + \tfrac{19372}{6561} h k_1 - \tfrac{25360}{2187} h k_2 + \tfrac{64448}{6561} h k_3 - \tfrac{212}{729} h k_4)k_6 = f(t_n + h, y_n + \tfrac{9017}{3168} h k_1 - \tfrac{355}{33} h k_2 - \tfrac{46732}{5247} h k_3 + \tfrac{49}{176} h k_4 - \tfrac{5103}{18656} h k_5)y_{n+1} = y_n + h\left(\frac{35}{384}\,k_1 + \frac{500}{1113}\,k_3 + \frac{125}{192}\,k_4 - \frac{2187}{6784}\,k_5 + \frac{11}{84}\,k_6\right)k_7 = f(t_{n+1}, y_{n+1})e_{n+1} = \frac{h}{5}\left(\frac{71}{11520}\,k_1 - \frac{71}{3339}\,k_3 + \frac{71}{384}\,k_4 - \frac{17253}{67840}\,k_5 + \frac{22}{105}\,k_6 - \frac{1}{8}\,k_7\right)J.R. Dormand and P.J. Prince, J. Comput. Appl. Math. 6, 19 (1980). ↩
Fields§
§abs_tol: ScalarAbsolute error tolerance.
rel_tol: ScalarRelative error tolerance.
dt_beta: ScalarMultiplier for adaptive time steps.
dt_expn: ScalarExponent for adaptive time steps.
dt_cut: ScalarCut back factor for the time step.
dt_min: ScalarMinimum value for the time step.
Trait Implementations§
Source§impl Debug for DormandPrince
impl Debug for DormandPrince
Source§impl Default for DormandPrince
impl Default for DormandPrince
Source§impl<F, Y, Z, U, V> ExplicitDaeFirstOrderMinimize<F, Y, Z, U, V> for DormandPrince
impl<F, Y, Z, U, V> ExplicitDaeFirstOrderMinimize<F, Y, Z, U, V> for DormandPrince
fn integrate( &self, evolution: impl FnMut(Scalar, &Y, &Z) -> Result<Y, String>, function: impl FnMut(Scalar, &Y, &Z) -> Result<F, String>, jacobian: impl FnMut(Scalar, &Y, &Z) -> Result<Z, String>, solver: impl FirstOrderOptimization<F, Z>, time: &[Scalar], initial_condition: (Y, Z), equality_constraint: impl FnMut(Scalar) -> EqualityConstraint, ) -> Result<(Vector, U, U, V), IntegrationError>
Source§impl<F, J, Y, Z, U, V> ExplicitDaeFirstOrderRoot<F, J, Y, Z, U, V> for DormandPrince
impl<F, J, Y, Z, U, V> ExplicitDaeFirstOrderRoot<F, J, Y, Z, U, V> for DormandPrince
fn integrate( &self, evolution: impl FnMut(Scalar, &Y, &Z) -> Result<Y, String>, function: impl FnMut(Scalar, &Y, &Z) -> Result<F, String>, jacobian: impl FnMut(Scalar, &Y, &Z) -> Result<J, String>, solver: impl FirstOrderRootFinding<F, J, Z>, time: &[Scalar], initial_condition: (Y, Z), equality_constraint: impl FnMut(Scalar) -> EqualityConstraint, ) -> Result<(Vector, U, U, V), IntegrationError>
Source§impl<F, J, H, Y, Z, U, V> ExplicitDaeSecondOrderMinimize<F, J, H, Y, Z, U, V> for DormandPrince
impl<F, J, H, Y, Z, U, V> ExplicitDaeSecondOrderMinimize<F, J, H, Y, Z, U, V> for DormandPrince
fn integrate( &self, evolution: impl FnMut(Scalar, &Y, &Z) -> Result<Y, String>, function: impl FnMut(Scalar, &Y, &Z) -> Result<F, String>, jacobian: impl FnMut(Scalar, &Y, &Z) -> Result<J, String>, hessian: impl FnMut(Scalar, &Y, &Z) -> Result<H, String>, solver: impl SecondOrderOptimization<F, J, H, Z>, time: &[Scalar], initial_condition: (Y, Z), equality_constraint: impl FnMut(Scalar) -> EqualityConstraint, banded: Option<Banded>, ) -> Result<(Vector, U, U, V), IntegrationError>
Source§impl<Y, Z, U, V> ExplicitDaeVariableStep<Y, Z, U, V> for DormandPrince
impl<Y, Z, U, V> ExplicitDaeVariableStep<Y, Z, U, V> for DormandPrince
fn slopes_solve( evolution: impl FnMut(Scalar, &Y, &Z) -> Result<Y, String>, solution: impl FnMut(Scalar, &Y, &Z) -> Result<Z, String>, y: &Y, z: &Z, t: Scalar, dt: Scalar, k: &mut [Y], y_trial: &mut Y, z_trial: &mut Z, ) -> Result<(), String>
fn slopes_solve_and_error( &self, evolution: impl FnMut(Scalar, &Y, &Z) -> Result<Y, String>, solution: impl FnMut(Scalar, &Y, &Z) -> Result<Z, String>, y: &Y, z: &Z, t: Scalar, dt: Scalar, k: &mut [Y], y_trial: &mut Y, z_trial: &mut Z, ) -> Result<Scalar, String>
fn step_solve( &self, _: impl FnMut(Scalar, &Y, &Z) -> Result<Y, String>, y: &mut Y, z: &mut Z, t: &mut Scalar, y_sol: &mut U, z_sol: &mut V, t_sol: &mut Vector, dydt_sol: &mut U, dt: &mut Scalar, k: &mut [Y], y_trial: &Y, z_trial: &Z, e: Scalar, ) -> Result<(), String>
fn integrate_explicit_dae_variable_step( &self, evolution: impl FnMut(Scalar, &Y, &Z) -> Result<Y, String>, solution: impl FnMut(Scalar, &Y, &Z) -> Result<Z, String>, time: &[Scalar], initial_condition: (Y, Z), ) -> Result<(Vector, U, U, V), IntegrationError>
fn interpolate_explicit_dae_variable_step( &self, evolution: impl FnMut(Scalar, &Y, &Z) -> Result<Y, String>, solution: impl FnMut(Scalar, &Y, &Z) -> Result<Z, String>, time: &Vector, tp: &Vector, yp: &U, zp: &V, ) -> Result<(U, U, V), IntegrationError>
Source§impl<F, Y, Z, U, V> ExplicitDaeVariableStepExplicitFirstOrderMinimize<F, Y, Z, U, V> for DormandPrince
impl<F, Y, Z, U, V> ExplicitDaeVariableStepExplicitFirstOrderMinimize<F, Y, Z, U, V> for DormandPrince
fn integrate_explicit_dae_variable_step_explicit_minimize_1( &self, evolution: impl FnMut(Scalar, &Y, &Z) -> Result<Y, String>, function: impl FnMut(Scalar, &Y, &Z) -> Result<F, String>, jacobian: impl FnMut(Scalar, &Y, &Z) -> Result<Z, String>, solver: impl FirstOrderOptimization<F, Z>, time: &[Scalar], initial_condition: (Y, Z), equality_constraint: impl FnMut(Scalar) -> EqualityConstraint, ) -> Result<(Vector, U, U, V), IntegrationError>
Source§impl<F, J, Y, Z, U, V> ExplicitDaeVariableStepExplicitFirstOrderRoot<F, J, Y, Z, U, V> for DormandPrince
impl<F, J, Y, Z, U, V> ExplicitDaeVariableStepExplicitFirstOrderRoot<F, J, Y, Z, U, V> for DormandPrince
fn integrate_explicit_dae_variable_step_explicit_root_1( &self, evolution: impl FnMut(Scalar, &Y, &Z) -> Result<Y, String>, function: impl FnMut(Scalar, &Y, &Z) -> Result<F, String>, jacobian: impl FnMut(Scalar, &Y, &Z) -> Result<J, String>, solver: impl FirstOrderRootFinding<F, J, Z>, time: &[Scalar], initial_condition: (Y, Z), equality_constraint: impl FnMut(Scalar) -> EqualityConstraint, ) -> Result<(Vector, U, U, V), IntegrationError>
Source§impl<F, J, H, Y, Z, U, V> ExplicitDaeVariableStepExplicitSecondOrderMinimize<F, J, H, Y, Z, U, V> for DormandPrince
impl<F, J, H, Y, Z, U, V> ExplicitDaeVariableStepExplicitSecondOrderMinimize<F, J, H, Y, Z, U, V> for DormandPrince
fn integrate_explicit_dae_variable_step_explicit_minimize_2( &self, evolution: impl FnMut(Scalar, &Y, &Z) -> Result<Y, String>, function: impl FnMut(Scalar, &Y, &Z) -> Result<F, String>, jacobian: impl FnMut(Scalar, &Y, &Z) -> Result<J, String>, hessian: impl FnMut(Scalar, &Y, &Z) -> Result<H, String>, solver: impl SecondOrderOptimization<F, J, H, Z>, time: &[Scalar], initial_condition: (Y, Z), equality_constraint: impl FnMut(Scalar) -> EqualityConstraint, banded: Option<Banded>, ) -> Result<(Vector, U, U, V), IntegrationError>
Source§impl<Y, Z, U, V> ExplicitDaeVariableStepExplicitZerothOrderRoot<Y, Z, U, V> for DormandPrince
impl<Y, Z, U, V> ExplicitDaeVariableStepExplicitZerothOrderRoot<Y, Z, U, V> for DormandPrince
fn integrate_explicit_dae_variable_step_explicit_root_0( &self, evolution: impl FnMut(Scalar, &Y, &Z) -> Result<Y, String>, function: impl FnMut(Scalar, &Y, &Z) -> Result<Z, String>, solver: impl ZerothOrderRootFinding<Z>, time: &[Scalar], initial_condition: (Y, Z), equality_constraint: impl FnMut(Scalar) -> EqualityConstraint, ) -> Result<(Vector, U, U, V), IntegrationError>
Source§impl<Y, Z, U, V> ExplicitDaeVariableStepFirstSameAsLast<Y, Z, U, V> for DormandPrince
impl<Y, Z, U, V> ExplicitDaeVariableStepFirstSameAsLast<Y, Z, U, V> for DormandPrince
fn slopes_solve_and_error_fsal( evolution: impl FnMut(Scalar, &Y, &Z) -> Result<Y, String>, solution: impl FnMut(Scalar, &Y, &Z) -> Result<Z, String>, y: &Y, z: &Z, t: Scalar, dt: Scalar, k: &mut [Y], y_trial: &mut Y, z_trial: &mut Z, ) -> Result<Scalar, String>
fn step_solve_fsal( &self, y: &mut Y, z: &mut Z, t: &mut Scalar, y_sol: &mut U, z_sol: &mut V, t_sol: &mut Vector, dydt_sol: &mut U, dt: &mut Scalar, k: &mut [Y], y_trial: &Y, z_trial: &Z, e: Scalar, ) -> Result<(), String>
Source§impl<Y, Z, U, V> ExplicitDaeZerothOrderRoot<Y, Z, U, V> for DormandPrince
impl<Y, Z, U, V> ExplicitDaeZerothOrderRoot<Y, Z, U, V> for DormandPrince
fn integrate( &self, evolution: impl FnMut(Scalar, &Y, &Z) -> Result<Y, String>, function: impl FnMut(Scalar, &Y, &Z) -> Result<Z, String>, solver: impl ZerothOrderRootFinding<Z>, time: &[Scalar], initial_condition: (Y, Z), equality_constraint: impl FnMut(Scalar) -> EqualityConstraint, ) -> Result<(Vector, U, U, V), IntegrationError>
Source§impl<F, Y, U> ImplicitDaeFirstOrderMinimize<F, Y, U> for DormandPrince
impl<F, Y, U> ImplicitDaeFirstOrderMinimize<F, Y, U> for DormandPrince
fn integrate( &self, function: impl FnMut(Scalar, &Y, &Y) -> Result<F, String>, jacobian: impl FnMut(Scalar, &Y, &Y) -> Result<Y, String>, solver: impl FirstOrderOptimization<F, Y>, time: &[Scalar], initial_condition: Y, equality_constraint: impl FnMut(Scalar) -> EqualityConstraint, ) -> Result<(Vector, U, U), IntegrationError>
Source§impl<F, J, Y, U> ImplicitDaeFirstOrderRoot<F, J, Y, U> for DormandPrince
impl<F, J, Y, U> ImplicitDaeFirstOrderRoot<F, J, Y, U> for DormandPrince
fn integrate( &self, function: impl FnMut(Scalar, &Y, &Y) -> Result<F, String>, jacobian: impl FnMut(Scalar, &Y, &Y) -> Result<J, String>, solver: impl FirstOrderRootFinding<F, J, Y>, time: &[Scalar], initial_condition: Y, equality_constraint: impl FnMut(Scalar) -> EqualityConstraint, ) -> Result<(Vector, U, U), IntegrationError>
Source§impl<F, J, H, Y, U> ImplicitDaeSecondOrderMinimize<F, J, H, Y, U> for DormandPrince
impl<F, J, H, Y, U> ImplicitDaeSecondOrderMinimize<F, J, H, Y, U> for DormandPrince
fn integrate( &self, function: impl FnMut(Scalar, &Y, &Y) -> Result<F, String>, jacobian: impl FnMut(Scalar, &Y, &Y) -> Result<J, String>, hessian: impl FnMut(Scalar, &Y, &Y) -> Result<H, String>, solver: impl SecondOrderOptimization<F, J, H, Y>, time: &[Scalar], initial_condition: Y, equality_constraint: impl FnMut(Scalar) -> EqualityConstraint, banded: Option<Banded>, ) -> Result<(Vector, U, U), IntegrationError>
Source§impl<Y, U> ImplicitDaeVariableStep<Y, U> for DormandPrince
impl<Y, U> ImplicitDaeVariableStep<Y, U> for DormandPrince
fn integrate_implicit_dae_variable_step( &self, evolution: impl FnMut(Scalar, &Y, &Y) -> Result<Y, String>, time: &[Scalar], initial_condition: Y, ) -> Result<(Vector, U, U), IntegrationError>
fn interpolate_implicit_dae_variable_step( &self, evolution: impl FnMut(Scalar, &Y, &Y) -> Result<Y, String>, time: &Vector, tp: &Vector, yp: &U, dydtp: &U, ) -> Result<(U, U), IntegrationError>
Source§impl<F, Y, U> ImplicitDaeVariableStepExplicitFirstOrderMinimize<F, Y, U> for DormandPrince
impl<F, Y, U> ImplicitDaeVariableStepExplicitFirstOrderMinimize<F, Y, U> for DormandPrince
fn integrate_implicit_dae_variable_step_explicit_minimize_1( &self, function: impl FnMut(Scalar, &Y, &Y) -> Result<F, String>, jacobian: impl FnMut(Scalar, &Y, &Y) -> Result<Y, String>, solver: impl FirstOrderOptimization<F, Y>, time: &[Scalar], initial_condition: Y, equality_constraint: impl FnMut(Scalar) -> EqualityConstraint, ) -> Result<(Vector, U, U), IntegrationError>
Source§impl<F, J, Y, U> ImplicitDaeVariableStepExplicitFirstOrderRoot<F, J, Y, U> for DormandPrince
impl<F, J, Y, U> ImplicitDaeVariableStepExplicitFirstOrderRoot<F, J, Y, U> for DormandPrince
fn integrate_implicit_dae_variable_step_explicit_root_1( &self, function: impl FnMut(Scalar, &Y, &Y) -> Result<F, String>, jacobian: impl FnMut(Scalar, &Y, &Y) -> Result<J, String>, solver: impl FirstOrderRootFinding<F, J, Y>, time: &[Scalar], initial_condition: Y, equality_constraint: impl FnMut(Scalar) -> EqualityConstraint, ) -> Result<(Vector, U, U), IntegrationError>
Source§impl<F, J, H, Y, U> ImplicitDaeVariableStepExplicitSecondOrderMinimize<F, J, H, Y, U> for DormandPrince
impl<F, J, H, Y, U> ImplicitDaeVariableStepExplicitSecondOrderMinimize<F, J, H, Y, U> for DormandPrince
fn integrate_implicit_dae_variable_step_explicit_minimize_2( &self, function: impl FnMut(Scalar, &Y, &Y) -> Result<F, String>, jacobian: impl FnMut(Scalar, &Y, &Y) -> Result<J, String>, hessian: impl FnMut(Scalar, &Y, &Y) -> Result<H, String>, solver: impl SecondOrderOptimization<F, J, H, Y>, time: &[Scalar], initial_condition: Y, equality_constraint: impl FnMut(Scalar) -> EqualityConstraint, banded: Option<Banded>, ) -> Result<(Vector, U, U), IntegrationError>
Source§impl<Y, U> ImplicitDaeVariableStepExplicitZerothOrderRoot<Y, U> for DormandPrince
impl<Y, U> ImplicitDaeVariableStepExplicitZerothOrderRoot<Y, U> for DormandPrince
fn integrate_implicit_dae_variable_step_explicit_root_0( &self, function: impl FnMut(Scalar, &Y, &Y) -> Result<Y, String>, solver: impl ZerothOrderRootFinding<Y>, time: &[Scalar], initial_condition: Y, equality_constraint: impl FnMut(Scalar) -> EqualityConstraint, ) -> Result<(Vector, U, U), IntegrationError>
Source§impl<Y, U> ImplicitDaeZerothOrderRoot<Y, U> for DormandPrince
impl<Y, U> ImplicitDaeZerothOrderRoot<Y, U> for DormandPrince
Source§impl<Y, U> InterpolateSolution<Y, U> for DormandPrince
impl<Y, U> InterpolateSolution<Y, U> for DormandPrince
Source§impl VariableStep for DormandPrince
impl VariableStep for DormandPrince
Source§impl<Y, U> VariableStepExplicit<Y, U> for DormandPrince
impl<Y, U> VariableStepExplicit<Y, U> for DormandPrince
fn error(dt: Scalar, k: &[Y]) -> Result<Scalar, String>
fn slopes( function: impl FnMut(Scalar, &Y) -> Result<Y, String>, y: &Y, t: Scalar, dt: Scalar, k: &mut [Y], y_trial: &mut Y, ) -> Result<(), String>
fn slopes_and_error( &self, function: impl FnMut(Scalar, &Y) -> Result<Y, String>, y: &Y, t: Scalar, dt: Scalar, k: &mut [Y], y_trial: &mut Y, ) -> Result<Scalar, String>
fn step( &self, _function: impl FnMut(Scalar, &Y) -> Result<Y, String>, y: &mut Y, t: &mut Scalar, y_sol: &mut U, t_sol: &mut Vector, dydt_sol: &mut U, dt: &mut Scalar, k: &mut [Y], y_trial: &Y, e: Scalar, ) -> Result<(), String>
fn integrate_variable_step( &self, function: impl FnMut(Scalar, &Y) -> Result<Y, String>, time: &[Scalar], initial_condition: Y, ) -> Result<(Vector, U, U), IntegrationError>
fn interpolate_variable_step( time: &Vector, tp: &Vector, yp: &U, function: impl FnMut(Scalar, &Y) -> Result<Y, String>, ) -> Result<(U, U), IntegrationError>
Source§impl<Y, U> VariableStepExplicitFirstSameAsLast<Y, U> for DormandPrince
impl<Y, U> VariableStepExplicitFirstSameAsLast<Y, U> for DormandPrince
fn slopes_and_error_fsal( function: impl FnMut(Scalar, &Y) -> Result<Y, String>, y: &Y, t: Scalar, dt: Scalar, k: &mut [Y], y_trial: &mut Y, ) -> Result<Scalar, String>
fn step_fsal( &self, y: &mut Y, t: &mut Scalar, y_sol: &mut U, t_sol: &mut Vector, dydt_sol: &mut U, dt: &mut Scalar, k: &mut [Y], y_trial: &Y, e: Scalar, ) -> Result<(), String>
impl<Y, U> OdeSolver<Y, U> for DormandPrince
Auto Trait Implementations§
impl Freeze for DormandPrince
impl RefUnwindSafe for DormandPrince
impl Send for DormandPrince
impl Sync for DormandPrince
impl Unpin for DormandPrince
impl UnwindSafe for DormandPrince
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more