From 7d11ed764263a71aec6efe76ad96e7d02f317610 Mon Sep 17 00:00:00 2001 From: Michel Juillard Date: Wed, 29 Jul 2015 15:41:17 +0200 Subject: [PATCH] histval: use now the same treatment for exogenous and exogenous det variables as for endogenous ones. Closes issue #617. --- matlab/global_initialization.m | 2 ++ matlab/perfect-foresight-models/make_ex_.m | 22 +++++++++++++++++----- preprocessor/NumericalInitialization.cc | 10 ++++++---- 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/matlab/global_initialization.m b/matlab/global_initialization.m index cdf4e9037..65acab6ed 100644 --- a/matlab/global_initialization.m +++ b/matlab/global_initialization.m @@ -491,6 +491,8 @@ oo_.exo_det_simul = []; M_.params = []; M_.endo_histval = []; +M_.exo_histval = []; +M_.exo_det_histval = []; M_.Correlation_matrix = []; M_.Correlation_matrix_ME = []; diff --git a/matlab/perfect-foresight-models/make_ex_.m b/matlab/perfect-foresight-models/make_ex_.m index ea269c81b..8ad894825 100644 --- a/matlab/perfect-foresight-models/make_ex_.m +++ b/matlab/perfect-foresight-models/make_ex_.m @@ -39,15 +39,27 @@ if M_.exo_det_nbr > 1 && isempty(oo_.exo_det_steady_state) end % Initialize oo_.exo_simul -if isempty(ex0_) - oo_.exo_simul = repmat(oo_.exo_steady_state',M_.maximum_lag+options_.periods+M_.maximum_lead,1); +if isempty(M_.exo_histval) + if isempty(ex0_) + oo_.exo_simul = repmat(oo_.exo_steady_state',M_.maximum_lag+options_.periods+M_.maximum_lead,1); + else + oo_.exo_simul = [ repmat(ex0_',M_.maximum_lag,1) ; repmat(oo_.exo_steady_state',options_.periods+M_.maximum_lead,1) ]; + end else - oo_.exo_simul = [ repmat(ex0_',M_.maximum_lag,1) ; repmat(oo_.exo_steady_state',options_.periods+M_.maximum_lead,1) ]; -end + if isempty(ex0_) + oo_.exo_simul = [M_.exo_histval'; repmat(oo_.exo_steady_state',options_.periods+M_.maximum_lead,1)]; + else + error('histval and endval cannot be used simultaneously') + end +end % Initialize oo_.exo_det_simul if M_.exo_det_nbr > 0 - oo_.exo_det_simul = [ones(M_.maximum_lag+options_.periods+M_.maximum_lead,1)*oo_.exo_det_steady_state']; + if isempty(M_.exo_det_histval) + oo_.exo_det_simul = repmat(oo_.exo_det_steady_state',M_.maximum_lag+options_.periods+M_.maximum_lead,1); + else + oo_.exo_det_simul = [M_.exo_det_histval'; repmat(oo_.exo_det_steady_state',options_.periods+M_.maximum_lead,1)]; + end end % Add temporary shocks diff --git a/preprocessor/NumericalInitialization.cc b/preprocessor/NumericalInitialization.cc index f8491d8b0..48fc02ffb 100644 --- a/preprocessor/NumericalInitialization.cc +++ b/preprocessor/NumericalInitialization.cc @@ -274,7 +274,9 @@ HistValStatement::writeOutput(ostream &output, const string &basename, bool mini output << "%" << endl << "% HISTVAL instructions" << endl << "%" << endl - << "M_.endo_histval = zeros(M_.endo_nbr,M_.maximum_lag);" << endl; + << "M_.endo_histval = zeros(M_.endo_nbr,M_.maximum_lag);" << endl + << "M_.exo_histval = zeros(M_.exo_nbr,M_.maximum_lag);" << endl + << "M_.exo_det_histval = zeros(M_.exo_det_nbr,M_.maximum_lag);" << endl; for (hist_values_t::const_iterator it = hist_values.begin(); it != hist_values.end(); it++) @@ -312,9 +314,9 @@ HistValStatement::writeOutput(ostream &output, const string &basename, bool mini if (type == eEndogenous) output << "M_.endo_histval( " << tsid << ", M_.maximum_lag + " << lag << ") = "; else if (type == eExogenous) - output << "oo_.exo_simul( M_.maximum_lag + " << lag << ", " << tsid << " ) = "; - else if (type != eExogenousDet) - output << "oo_.exo_det_simul( M_.maximum_lag + " << lag << ", " << tsid << " ) = "; + output << "M_.exo_histval( " << tsid << ", M_.maximum_lag + " << lag << ") = "; + else if (type == eExogenousDet) + output << "M_.exo_det_histval( " << tsid << ", M_.maximum_lag + " << lag << ") = "; expression->writeOutput(output); output << ";" << endl;