diff --git a/matlab/perfect-foresight-models/perfect_foresight_solver.m b/matlab/perfect-foresight-models/perfect_foresight_solver.m index 1f2586524e5613797ab3121db2582bc41303473f..a7fa866c53f02ad7541fb0858f17ae190b51fd1c 100644 --- a/matlab/perfect-foresight-models/perfect_foresight_solver.m +++ b/matlab/perfect-foresight-models/perfect_foresight_solver.m @@ -1,8 +1,10 @@ -function perfect_foresight_solver() +function perfect_foresight_solver(no_error_if_learnt_in_is_present) % Computes deterministic simulations % % INPUTS -% None +% no_error_if_learnt_in_is_present [boolean, optional] +% if true, then do not error out if a shocks(learnt_in=…) or endval(learnt_in=…) +% block is present % % OUTPUTS % none @@ -33,6 +35,13 @@ global M_ options_ oo_ ys0_ ex0_ check_input_arguments(options_, M_, oo_); +if nargin == 0 + no_error_if_learnt_in_is_present = false; +end +if (~isempty(M_.learnt_shocks) || ~isempty(M_.learnt_endval)) && ~no_error_if_learnt_in_is_present + error('A shocks(learnt_in=...) or endval(learnt_in=...) block is present. You want to call perfect_foresight_with_expectations_error_setup and perfect_foresight_with_expectations_error_solver.') +end + periods = options_.periods; if options_.debug diff --git a/matlab/perfect-foresight-models/perfect_foresight_with_expectation_errors_solver.m b/matlab/perfect-foresight-models/perfect_foresight_with_expectation_errors_solver.m index 5c05102ebae46623e2f32b679b22656cb714357f..dad8e57a790d7069ce4699ccda3ccf74a385a35e 100644 --- a/matlab/perfect-foresight-models/perfect_foresight_with_expectation_errors_solver.m +++ b/matlab/perfect-foresight-models/perfect_foresight_with_expectation_errors_solver.m @@ -67,7 +67,7 @@ while info_period <= periods options_.periods = sim_length; - perfect_foresight_solver; + perfect_foresight_solver(true); if ~oo_.deterministic_simulation.status error('perfect_foresight_with_expectation_errors_solver: failed to compute solution for information available at period %d\n', info_period) diff --git a/tests/deterministic_simulations/pfwee.mod b/tests/deterministic_simulations/pfwee.mod index fb7f4cf0151b444b95a544d4302767ebfc38fa27..8867998f7ac468a9058e9366621075a3f9074c5c 100644 --- a/tests/deterministic_simulations/pfwee.mod +++ b/tests/deterministic_simulations/pfwee.mod @@ -42,11 +42,13 @@ oo_.exo_steady_state = orig_exo_steady_state; perfect_foresight_setup; -// Information arriving in period 1 (temp shock now) +verbatim; + +% Information arriving in period 1 (temp shock now) oo_.exo_simul(2,1) = 1.2; -perfect_foresight_solver; +perfect_foresight_solver(true); -// Information arriving in period 2 (temp shock now + permanent shock in future) +% Information arriving in period 2 (temp shock now + permanent shock in future) oo_.exo_simul(3,1) = 1.3; oo_.exo_steady_state = 1.1; oo_.exo_simul(end, 1) = oo_.exo_steady_state; @@ -57,11 +59,11 @@ saved_endo = oo_.endo_simul(:, 1); saved_exo = oo_.exo_simul(1, :); oo_.endo_simul = oo_.endo_simul(:, 2:end); oo_.exo_simul = oo_.exo_simul(2:end, :); -perfect_foresight_solver; +perfect_foresight_solver(true); oo_.endo_simul = [ saved_endo oo_.endo_simul ]; oo_.exo_simul = [ saved_exo; oo_.exo_simul ]; -// Information arriving in period 3 (temp shock now + permanent shock in future) +% Information arriving in period 3 (temp shock now + permanent shock in future) oo_.exo_simul(4,1) = 1.4; oo_.exo_steady_state = 1.2; oo_.exo_simul(end, 1) = oo_.exo_steady_state; @@ -72,11 +74,11 @@ saved_endo = oo_.endo_simul(:, 1:2); saved_exo = oo_.exo_simul(1:2, :); oo_.endo_simul = oo_.endo_simul(:, 3:end); oo_.exo_simul = oo_.exo_simul(3:end, :); -perfect_foresight_solver; +perfect_foresight_solver(true); oo_.endo_simul = [ saved_endo oo_.endo_simul ]; oo_.exo_simul = [ saved_exo; oo_.exo_simul ]; -// Information arriving in period 6 (permanent shock arriving now) +% Information arriving in period 6 (permanent shock arriving now) oo_.exo_simul(7,1) = 1.1; oo_.exo_simul(8,1) = 1.1; oo_.exo_steady_state = 1.1; @@ -88,7 +90,7 @@ saved_endo = oo_.endo_simul(:, 1:5); saved_exo = oo_.exo_simul(1:5, :); oo_.endo_simul = oo_.endo_simul(:, 6:end); oo_.exo_simul = oo_.exo_simul(6:end, :); -perfect_foresight_solver; +perfect_foresight_solver(true); oo_.endo_simul = [ saved_endo oo_.endo_simul ]; oo_.exo_simul = [ saved_exo; oo_.exo_simul ]; @@ -97,3 +99,5 @@ oo_.exo_simul = [ saved_exo; oo_.exo_simul ]; if any(any(pfwee_simul-oo_.endo_simul ~= 0)) error('Error in perfect_foresight_with_expectation_errors') end + +end; // verbatim diff --git a/tests/deterministic_simulations/pfwee_constant_sim_length.mod b/tests/deterministic_simulations/pfwee_constant_sim_length.mod index efe0d2efa2d217ffcba5b94c1da99b708992fc8e..109d047b2c85dcad6dbeb3ca56100f7d3456acbb 100644 --- a/tests/deterministic_simulations/pfwee_constant_sim_length.mod +++ b/tests/deterministic_simulations/pfwee_constant_sim_length.mod @@ -41,11 +41,13 @@ oo_.exo_steady_state = orig_exo_steady_state; perfect_foresight_setup; -// Information arriving in period 1 (temp shock now) +verbatim; + +% Information arriving in period 1 (temp shock now) oo_.exo_simul(2,1) = 1.2; -perfect_foresight_solver; +perfect_foresight_solver(true); -// Information arriving in period 2 (temp shock now + permanent shock in future) +% Information arriving in period 2 (temp shock now + permanent shock in future) oo_.exo_simul(3,1) = 1.3; oo_.exo_steady_state = 1.1; oo_.exo_simul(9:10, 1) = repmat(oo_.exo_steady_state', 2, 1); @@ -55,11 +57,11 @@ saved_endo = oo_.endo_simul(:, 1); saved_exo = oo_.exo_simul(1, :); oo_.endo_simul = oo_.endo_simul(:, 2:end); oo_.exo_simul = oo_.exo_simul(2:end, :); -perfect_foresight_solver; +perfect_foresight_solver(true); oo_.endo_simul = [ saved_endo oo_.endo_simul ]; oo_.exo_simul = [ saved_exo; oo_.exo_simul ]; -// Information arriving in period 3 (temp shock now + permanent shock in future) +% Information arriving in period 3 (temp shock now + permanent shock in future) oo_.exo_simul(4,1) = 1.4; oo_.exo_steady_state = 1.2; oo_.exo_simul(9:11, 1) = repmat(oo_.exo_steady_state', 3, 1); @@ -69,11 +71,11 @@ saved_endo = oo_.endo_simul(:, 1:2); saved_exo = oo_.exo_simul(1:2, :); oo_.endo_simul = oo_.endo_simul(:, 3:end); oo_.exo_simul = oo_.exo_simul(3:end, :); -perfect_foresight_solver; +perfect_foresight_solver(true); oo_.endo_simul = [ saved_endo oo_.endo_simul ]; oo_.exo_simul = [ saved_exo; oo_.exo_simul ]; -// Information arriving in period 6 (permanent shock arriving now) +% Information arriving in period 6 (permanent shock arriving now) oo_.exo_simul(7,1) = 1.1; oo_.exo_simul(8,1) = 1.1; oo_.exo_steady_state = 1.1; @@ -85,7 +87,7 @@ saved_endo = oo_.endo_simul(:, 1:5); saved_exo = oo_.exo_simul(1:5, :); oo_.endo_simul = oo_.endo_simul(:, 6:end); oo_.exo_simul = oo_.exo_simul(6:end, :); -perfect_foresight_solver; +perfect_foresight_solver(true); oo_.endo_simul = [ saved_endo oo_.endo_simul ]; oo_.exo_simul = [ saved_exo; oo_.exo_simul ]; @@ -94,3 +96,5 @@ oo_.exo_simul = [ saved_exo; oo_.exo_simul ]; if any(any(pfwee_simul-oo_.endo_simul ~= 0)) error('Error in perfect_foresight_with_expectation_errors') end + +end; // verbatim diff --git a/tests/deterministic_simulations/pfwee_learnt_in.mod b/tests/deterministic_simulations/pfwee_learnt_in.mod index 780117fd0cf4e12e31b27b900ac91469ad458d40..3a4a45c47ce691693f89f4bf6b8d182d5e3937c3 100644 --- a/tests/deterministic_simulations/pfwee_learnt_in.mod +++ b/tests/deterministic_simulations/pfwee_learnt_in.mod @@ -91,11 +91,13 @@ oo_.exo_steady_state = orig_exo_steady_state; perfect_foresight_setup; -// Information arriving in period 1 (temp shock now and tomorrow) +verbatim; + +% Information arriving in period 1 (temp shock now and tomorrow) oo_.exo_simul(2:3,1) = 1.2; -perfect_foresight_solver; +perfect_foresight_solver(true); -// Information arriving in period 2 (temp shock now + permanent shock in future) +% Information arriving in period 2 (temp shock now + permanent shock in future) oo_.exo_simul(3,1) = 1.3; oo_.exo_steady_state = 1.1; oo_.exo_simul(end, 1) = oo_.exo_steady_state; @@ -106,11 +108,11 @@ saved_endo = oo_.endo_simul(:, 1); saved_exo = oo_.exo_simul(1, :); oo_.endo_simul = oo_.endo_simul(:, 2:end); oo_.exo_simul = oo_.exo_simul(2:end, :); -perfect_foresight_solver; +perfect_foresight_solver(true); oo_.endo_simul = [ saved_endo oo_.endo_simul ]; oo_.exo_simul = [ saved_exo; oo_.exo_simul ]; -// Information arriving in period 3 (temp shocks + permanent shock in future) +% Information arriving in period 3 (temp shocks + permanent shock in future) oo_.exo_simul(4,1) = 1.4; oo_.exo_steady_state = 1.1+0.1; oo_.exo_simul(8,1) = (1.5/1.2)*oo_.exo_steady_state; @@ -122,11 +124,11 @@ saved_endo = oo_.endo_simul(:, 1:2); saved_exo = oo_.exo_simul(1:2, :); oo_.endo_simul = oo_.endo_simul(:, 3:end); oo_.exo_simul = oo_.exo_simul(3:end, :); -perfect_foresight_solver; +perfect_foresight_solver(true); oo_.endo_simul = [ saved_endo oo_.endo_simul ]; oo_.exo_simul = [ saved_exo; oo_.exo_simul ]; -// Information arriving in period 6 (temp shocks + permanent shock) +% Information arriving in period 6 (temp shocks + permanent shock) oo_.exo_simul(7,1) = 1*0.8; oo_.exo_simul(8,1) = 1.5*0.8; oo_.exo_steady_state = (1.1+0.1)*0.75; @@ -138,7 +140,7 @@ saved_endo = oo_.endo_simul(:, 1:5); saved_exo = oo_.exo_simul(1:5, :); oo_.endo_simul = oo_.endo_simul(:, 6:end); oo_.exo_simul = oo_.exo_simul(6:end, :); -perfect_foresight_solver; +perfect_foresight_solver(true); oo_.endo_simul = [ saved_endo oo_.endo_simul ]; oo_.exo_simul = [ saved_exo; oo_.exo_simul ]; @@ -147,3 +149,5 @@ oo_.exo_simul = [ saved_exo; oo_.exo_simul ]; if any(any(pfwee_simul-oo_.endo_simul ~= 0)) error('Error in perfect_foresight_with_expectation_errors') end + +end; // verbatim