Skip to main content

Diffusion

Trait Diffusion 

Source
pub trait Diffusion<S: State, B: NoiseIncrement>: Send + Sync {
    // Required method
    fn apply(&self, x: &S, t: f64, dw: &B) -> S;
}
Expand description

Diffusion coefficient interface. apply(x, t, dw) returns the diffusion contribution g(x,t) * dw directly.

Blanket impl for scalar closures: f(x,t) -> f64 satisfies Diffusion<f64, f64> by computing f(x,t) * dw.

Blanket impl for nD diagonal closures: f(x,t) -> SVector<N> satisfies Diffusion<SVector<N>, SVector<N>> by element-wise (Hadamard) product.

Full-matrix processes (Heston, CorrOU) provide concrete struct impls.

§Calling convention

Scalar diffusions (B = f64) receive x by value because f64: Copy. Vector diffusions (B = SVector<f64, N>) receive x by reference. Concrete struct impls (e.g. HestonDiffusion) use whichever is appropriate for their state type.

Required Methods§

Source

fn apply(&self, x: &S, t: f64, dw: &B) -> S

Implementors§

Source§

impl Diffusion<Matrix<f64, Const<2>, Const<1>, ArrayStorage<f64, 2, 1>>, Matrix<f64, Const<2>, Const<1>, ArrayStorage<f64, 2, 1>>> for HestonDiffusion

Source§

impl<F: Fn(f64, f64) -> f64 + Send + Sync> Diffusion<f64, f64> for F

Source§

impl<const N: usize> Diffusion<Matrix<f64, Const<N>, Const<1>, ArrayStorage<f64, N, 1>>, Matrix<f64, Const<N>, Const<1>, ArrayStorage<f64, N, 1>>> for CorrOuDiffusion<N>

Source§

impl<const N: usize, F> Diffusion<Matrix<f64, Const<N>, Const<1>, ArrayStorage<f64, N, 1>>, Matrix<f64, Const<N>, Const<1>, ArrayStorage<f64, N, 1>>> for F
where F: Fn(&SVector<f64, N>, f64) -> SVector<f64, N> + Send + Sync,