sde-sim-rs 0.3.0

Powerful and flexible stochastic differential equation (quasi) Monte-Carlo simulation library written in Rust with Python bindings
Documentation
pub mod euler;
pub mod runge_kutta;

use crate::filtration::Filtration;
use crate::rng::Rng;
use ordered_float::OrderedFloat;

pub fn simulate(filtration: &mut Filtration, rng: &mut dyn Rng, scheme: &str) {
    let num_scenarios = filtration.scenarios.len();
    let num_time_deltas = filtration.times.len() - 1;

    let mut rk_scratchpad = if scheme == "runge-kutta" {
        Some(Filtration::new(
            vec![OrderedFloat(0.0)],
            vec![0],
            filtration.processes.to_vec(),
            None,
        ))
    } else {
        None
    };
    for scenario_idx in 0..num_scenarios {
        for time_idx in 0..num_time_deltas {
            match scheme {
                "euler" => {
                    euler::euler_iteration(filtration, scenario_idx, time_idx, rng);
                }
                "runge-kutta" => {
                    runge_kutta::runge_kutta_iteration(
                        filtration,
                        scenario_idx,
                        time_idx,
                        rng,
                        rk_scratchpad.as_mut().unwrap(),
                    );
                }
                _ => panic!("Unknown scheme"),
            }
        }
    }
}