diff --git a/matlab/sim1.m b/matlab/sim1.m index bbf41d193..ed1ba9349 100644 --- a/matlab/sim1.m +++ b/matlab/sim1.m @@ -69,7 +69,7 @@ i_cols_T = nonzeros(lead_lag_incidence(1:2,:)'); i_cols_0 = nonzeros(lead_lag_incidence(2,:)'); i_cols_A0 = find(lead_lag_incidence(2,:)'); i_cols_j = 1:nd; -i_upd = ny+(1:periods*ny); +i_upd = M_.maximum_lag*ny+(1:periods*ny); Y = endo_simul(:); @@ -94,8 +94,8 @@ for iter = 1:options_.simul.maxit h2 = clock ; i_rows = 1:ny; - i_cols = find(lead_lag_incidence'); - i_cols_A = i_cols; + i_cols_A = find(lead_lag_incidence'); + i_cols = i_cols_A+(M_.maximum_lag-1)*ny; for it = (M_.maximum_lag+1):(M_.maximum_lag+periods) @@ -170,7 +170,7 @@ if stop oo_.deterministic_simulation.error = err; oo_.deterministic_simulation.iterations = iter; oo_.deterministic_simulation.periods = vperiods(1:iter); - oo_.endo_simul = reshape(Y,ny,periods+2); + oo_.endo_simul = reshape(Y,ny,periods+M_.maximum_lag+M_.maximum_lead); skipline(); fprintf('\nSimulation terminated after %d iterations.\n',iter); fprintf('Total time of simulation: %16.13f\n',etime(clock,h1)); @@ -190,7 +190,7 @@ if stop oo_.deterministic_simulation.error = err; oo_.deterministic_simulation.iterations = iter; oo_.deterministic_simulation.periods = vperiods(1:iter); - oo_.endo_simul = reshape(Y,ny,periods+2); + oo_.endo_simul = reshape(Y,ny,periods+M_.maximum_lag+M_.maximum_lead); end elseif ~stop skipline(); diff --git a/tests/Makefile.am b/tests/Makefile.am index 3ea8e4364..14357f454 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -173,6 +173,9 @@ MODFILES = \ deterministic_simulations/rbc_det5.mod \ deterministic_simulations/rbc_det6.mod \ deterministic_simulations/homotopy.mod \ + deterministic_simulations/rbc_det_exo_lag2a.mod \ + deterministic_simulations/rbc_det_exo_lag2b.mod \ + deterministic_simulations/rbc_det_exo_lag2c.mod \ walsh.mod \ measurement_errors/fs2000_corr_me_ml_mcmc/fs2000_corr_ME.mod \ trend_var/fs2000_nonstationary.mod \ @@ -270,6 +273,11 @@ dsge-var/dsgevar_forward_estimated_lambda.o.trs: dsge-var/simul_hybrid.o.trs smoother2histval/fs2000_simul.m.trs: smoother2histval/fs2000_smooth.m.trs smoother2histval/fs2000_simul.o.trs: smoother2histval/fs2000_smooth.o.trs +deterministic_simulations/rbc_det_exo_lag2b.m.trs: deterministic_simulations/rbc_det_exo_lag2a.m.trs +deterministic_simulations/rbc_det_exo_lag2c.m.trs: deterministic_simulations/rbc_det_exo_lag2a.m.trs +deterministic_simulations/rbc_det_exo_lag2b.o.trs: deterministic_simulations/rbc_det_exo_lag2a.o.trs +deterministic_simulations/rbc_det_exo_lag2c.o.trs: deterministic_simulations/rbc_det_exo_lag2a.o.trs + # Matlab TRS Files M_TRS_FILES = $(patsubst %.mod, %.m.trs, $(MODFILES)) M_TRS_FILES += run_block_byte_tests_matlab.m.trs run_reporting_test_matlab.m.trs run_all_unitary_tests.m.trs diff --git a/tests/deterministic_simulations/rbc_det_exo_lag_2a.mod b/tests/deterministic_simulations/rbc_det_exo_lag_2a.mod new file mode 100644 index 000000000..b831cfdda --- /dev/null +++ b/tests/deterministic_simulations/rbc_det_exo_lag_2a.mod @@ -0,0 +1,75 @@ +var Capital, Output, Labour, Consumption, Efficiency, efficiency, ExpectedTerm; + +varexo EfficiencyInnovation; + +parameters beta, theta, tau, alpha, psi, delta, rho, effstar, sigma2; + +beta = 0.9900; +theta = 0.3570; +tau = 2.0000; +alpha = 0.4500; +psi = -0.1000; +delta = 0.0200; +rho = 0.8000; +effstar = 1.0000; +sigma2 = 0; + +model; + + // Eq. n°1: + efficiency = rho*efficiency(-1) + EfficiencyInnovation; + + // Eq. n°2: + Efficiency = effstar*exp(efficiency); + + // Eq. n°3: + Output = Efficiency*(alpha*(Capital(-1)^psi)+(1-alpha)*(Labour^psi))^(1/psi); + + // Eq. n°4: + Capital = Output-Consumption + (1-delta)*Capital(-1); + + // Eq. n°5: + ((1-theta)/theta)*(Consumption/(1-Labour)) - (1-alpha)*(Output/Labour)^(1-psi); + + // Eq. n°6: + (((Consumption^theta)*((1-Labour)^(1-theta)))^(1-tau))/Consumption = ExpectedTerm(1); + + // Eq. n°7: + ExpectedTerm = beta*((((Consumption^theta)*((1-Labour)^(1-theta)))^(1-tau))/Consumption)*(alpha*((Output/Capital(-1))^(1-psi))+(1-delta)); + +end; + +steady_state_model; +Output_per_unit_of_Capital=((1/beta-1+delta)/alpha)^(1/(1-psi)); +Consumption_per_unit_of_Capital=Output_per_unit_of_Capital-delta; +Labour_per_unit_of_Capital=(((Output_per_unit_of_Capital/effstar)^psi-alpha)/(1-alpha))^(1/psi); +Output_per_unit_of_Labour=Output_per_unit_of_Capital/Labour_per_unit_of_Capital; +Consumption_per_unit_of_Labour=Consumption_per_unit_of_Capital/Labour_per_unit_of_Capital; + +% Compute steady state share of capital. +ShareOfCapital=alpha/(alpha+(1-alpha)*Labour_per_unit_of_Capital^psi); + +% Compute steady state of the endogenous variables. +Labour=1/(1+Consumption_per_unit_of_Labour/((1-alpha)*theta/(1-theta)*Output_per_unit_of_Labour^(1-psi))); +Consumption=Consumption_per_unit_of_Labour*Labour; +Capital=Labour/Labour_per_unit_of_Capital; +Output=Output_per_unit_of_Capital*Capital; +Efficiency=effstar; +efficiency=0; +ExpectedTerm=beta*((((Consumption^theta)*((1-Labour)^(1-theta)))^(1-tau))/Consumption) + *(alpha*((Output/Capital)^(1-psi))+1-delta); +LagrangeMultiplier=0; +end; + +//steady; + +shocks; +var EfficiencyInnovation; +periods 3; +values -0.1; +end; + +simul(periods=300); + +rplot Consumption; +rplot Capital; \ No newline at end of file diff --git a/tests/deterministic_simulations/rbc_det_exo_lag_2b.mod b/tests/deterministic_simulations/rbc_det_exo_lag_2b.mod new file mode 100644 index 000000000..08cdb5473 --- /dev/null +++ b/tests/deterministic_simulations/rbc_det_exo_lag_2b.mod @@ -0,0 +1,80 @@ +// check exogenous variable lag > 1 with *.m file +var Capital, Output, Labour, Consumption, Efficiency, efficiency, ExpectedTerm; + +varexo EfficiencyInnovation; + +parameters beta, theta, tau, alpha, psi, delta, rho, effstar, sigma2; + +beta = 0.9900; +theta = 0.3570; +tau = 2.0000; +alpha = 0.4500; +psi = -0.1000; +delta = 0.0200; +rho = 0.8000; +effstar = 1.0000; +sigma2 = 0; + +model; + + // Eq. n°1: + efficiency = rho*efficiency(-1) + EfficiencyInnovation(-2); + + // Eq. n°2: + Efficiency = effstar*exp(efficiency); + + // Eq. n°3: + Output = Efficiency*(alpha*(Capital(-1)^psi)+(1-alpha)*(Labour^psi))^(1/psi); + + // Eq. n°4: + Capital = Output-Consumption + (1-delta)*Capital(-1); + + // Eq. n°5: + ((1-theta)/theta)*(Consumption/(1-Labour)) - (1-alpha)*(Output/Labour)^(1-psi); + + // Eq. n°6: + (((Consumption^theta)*((1-Labour)^(1-theta)))^(1-tau))/Consumption = ExpectedTerm(1); + + // Eq. n°7: + ExpectedTerm = beta*((((Consumption^theta)*((1-Labour)^(1-theta)))^(1-tau))/Consumption)*(alpha*((Output/Capital(-1))^(1-psi))+(1-delta)); + +end; + +steady_state_model; +Output_per_unit_of_Capital=((1/beta-1+delta)/alpha)^(1/(1-psi)); +Consumption_per_unit_of_Capital=Output_per_unit_of_Capital-delta; +Labour_per_unit_of_Capital=(((Output_per_unit_of_Capital/effstar)^psi-alpha)/(1-alpha))^(1/psi); +Output_per_unit_of_Labour=Output_per_unit_of_Capital/Labour_per_unit_of_Capital; +Consumption_per_unit_of_Labour=Consumption_per_unit_of_Capital/Labour_per_unit_of_Capital; + +% Compute steady state share of capital. +ShareOfCapital=alpha/(alpha+(1-alpha)*Labour_per_unit_of_Capital^psi); + +% Compute steady state of the endogenous variables. +Labour=1/(1+Consumption_per_unit_of_Labour/((1-alpha)*theta/(1-theta)*Output_per_unit_of_Labour^(1-psi))); +Consumption=Consumption_per_unit_of_Labour*Labour; +Capital=Labour/Labour_per_unit_of_Capital; +Output=Output_per_unit_of_Capital*Capital; +Efficiency=effstar; +efficiency=0; +ExpectedTerm=beta*((((Consumption^theta)*((1-Labour)^(1-theta)))^(1-tau))/Consumption) + *(alpha*((Output/Capital)^(1-psi))+1-delta); +LagrangeMultiplier=0; +end; + +//steady; + +shocks; +var EfficiencyInnovation; +periods 1; +values -0.1; +end; + +simul(periods=300); + +rplot Consumption; +rplot Capital; + +O=load('rbc_det_exo_lag_2a_results'); + +test(oo_.endo_simul(:,2:end),O.oo_.endo_simul); \ No newline at end of file diff --git a/tests/deterministic_simulations/rbc_det_exo_lag_2c.mod b/tests/deterministic_simulations/rbc_det_exo_lag_2c.mod new file mode 100644 index 000000000..654446c8c --- /dev/null +++ b/tests/deterministic_simulations/rbc_det_exo_lag_2c.mod @@ -0,0 +1,80 @@ +// check exogenous variable lag > 1 with block+bytecode +var Capital, Output, Labour, Consumption, Efficiency, efficiency, ExpectedTerm; + +varexo EfficiencyInnovation; + +parameters beta, theta, tau, alpha, psi, delta, rho, effstar, sigma2; + +beta = 0.9900; +theta = 0.3570; +tau = 2.0000; +alpha = 0.4500; +psi = -0.1000; +delta = 0.0200; +rho = 0.8000; +effstar = 1.0000; +sigma2 = 0; + +model(block,bytecode,cutoff=0); + + // Eq. n°1: + efficiency = rho*efficiency(-1) + EfficiencyInnovation(-2); + + // Eq. n°2: + Efficiency = effstar*exp(efficiency); + + // Eq. n°3: + Output = Efficiency*(alpha*(Capital(-1)^psi)+(1-alpha)*(Labour^psi))^(1/psi); + + // Eq. n°4: + Capital = Output-Consumption + (1-delta)*Capital(-1); + + // Eq. n°5: + ((1-theta)/theta)*(Consumption/(1-Labour)) - (1-alpha)*(Output/Labour)^(1-psi); + + // Eq. n°6: + (((Consumption^theta)*((1-Labour)^(1-theta)))^(1-tau))/Consumption = ExpectedTerm(1); + + // Eq. n°7: + ExpectedTerm = beta*((((Consumption^theta)*((1-Labour)^(1-theta)))^(1-tau))/Consumption)*(alpha*((Output/Capital(-1))^(1-psi))+(1-delta)); + +end; + +steady_state_model; +Output_per_unit_of_Capital=((1/beta-1+delta)/alpha)^(1/(1-psi)); +Consumption_per_unit_of_Capital=Output_per_unit_of_Capital-delta; +Labour_per_unit_of_Capital=(((Output_per_unit_of_Capital/effstar)^psi-alpha)/(1-alpha))^(1/psi); +Output_per_unit_of_Labour=Output_per_unit_of_Capital/Labour_per_unit_of_Capital; +Consumption_per_unit_of_Labour=Consumption_per_unit_of_Capital/Labour_per_unit_of_Capital; + +% Compute steady state share of capital. +ShareOfCapital=alpha/(alpha+(1-alpha)*Labour_per_unit_of_Capital^psi); + +% Compute steady state of the endogenous variables. +Labour=1/(1+Consumption_per_unit_of_Labour/((1-alpha)*theta/(1-theta)*Output_per_unit_of_Labour^(1-psi))); +Consumption=Consumption_per_unit_of_Labour*Labour; +Capital=Labour/Labour_per_unit_of_Capital; +Output=Output_per_unit_of_Capital*Capital; +Efficiency=effstar; +efficiency=0; +ExpectedTerm=beta*((((Consumption^theta)*((1-Labour)^(1-theta)))^(1-tau))/Consumption) + *(alpha*((Output/Capital)^(1-psi))+1-delta); +LagrangeMultiplier=0; +end; + +//steady; + +shocks; +var EfficiencyInnovation; +periods 1; +values -0.1; +end; + +simul(periods=300); + +rplot Consumption; +rplot Capital; + +O=load('rbc_det_exo_lag_2a_results'); + +test(oo_.endo_simul(:,2:end),O.oo_.endo_simul); \ No newline at end of file