pointprocesses/temporal/
utils.rs1use rand::thread_rng;
2use rand_distr::Distribution;
3use rand_distr::DistIter;
4use rand_distr::StandardNormal;
5
6
7pub 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