Function fang_oost::get_expectation_discrete_extended[][src]

pub fn get_expectation_discrete_extended<'a, 'b: 'a, T, U>(
    num_u: usize,
    x: &'b [f64],
    fn_inv: T,
    vk: U
) -> impl IndexedParallelIterator<Item = f64> + 'a where
    T: Fn(&Complex<f64>) -> Complex<f64> + Sync + Send + 'a,
    U: Fn(f64, f64, usize) -> f64 + Sync + Send + 'a, 

Returns expectation over mesh supplied by the user where characteristic function depends on initial starting point.

Remarks

While "x" can be any vector, the endpoints of the vector should have a large enough domain for accuracy. The elements do not need to be equidistant and accuracy does not depend on the number of elements in the x domain (just the complex domain).
The "type" of the expecation is handled by the vk function. This function is useful for Levy functions since the characteristic function depends on the initial value of x. See fang_oost_option for an example.

Examples

extern crate num_complex;
use num_complex::Complex;
extern crate fang_oost;
extern crate rayon;
use rayon::prelude::*;
let mu = 2.0;
let sigma:f64 = 5.0;
let num_u = 256;
let x_min = -23.0;
let x = vec![x_min, 3.0, 25.0];
let norm_cf = |u:&Complex<f64>|(u*mu+0.5*u*u*sigma*sigma).exp();
let result:Vec<f64>=fang_oost::get_expectation_discrete_real(
   num_u, &x, &norm_cf, 
    |u, x, k|{
        if k==0{x-x_min} else { ((x-x_min)*u).sin()/u }
    }
).collect();