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
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
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])