simult_.m: remove redundant first simulation period for k_order_simulations

Closes https://git.dynare.org/Dynare/dynare/-/issues/1819
pac-components
Johannes Pfeifer 2021-10-11 16:11:45 +02:00
parent cd43c8669b
commit d5141ced42
2 changed files with 6 additions and 5 deletions

View File

@ -53,15 +53,16 @@ if ~options_.k_order_solver || (options_.k_order_solver && options_.pruning) %if
end
if options_.k_order_solver && ~options_.pruning % Call dynare++ routines.
ex_ = [zeros(M_.maximum_lag,M_.exo_nbr); ex_];
if options_.order~=iorder
error(['The k_order_solver requires the specified approximation order to be '...
'consistent with the one used for computing the decision rules'])
end
y_start=y_(:,1); %store first period required for output
y_ = dynare_simul_(iorder,M_.nstatic,M_.npred,M_.nboth,M_.nfwrd,exo_nbr, ...
y_(dr.order_var,1),ex_',M_.Sigma_e,options_.DynareRandomStreams.seed, ...
y_start(dr.order_var,:),ex_',M_.Sigma_e,options_.DynareRandomStreams.seed, ...
dr.ys(dr.order_var),dr);
y_(dr.order_var,:) = y_;
y_=[y_start y_];
else
if options_.block
if M_.maximum_lag > 0

View File

@ -53,7 +53,7 @@
*/
@#define k =7
@#define k =7
var y x;
varexo e;
@ -133,7 +133,7 @@ nboth = M_.nboth;
nfwrd = M_.nfwrd;
nexog = M_.exo_nbr;
ystart = oo_.dr.ys(oo_.dr.order_var,1);
ex_ = [zeros(M_.maximum_lag,M_.exo_nbr), oo_.exo_simul'];
ex_ = oo_.exo_simul';
ysteady = oo_.dr.ys(oo_.dr.order_var);
dr = oo_.dr;
@ -143,7 +143,7 @@ seed = options_.DynareRandomStreams;
tStart1 = tic; fortran_endo_simul = k_order_simul(order, nstat, npred, nboth, nfwrd, nexog, ystart, ex_, ysteady, dr); tElapsed1 = toc(tStart1);
tStart2 = tic; dynare_endo_simul = dynare_simul_(order, nstat, npred, nboth, nfwrd, nexog, ystart,ex_,vcov,seed, ysteady, dr); tElapsed2 = toc(tStart2);
if max(max(abs(oo_.endo_simul-fortran_endo_simul(oo_.dr.order_var,2:end)))) > 1e-10
if max(max(abs(oo_.endo_simul-fortran_endo_simul(oo_.dr.order_var,:)))) > 1e-10
error('Error in k_order_simul: inaccurate simulation');
end;