예제 #1
0
def Problem6Real():
    sigma = .5
    mu = 4*sigma
    rho = .5
    sigmaZ = sigma/sp.sqrt(1-rho**2)
    w = 0.5 + rho/4
    baseSigma = w*sigma +(1-w)*sigmaZ
    K = 7
    eps, Gamma = tauchenhussey.tauchenhussey(K,mu,rho,sigma, baseSigma)
    eps = sp.reshape(eps,K)
    
    N = 100
    W = sp.linspace(0,1,N)
    V = sp.zeros((N,K))
    
    u = lambda c: sp.sqrt(c)
    beta = 0.9
    
    X,Y= sp.meshgrid(W,W)
    Wdiff = Y-X
    index = Wdiff < 0
    Wdiff[index] = 0
    
    util_grid = u(Wdiff)
    
    
    util3 = sp.tile(util_grid[:,:,sp.newaxis],(1,1,K))
    eps_grid = eps[sp.newaxis,sp.newaxis,:]
    eps_util = eps_grid*util3
    
    delta = 1
    Vprime = V
    z=0
    while (delta>10**-9):
        z=z+1
        V = Vprime
        Expval = sp.dot(V,sp.transpose(Gamma))
        Exp_grid = sp.tile(Expval[sp.newaxis,:,:],(N,1,1))
        arg = eps_util+beta*Exp_grid
        arg[index] = -10^10
        Vprime = sp.amax(arg,1)
        psi_ind = sp.argmax(arg,1)
        psi = W[psi_ind]
        delta = sp.linalg.norm(Vprime - V)
    
    return Vprime,psi
예제 #2
0
def Problem3Real():
    sigma = .5
    mu = 4*sigma
    rho = .5
    sigmaZ = sigma/sp.sqrt(1-rho**2)
    w = 0.5 + rho/4
    baseSigma = w*sigma +(1-w)*sigmaZ
    K = 7
    eps, Gamma = tauchenhussey.tauchenhussey(K,mu,rho,sigma, baseSigma)
    eps = sp.reshape(eps,K)
    
    N = 100
    W = sp.linspace(0,1,N)
    V = sp.zeros((N,K))
    
    u = lambda c: sp.sqrt(c)
    beta = 0.9
    
    X,Y= sp.meshgrid(W,W)
    Wdiff = Y-X
    index = Wdiff < 0
    Wdiff[index] = 0
    
    util_grid = u(Wdiff)
    
    
    util3 = sp.tile(util_grid[:,:,sp.newaxis],(1,1,K))
    eps_grid = eps[sp.newaxis,sp.newaxis,:]
    eps_util = eps_grid*util3
    
    delta = 1
    Vprime = V
    z=0
    while (delta>10**-9):
        z=z+1
        V = Vprime
        Expval = sp.dot(V,sp.transpose(Gamma))
        Exp_grid = sp.tile(Expval[sp.newaxis,:,:],(N,1,1))
        arg = eps_util+beta*Exp_grid
        arg[index] = -10^10
        Vprime = sp.amax(arg,1)
        psi_ind = sp.argmax(arg,1)
        psi = W[psi_ind]
        delta = sp.linalg.norm(Vprime - V)
    
    return Vprime,psi
예제 #3
0
from numpy import linspace
from scipy.stats import *
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

#set up parameters, W matrix, etc. 
sigma2 = 0.25 
sigma  = sqrt(sigma2) 
mu     = 4*sigma 
M      = 7
rho    = 0.5 
basesigma = (0.5 +(rho/4))*sigma + (0.5 - (rho/4))*(sigma/((1-rho**2)**(0.5)))

n 		     = 100
w 		     = linspace(.01,1.,n)
eps, gamma   = th.tauchenhussey(M,mu,rho,sigma, basesigma)	
beta         = .9
VTplus1	     = zeros((n,M)) 

Warr	     = tile(vstack(w),(n,1,M))
Wprimearr    = tile(w,(M,n,1)).T
epsarr       = tile(eps.T,(n,n,1))
carr         = Warr - Wprimearr 
carrleq0     = carr<=0
carr[carrleq0.nonzero()] = 1e-10
uarr        = log(carr)


def dynamic_cinco(VT_old,beta,gamma,uarr,n):
	EVTplus1a	  = sp.dot(VT_old,gamma.T)
	EVTplusa          = EVTplus1a.reshape(n,1,M)
ax2 = Axes3D(fig2)
y = sp.arange(0,K)
X,Y=sp.meshgrid(x,y)
ax2.plot_surface(W[X],Y,sp.transpose(psi), cmap = cm.coolwarm)
plt.show()

#Problem 3=====================================================================
sigma = .5
sigma = .5
mu = 4*sigma
rho = .5
sigmaZ = sigma/sp.sqrt(1-rho**2)
w = 0.5 + rho/4
baseSigma = w*sigma +(1-w)*sigmaZ
K = 7
eps, Gamma = tauchenhussey.tauchenhussey(K,mu,rho,sigma, baseSigma)
eps = sp.reshape(eps,K)

N = 100
W = sp.linspace(0,1,N)
V = sp.zeros((N,K))

u = lambda c: sp.sqrt(c)
beta = 0.9

X,Y= sp.meshgrid(W,W)
Wdiff = Y-X
index = Wdiff < 0
Wdiff[index] = 0

util_grid = u(Wdiff)
    Outputs:
        delta: The norm between the two value functions.
    """
    flat = (v_old - v_new).flatten()

    return np.dot(flat, flat)

## --------------------------------Problem 1--------------------------------- ##
w = np.array(np.arange(0.01, 1.01, .01))
N = w.size
nodes = 7
sigma = 1/2.
mu = 4 * sigma
rho = 1/2.
base_sigma = (0.5 + rho/4.0) * sigma + (0.5 - rho/4.0) * (sigma/(np.sqrt(1 - rho**2)))
support, p_mat = th.tauchenhussey(nodes, mu, rho, sigma, base_sigma)
p_cube = np.reshape(p_mat, (nodes, nodes, 1))
p_cube = np.tile(p_cube, (1, 1, N))

## --------------------------------Problem 2--------------------------------- ##


# Create Utility matrix.
# This is three dimensional. 1: w, 2: e, 3: w'
# Note
c_mat = np.empty((N, nodes, N))
for i in range(N):
    for j in range(nodes):
        for k in range(N):
            if w[i] - w[k] >= 0:
                c_mat[i,j,k] = support[j] * (w[i] - w[k])