Source code for fangoosterlee.cfinverse

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Inverse of characteristic function
==================================

Read Carr & Madan (1999) for idea of derivation

"""

import numpy as np

__all__ = ['cfinverse']


[docs]def cfinverse(psi, alim=-1e5, blim=1e5, points=1e5): """Discrete Fourier inverse. Inverts characteristic function to obtain the density. Parameters ---------- psi : function Characteristic function dependent only on u alim : float, optional Lower limit of integration blim : float, optional Upper limit of integration points : int, optional Number of discrete points for evaluation Returns ------- grid : (points, ) array Domain of the resulting density density : (points, ) array Density values """ eta = (points - 1) / points * 2 * np.pi / (blim - alim) lmbd = (blim - alim) / (points - 1) karg = np.arange(points) grid = alim + lmbd * karg varg = eta * karg val = psi(varg) * np.exp(- 1j * alim * varg) * eta / np.pi density = np.fft.fft(val).real return grid, density