sde-sim-rs 0.3.0

Powerful and flexible stochastic differential equation (quasi) Monte-Carlo simulation library written in Rust with Python bindings
Documentation
use crate::filtration::Filtration;
use crate::rng::Rng;

pub fn euler_iteration(
    filtration: &mut Filtration,
    scenario_idx: usize,
    time_idx: usize,
    rng: &mut dyn Rng,
) {
    let time = filtration.times[time_idx];
    let num_processes = filtration.processes.len();
    for process_idx in 0..num_processes {
        let mut val = filtration.get(scenario_idx, time_idx, process_idx);
        let num_incrementors = filtration.processes[process_idx].incrementors.len();
        for inc_idx in 0..num_incrementors {
            let c = (filtration.processes[process_idx].coefficients[inc_idx])(
                filtration,
                time,
                time_idx,
                scenario_idx,
            );
            let incrementor = &mut filtration.processes[process_idx].incrementors[inc_idx];
            let x = incrementor.sample(time_idx, scenario_idx, rng);
            val += c * x;
        }
        filtration.set(scenario_idx, time_idx + 1, process_idx, val);
    }
}