pointprocesses/temporal/
utils.rs

1use rand::thread_rng;
2use rand_distr::Distribution;
3use rand_distr::DistIter;
4use rand_distr::StandardNormal;
5
6
7/// Simulate a brownian motion $(B_t)$ with a time step of $h$.
8pub fn simulate_brownian(h: f64, n: usize) -> Vec<f64> {
9    let sqr_h = h.sqrt();
10    let ref mut rng = thread_rng();
11    let normal: StandardNormal = StandardNormal;
12    let mut normal_its: DistIter<_,_,f64> = normal.sample_iter(rng);
13
14    let dwt: Vec<_> = (0..n-1).into_iter().map(|_| {
15        sqr_h * normal_its.next().unwrap()
16    }).collect();
17    
18    let mut wt: Vec<_> = vec![0.; n];
19    wt[0] = 0.;
20    for i in 0..n-1 {
21        wt[i+1] = wt[i] + dwt[i];
22    }
23    wt
24}
25