Struct ode::Solver [] [src]

pub struct Solver<T> where
    T: Number
{ /* fields omitted */ }

Default values

When creating a new Solver with Solver::new(), this is the default configuration:

  • method: Method::RK4

  • weights for the intermediate points:

    • Method::RK2: vec![1, 1],
    • Method::RK4: vec![1, 2, 2, 1],

(Note that each internal value of the vector will be converted to T via T::from_str_radix().)

Example

use ode::{Method, Solver};

let time_interval: [f32; 2] = [0., 100.];
let ini_cond: Vec<f32> = vec![0.];

// simple config
Solver::new(&time_interval, &ini_cond)
    .method(Method::RK4)
    .solve(|t: &f32, _: &Vec<f32>| vec![2.*t]);

// complex config
let mut s = Solver::new(&time_interval, &ini_cond);
s.method(Method::RK4);

// run the solver
let (times, pos) = s.solve(|t: &f32, _: &Vec<f32>| vec![2.*t]);

Methods

impl<T> Solver<T> where
    T: Number
[src]

Start building a new Solver.

Default values are:

  • method: Method::RK4,
  • intermidiate point weights: vec![1, 2, 2, 1]
  • step size: 10e-3

(Note that these values will be converted to T via T::from_str_radix().)

Select the desired algorithm to solve the givem problem, also updating the weights based on default values. To manually alter these values, please check Self::change_weight().

Modify the default weighting applyed to each intermidiate point.

Validates the data passed to the solver.

This is tipically called by run() before attempting to solve the passed function, but was made public so the data can be verified and corrected without a panic.

Data checks are:

  • Self::weights.len() should match the selected method:

    • Method::RK2 requires 2 weights;
    • Method::RK4 requires 4 weights;

Check and run the solver, returning the results of the calculation.

Notice that, before the solver actually runs, it validates its data by calling Self::validate() within an assert!. See that function for more details.