diff --git a/matlab/simult_.m b/matlab/simult_.m index fd67254f7..bf35c745b 100644 --- a/matlab/simult_.m +++ b/matlab/simult_.m @@ -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 diff --git a/tests/k_order_perturbation/burnside_k_order.mod b/tests/k_order_perturbation/burnside_k_order.mod index 9ba542833..aef406e5a 100644 --- a/tests/k_order_perturbation/burnside_k_order.mod +++ b/tests/k_order_perturbation/burnside_k_order.mod @@ -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;