Menu:

OPTIONS: Download this file, Download all Python files, Go back

# Filename: cpdynam.py
# Author: John Stachurski
# Date: December 2008
# Corresponds to: Listing 6.7

from scipy import mean
from scipy.stats import beta
from scipy.optimize import brentq

alpha, a, c = 0.8, 5.0, 2.0                           
W = beta(5, 5).rvs(1000) * c + a   # Shock observations
D = P = lambda x: 1.0 / x   

def fix_point(h, lower, upper):
    """Computes the fixed point of h on [upper, lower]
    using SciPy's brentq routine, which finds the
    zeros (roots) of a univariate function.
    Parameters: h is a function and lower and upper are
    numbers (floats or integers).  """
    return brentq(lambda x: x - h(x), lower, upper)

def T(p, x):
    """Computes Tp(x), where T is the pricing functional
    operator.
    Parameters: p is a vectorized function (i.e., acts 
    pointwise on arrays) and x is a number.  """
    y = alpha * mean(p(W))
    if y <= P(x): 
        return P(x)  
    h = lambda r: alpha * mean(p(alpha*(x - D(r)) + W))
    return fix_point(h, P(x), y)