#characteristics #function #fang #oosterlee #inverting

fang_oost

A library implementing Fang and Oosterlee's algorithm for inverting characteristic functions

27 releases (14 breaking)

0.15.1 Sep 1, 2021
0.14.2 Nov 23, 2020
0.14.0 Mar 2, 2019
0.13.7 Sep 11, 2018
0.7.0 Jul 16, 2018

#972 in Math


Used in 5 crates (4 directly)

MIT license

27KB
373 lines

[lin-badge]: https://github.com/danielhstahl/fang_oost_rust/workflows/Rust/badge.svg [cov-badge]: https://codecov.io/gh/danielhstahl/fang_oost_rust/branch/master/graph/badge.svg

Linux Codecov
![lin-badge] ![cov-badge]

Fang-Oosterlee Library for Rust

Implements Fang-Oosterlee algorithm in Rust. While the algorithm originally was used for option pricing, it can be used for a variety of use cases. For example, it can be used to compute the Value at Risk of a distribution, the density of a distribution, and the partial expectation.

It requires a characteristic function computed at various specific intervals. A utility function is provided which converts an analytical characteristic function into a vector.

Documentation is at docs.rs

Use

Put the following in your Cargo.toml:

[dependencies]
fang_oost = "0.15"

Import and use:

extern crate num_complex;
extern crate fang_oost;
extern crate rayon;
use rayon::prelude::*;
use num_complex::Complex;

let num_x = 1024;
let num_u = 256;
let x_min = -20.0;
let x_max = 25.0;
let mu=2.0;
let sigma:f64=5.0;
let norm_cf = |u:&Complex<f64>|(u*mu+0.5*u*u*sigma*sigma).exp();
let x_domain=fang_oost::get_x_domain(num_x, x_min, x_max);
//computes discrete gaussian characteristic function
let discrete_cf=fang_oost::get_discrete_cf(num_u, x_min, x_max, &norm_cf);
let result=fang_oost::get_expectation_single_element_real(
    x_min, x_max, x, &discrete_cf,
     |u_im, x, k|{
         if k==0{x-x_min} else { ((x-x_min)*u_im).sin()/u_im }
     }
);

Benchmarks

View benchmarks at https://danielhstahl.github.io/fang_oost_rust/report/index.html.

Dependencies

~2MB
~35K SLoC