% Parameters parameters beta sigma alpha delta K_min K_max rho Imin; beta = 0.99; % dicount factor sigma = 2; % risk aversion alpha = 0.36; % capital share delta = 0.025; % depreciation rate rho = 0.90; %persistent of productivity shocks phi = 0.975; %investment irreversibility constraint TolEq = 1e-6; SaveFreq = 50; SimuSaveFreq = 1000; SimuPrintFreq = 1000; NumThreads = feature('NumCores'); % Shocks var_shock e; shock_num = 2; shock_trans = [1/2.0,1/2.0;1/2.0,1/2.0]; e = [-0.01,0.01]*sqrt(1-rho^2); % Steady state Kss = (alpha/(1/beta - 1 + delta))^(1/(1-alpha)); Iss = delta*Kss; Imin = phi*Iss; K_min = 0.5*Kss; K_max = 1.5*Kss; % States var_state z K; z_pts = 21; z = linspace(0.9,1.1,z_pts); K_pts = 201; K = exp(linspace(log(K_min),log(K_max),K_pts)); var_interp Euler_interp muc_interp; % Last period var_policy_init c; inbound_init c 1e-6 100; var_aux_init Euler mu muc; model_init; Y = z*(K^alpha); resid = 1 - c/(Y-Imin); mu = 1; muc = mu*(c^-sigma); Euler = (c^-sigma)*(1-delta+z*alpha*K^(alpha-1)); equations; resid; end; end; initial Euler_interp Euler; Euler_interp = Euler; initial muc_interp muc; muc_interp = muc; % Endogenous variables, bounds, and initial values var_policy c invst mu; inbound c 1e-6 100 adaptive(2); inbound invst 0 50 adaptive(1.5); inbound mu 0 2 adaptive(1.5); % Other equilbirium variables var_aux Y Euler K_next muc z_next[2] Inv; model; %investment irreversiility constraint Inv = invst + Imin; K_next = Inv + (1-delta)*K; Y = z*(K^alpha); resid = 1 - (Inv+c)/Y; %transition to z_next z_next' = exp(rho*log(z)+e'); %interpolation of future policies Euler_future' = Euler_interp'(z_next',K_next); EEuler_future = GDSGE_EXPECT{Euler_future'}; muc_future' = muc_interp'(z_next',K_next); Emuc_future = GDSGE_EXPECT{muc_future'}; Euler = (c^-sigma)*(1-delta+z*alpha*K^(alpha-1)); muc = mu*(c^-sigma); % First order conditions for firms foc = 1-mu - (beta*EEuler_future-beta*(1-delta)*Emuc_future)/(c^-sigma); comp_slack = mu*invst; equations; foc; resid; comp_slack; end; end; simulate; num_periods = 15000; num_samples = 100; initial K Kss; initial z 1; initial shock 2; var_simu z K Y c Inv; K' = K_next; z' = z_next'; end;