Error out if perfect_foresight_solver is called with shocks(learnt_in=…) or endval(learnt_in=…) blocks

This is to prevent the accidental use of the regular perfect foresight solver
when one actually wants the one with expectation errors.
kalman-mex
Sébastien Villemot 2023-10-20 15:13:11 -04:00
parent 7449d26e51
commit df9c7d85b8
No known key found for this signature in database
GPG Key ID: 2CECE9350ECEBE4A
5 changed files with 51 additions and 30 deletions

View File

@ -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

View File

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

View File

@ -42,11 +42,13 @@ oo_.exo_steady_state = orig_exo_steady_state;
perfect_foresight_setup;
// Information arriving in period 1 (temp shock now)
oo_.exo_simul(2,1) = 1.2;
perfect_foresight_solver;
verbatim;
// Information arriving in period 2 (temp shock now + permanent shock in future)
% Information arriving in period 1 (temp shock now)
oo_.exo_simul(2,1) = 1.2;
perfect_foresight_solver(true);
% 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

View File

@ -41,11 +41,13 @@ oo_.exo_steady_state = orig_exo_steady_state;
perfect_foresight_setup;
// Information arriving in period 1 (temp shock now)
oo_.exo_simul(2,1) = 1.2;
perfect_foresight_solver;
verbatim;
// Information arriving in period 2 (temp shock now + permanent shock in future)
% Information arriving in period 1 (temp shock now)
oo_.exo_simul(2,1) = 1.2;
perfect_foresight_solver(true);
% 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

View File

@ -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)
oo_.exo_simul(2:3,1) = 1.2;
perfect_foresight_solver;
verbatim;
// Information arriving in period 2 (temp shock now + permanent shock in future)
% Information arriving in period 1 (temp shock now and tomorrow)
oo_.exo_simul(2:3,1) = 1.2;
perfect_foresight_solver(true);
% 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