%RAMSEY_EQM.M function [f, fx, fxp, fy, fyp, controlvar_cu, statevar_cu] = ramsey_eqm; %This program computes the equilibrium conditions of the ramsey problem in `Optimal Fiscal and Monetary Policy in a Medium Scale Macro Model,'' by Stephanie Schmitt-Grohe and Martin Uribe. % %(c) Stephanie Schmitt-Grohe and Martin Uribe % %Date January 2005 clear %Set order of approximation approx=1; %Define symbols allsyms %read Ramsey FOC's foc = ramsey_foc; %Add processes for exogenous variables %Evolution of government transfers exprocn = log(n_cup/N) - RHON * log(n_cu/N); %Government Purchases shock exprocg = log(g_cup/G) - RHOG * log(g_cu/G); %Evolution of Technolgy shock exprocz = log(z_cup) - RHOZ * log(z_cu); exproc = [exprocn;exprocg;exprocz]; %Add equations linking past-, current-, and future-dated variables [link_bwd_fwd, variables_cu, variables_cup,variables_ba1, variables_ba1p, variables_ba2, variables_ba2p, variables_fu1, variables_fu1p] = link_ba_cu_fu; f = [foc; exproc; link_bwd_fwd]; statevar_cu = [variables_ba2; variables_ba1; s_cu; stil_cu; assets_cu; k_cu; n_cu; g_cu; z_cu]; statevar_cu = transpose(statevar_cu); statevar_cup = [variables_ba2p; variables_ba1p; s_cup; stil_cup; assets_cup; k_cup; n_cup; g_cup; z_cup]; statevar_cup = transpose(statevar_cup); %LAGRANGE_MULTIPLIERS.M xi_cu=[xi1_cu xi2_cu xi3_cu xi4_cu xi5_cu xi6_cu xi7_cu xi8_cu xi9_cu xi10_cu xi11_cu xi12_cu xi13_cu xi14_cu xi15_cu]; xi_cup=[xi1_cup xi2_cup xi3_cup xi4_cup xi5_cup xi6_cup xi7_cup xi8_cup xi9_cup xi10_cup xi11_cup xi12_cup xi13_cup xi14_cup xi15_cup]; controlvar_cu = [qq_cu hd_cu output_cu c_cu la_cu pai_cu u_cu f2_cu x2_cu r_cu tauk_cu iv_cu w_cu transpose(variables_fu1) xi_cu]; controlvar_cup = [qq_cup hd_cup output_cup c_cup la_cup pai_cup u_cup f2_cup x2_cup r_cup tauk_cup iv_cup w_cup transpose(variables_fu1p) xi_cup]; %Make f a function of the logarithm of the state and control vector %states in logs ls = find(statevar_cu~='tauk_ba1'& statevar_cu~='tauk_ba2'); %controls in logs lc = find(controlvar_cu~='tauk_cu'&controlvar_cu~='tauk_fu1'); %variables to substitute from levels to logs vs=[statevar_cu(ls), controlvar_cu(lc), statevar_cup(ls), controlvar_cup(lc)]; %states in -log(1-x) lls = find(statevar_cu=='tauk_ba1'| statevar_cu=='tauk_ba2'); %controls in -log(1-x) llc = find(controlvar_cu=='tauk_cu'|controlvar_cu=='tauk_fu1'); %variables to substitute from levels to -log(1-x) vvs=[statevar_cu(lls), controlvar_cu(llc), statevar_cup(lls), controlvar_cup(llc)]; f = subs(f,[vs vvs], [exp(vs) 1-exp(-vvs)]); %Compute analytical derivatives of f [fx,fxp,fy,fyp,fypyp,fypy,fypxp,fypx,fyyp,fyy,fyxp,fyx,fxpyp,fxpy,fxpxp,fxpx,fxyp,fxy,fxxp,fxx]=anal_deriv(f,statevar_cu,controlvar_cu,statevar_cup,controlvar_cup,approx); %LINK_BA_CU_FU.M %Create links between past, current, and future expected values of variables so as to ensure that the system of differential equations is of first order (as opposed to of higher order). (Recall that every higher-order system of difference equations can be expressed as a (larger) system of first-order linear difference equations by appropriate definition of variables.) %(c) April 5, 2005 by Stephanie Schmitt-Grohe and Martin Uribe function [link_bwd_fwd, variables_cu, variables_cup,variables_ba1, variables_ba1p, variables_ba2, variables_ba2p, variables_fu1, variables_fu1p] = link_ba_cu_fu; allsyms variables_cu = transpose([s_cu, stil_cu, assets_cu, k_cu, n_cu, g_cu, z_cu, qq_cu, hd_cu, output_cu, c_cu, la_cu, pai_cu, u_cu, f2_cu, x2_cu, r_cu, tauk_cu, iv_cu, w_cu, xi1_cu, xi2_cu, xi3_cu, xi4_cu, xi5_cu, xi6_cu, xi7_cu, xi8_cu, xi9_cu, xi10_cu, xi11_cu, xi12_cu, xi13_cu, xi14_cu, xi15_cu]); variables_cup = transpose([s_cup, stil_cup, assets_cup, k_cup, n_cup, g_cup, z_cup, qq_cup, hd_cup, output_cup, c_cup, la_cup, pai_cup, u_cup, f2_cup, x2_cup, r_cup, tauk_cup, iv_cup, w_cup, xi1_cup, xi2_cup, xi3_cup, xi4_cup, xi5_cup, xi6_cup, xi7_cup, xi8_cup, xi9_cup, xi10_cup, xi11_cup, xi12_cup, xi13_cup, xi14_cup, xi15_cup]); variables_ba1 = transpose([s_ba1, stil_ba1, assets_ba1, k_ba1, n_ba1, g_ba1, z_ba1, qq_ba1, hd_ba1, output_ba1, c_ba1, la_ba1, pai_ba1, u_ba1, f2_ba1, x2_ba1, r_ba1, tauk_ba1, iv_ba1, w_ba1, xi1_ba1, xi2_ba1, xi3_ba1, xi4_ba1, xi5_ba1, xi6_ba1, xi7_ba1, xi8_ba1, xi9_ba1, xi10_ba1, xi11_ba1, xi12_ba1, xi13_ba1, xi14_ba1, xi15_ba1]); variables_ba1p = transpose([s_ba1p, stil_ba1p, assets_ba1p, k_ba1p, n_ba1p, g_ba1p, z_ba1p, qq_ba1p, hd_ba1p, output_ba1p, c_ba1p, la_ba1p, pai_ba1p, u_ba1p, f2_ba1p, x2_ba1p, r_ba1p, tauk_ba1p, iv_ba1p, w_ba1p, xi1_ba1p, xi2_ba1p, xi3_ba1p, xi4_ba1p, xi5_ba1p, xi6_ba1p, xi7_ba1p, xi8_ba1p, xi9_ba1p, xi10_ba1p, xi11_ba1p, xi12_ba1p, xi13_ba1p, xi14_ba1p, xi15_ba1p]); variables_fu1 = transpose([s_fu1, stil_fu1, assets_fu1, k_fu1, n_fu1, g_fu1, z_fu1, qq_fu1, hd_fu1, output_fu1, c_fu1, la_fu1, pai_fu1, u_fu1, f2_fu1, x2_fu1, r_fu1, tauk_fu1, iv_fu1, w_fu1, xi1_fu1, xi2_fu1, xi3_fu1, xi4_fu1, xi5_fu1, xi6_fu1, xi7_fu1, xi8_fu1, xi9_fu1, xi10_fu1, xi11_fu1, xi12_fu1, xi13_fu1, xi14_fu1, xi15_fu1]); variables_fu1p = transpose([s_fu1p, stil_fu1p, assets_fu1p, k_fu1p, n_fu1p, g_fu1p, z_fu1p, qq_fu1p, hd_fu1p, output_fu1p, c_fu1p, la_fu1p, pai_fu1p, u_fu1p, f2_fu1p, x2_fu1p, r_fu1p, tauk_fu1p, iv_fu1p, w_fu1p, xi1_fu1p, xi2_fu1p, xi3_fu1p, xi4_fu1p, xi5_fu1p, xi6_fu1p, xi7_fu1p, xi8_fu1p, xi9_fu1p, xi10_fu1p, xi11_fu1p, xi12_fu1p, xi13_fu1p, xi14_fu1p, xi15_fu1p]); variables_ba2 = transpose([s_ba2, stil_ba2, assets_ba2, k_ba2, n_ba2, g_ba2, z_ba2, qq_ba2, hd_ba2, output_ba2, c_ba2, la_ba2, pai_ba2, u_ba2, f2_ba2, x2_ba2, r_ba2, tauk_ba2, iv_ba2, w_ba2, xi1_ba2, xi2_ba2, xi3_ba2, xi4_ba2, xi5_ba2, xi6_ba2, xi7_ba2, xi8_ba2, xi9_ba2, xi10_ba2, xi11_ba2, xi12_ba2, xi13_ba2, xi14_ba2, xi15_ba2]); variables_ba2p = transpose([s_ba2p, stil_ba2p, assets_ba2p, k_ba2p, n_ba2p, g_ba2p, z_ba2p, qq_ba2p, hd_ba2p, output_ba2p, c_ba2p, la_ba2p, pai_ba2p, u_ba2p, f2_ba2p, x2_ba2p, r_ba2p, tauk_ba2p, iv_ba2p, w_ba2p, xi1_ba2p, xi2_ba2p, xi3_ba2p, xi4_ba2p, xi5_ba2p, xi6_ba2p, xi7_ba2p, xi8_ba2p, xi9_ba2p, xi10_ba2p, xi11_ba2p, xi12_ba2p, xi13_ba2p, xi14_ba2p, xi15_ba2p]); link_ba2p_ba1 = -variables_ba2p + variables_ba1; link_ba1p_cu = -variables_ba1p + variables_cu; link_cup_fu1 = -variables_fu1 + variables_cup; link_bwd_fwd = [link_ba2p_ba1; link_ba1p_cu; link_cup_fu1]; %RAMSEY_FOC.M function foc = ramsey_foc; %This program computes the first-order conditions of the Ramsey problem in `Optimal Fiscal and Monetary Policy in a Medium Scale Macro Model'' by Stephanie Schmitt-Grohe and Martin Uribe. % %(c) Stephanie Schmitt-Grohe and Martin Uribe % %Date January 2005 %Notes % x_cu=x_t and x_cup=x_{t+1} % x_fu1=x_{t+1} %x_fu1p=x_{t+2} % x_ba1=x_{t-1} % x_ba1p=x_t % x_ba2=x_{t-2} and x_ba2p=x_{t-1} %define symbolic variables allsyms [objective_cu, constraints_cu, objective_ba1, constraints_ba1, objective_fu1, constraints_fu1] = constraints; %The Lagrange Multipliers xi_cu=[xi1_cu xi2_cu xi3_cu xi4_cu xi5_cu xi6_cu xi7_cu xi8_cu xi9_cu xi10_cu xi11_cu xi12_cu xi13_cu xi14_cu xi15_cu]; xi_fu1 =[xi1_fu1 xi2_fu1 xi3_fu1 xi4_fu1 xi5_fu1 xi6_fu1 xi7_fu1 xi8_fu1 xi9_fu1 xi10_fu1 xi11_fu1 xi12_fu1 xi13_fu1 xi14_fu1 xi15_fu1]; xi_ba1 = [xi1_ba1 xi2_ba1 xi3_ba1 xi4_ba1 xi5_ba1 xi6_ba1 xi7_ba1 xi8_ba1 xi9_ba1 xi10_ba1 xi11_ba1 xi12_ba1 xi13_ba1 xi14_ba1 xi15_ba1];; %The Lagrangian lagrangian = BETTA^(-1) * (objective_ba1+xi_ba1 * constraints_ba1) + (objective_cu+xi_cu * constraints_cu) + BETTA * (objective_fu1 + xi_fu1 * constraints_fu1); endogvar_cu = [u_cu qq_cu iv_cu w_cu hd_cu output_cu c_cu la_cu pai_cu f2_cu x2_cu s_cup stil_cup assets_cup k_cup r_cu tauk_cu]; endogvar_cu=endogvar_cu(:); endogvar_ba1p = [u_ba1p qq_ba1p iv_ba1p w_ba1p hd_ba1p output_ba1p c_ba1p la_ba1p pai_ba1p f2_ba1p x2_ba1p s_fu1 stil_fu1 assets_fu1 k_fu1 r_ba1p tauk_ba1p]; endogvar_ba1p=endogvar_ba1p(:); foc = [jacobian(lagrangian,xi_cu) jacobian(lagrangian,endogvar_cu)+jacobian(lagrangian,endogvar_ba1p)]; foc = foc(:);