Commit 30cbcdbb authored by Sébastien Villemot's avatar Sébastien Villemot
Browse files

Store histval information for endogenous in M_.endo_histval

Really closes: #157
parent de337ad7
......@@ -61,10 +61,10 @@ switch task
if horizon == 0
horizon = 5;
end
if size(oo_.endo_simul,2) < maximum_lag
if isempty(M_.endo_histval)
y0 = repmat(oo_.steady_state,1,maximum_lag);
else
y0 = oo_.endo_simul(:,1:maximum_lag);
y0 = M_.endo_histval;
end
case 'smoother'
horizon = options_.forecast;
......
......@@ -332,6 +332,7 @@ oo_.exo_det_steady_state = [];
oo_.exo_det_simul = [];
M_.params = [];
M_.endo_histval = [];
% BVAR
M_.bvar = [];
......
......@@ -35,13 +35,16 @@ if isempty(oo_.steady_state)
oo_.steady_state = zeros(M_.endo_nbr,1);
end
if isempty(oo_.endo_simul)
if isempty(M_.endo_histval)
if isempty(ys0_)
oo_.endo_simul = [oo_.steady_state*ones(1,M_.maximum_lag+options_.periods+M_.maximum_lead)];
else
oo_.endo_simul = [ys0_*ones(1,M_.maximum_lag) oo_.steady_state*ones(1,options_.periods+M_.maximum_lead)];
end
elseif size(oo_.endo_simul,2) < M_.maximum_lag+M_.maximum_lead+options_.periods
oo_.endo_simul = [oo_.endo_simul ...
oo_.steady_state*ones(1,M_.maximum_lag+options_.periods+M_.maximum_lead-size(oo_.endo_simul,2),1)];
else
if ~isempty(ys0_)
error('histval and endval cannot be used simultaneously')
end
oo_.endo_simul = [M_.endo_histval ...
oo_.steady_state*ones(1,options_.periods+M_.maximum_lead)];
end
......@@ -130,13 +130,10 @@ if options_.periods > 0 && ~PI_PCL_solver
options_ =options_old;
return
end
% Note that the first column of oo_.endo_simul is preserved by the following
% call to simult; this is important because stoch_simul can be followed by
% forecast (see ticket #157)
if size(oo_.endo_simul,2) == 0
if isempty(M_.endo_histval)
y0 = oo_.dr.ys;
else
y0 = oo_.endo_simul(:,1);
y0 = M_.endo_histval;
end
oo_.endo_simul = simult(y0,oo_.dr);
dyn2vec;
......
......@@ -82,10 +82,10 @@ elseif options_.periods ~= 0
options_ =options_old;
return
end
if size(oo_.endo_simul,2) < maximum_lag
if isempty(M_.endo_histval)
y0 = oo_.dr.ys;
else
y0 = oo_.endo_simul(:,1);
y0 = M_.endo_histval;
end
oo_.endo_simul = simult(y0,oo_.dr);
dyn2vec;
......
......@@ -132,8 +132,7 @@ InitValStatement::writeOutput(ostream &output, const string &basename) const
void
InitValStatement::writeOutputPostInit(ostream &output) const
{
output << "oo_.endo_simul=[oo_.steady_state*ones(1,M_.maximum_lag)];" << endl
<< "if M_.exo_nbr > 0;" << endl
output << "if M_.exo_nbr > 0;" << endl
<< "\too_.exo_simul = [ones(M_.maximum_lag,1)*oo_.exo_steady_state'];" << endl
<<"end;" << endl
<< "if M_.exo_det_nbr > 0;" << endl
......@@ -189,7 +188,7 @@ HistValStatement::writeOutput(ostream &output, const string &basename) const
output << "%" << endl
<< "% HISTVAL instructions" << endl
<< "%" << endl
<< "oo_.endo_simul = zeros(M_.endo_nbr,M_.maximum_lag);" << endl;
<< "M_.endo_histval = zeros(M_.endo_nbr,M_.maximum_lag);" << endl;
for (hist_values_t::const_iterator it = hist_values.begin();
it != hist_values.end(); it++)
......@@ -225,7 +224,7 @@ HistValStatement::writeOutput(ostream &output, const string &basename) const
int tsid = symbol_table.getTypeSpecificID(symb_id) + 1;
if (type == eEndogenous)
output << "oo_.endo_simul( " << tsid << ", M_.maximum_lag + " << lag << ") = ";
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)
......
......@@ -71,7 +71,7 @@ public:
InitValStatement(const init_values_t &init_values_arg,
const SymbolTable &symbol_table_arg);
virtual void writeOutput(ostream &output, const string &basename) const;
//! Writes initializations for oo_.endo_simul, oo_.exo_simul and oo_.exo_det_simul
//! Writes initializations for oo_.exo_simul and oo_.exo_det_simul
void writeOutputPostInit(ostream &output) const;
};
......
......@@ -49,4 +49,7 @@ a(-1) = 0.3;
u(-1) = 0.1;
end;
stoch_simul(nograph);
stoch_simul(nograph, periods = 200);
forecast;
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment