From 6c7f3f1932c11277c0d670e4c6e7980454632004 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Adjemian=20=28Charybdis=29?= <stephane.adjemian@univ-lemans.fr> Date: Fri, 29 Apr 2016 23:12:52 +0200 Subject: [PATCH] Added input to pass sequence of shocks. --- matlab/simul_backward_nonlinear_model.m | 50 +++++++++++++------------ 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/matlab/simul_backward_nonlinear_model.m b/matlab/simul_backward_nonlinear_model.m index 788320c481..507f371d9d 100644 --- a/matlab/simul_backward_nonlinear_model.m +++ b/matlab/simul_backward_nonlinear_model.m @@ -1,4 +1,4 @@ -function DynareOutput = simul_backward_nonlinear_model(initial_conditions, sample_size, DynareOptions, DynareModel, DynareOutput) +function DynareOutput = simul_backward_nonlinear_model(initial_conditions, sample_size, DynareOptions, DynareModel, DynareOutput, innovations) %@info: %! @deftypefn {Function File} {@var{DynareOutput} =} simul_backward_nonlinear_model (@var{sample_size},@var{DynareOptions}, @var{DynareModel}, @var{DynareOutput}) @@ -55,31 +55,35 @@ if DynareModel.maximum_lead error(['simul_backward_nonlinear_model:: The specified model is not backward looking!']) end -% Set the covariance matrix of the structural innovations. -variances = diag(DynareModel.Sigma_e); -number_of_shocks = length(DynareModel.Sigma_e); -positive_var_indx = find(variances>0); -effective_number_of_shocks = length(positive_var_indx); -covariance_matrix = DynareModel.Sigma_e(positive_var_indx,positive_var_indx); -covariance_matrix_upper_cholesky = chol(covariance_matrix); +if nargin<6 + % Set the covariance matrix of the structural innovations. + variances = diag(DynareModel.Sigma_e); + number_of_shocks = length(DynareModel.Sigma_e); + positive_var_indx = find(variances>0); + effective_number_of_shocks = length(positive_var_indx); + covariance_matrix = DynareModel.Sigma_e(positive_var_indx,positive_var_indx); + covariance_matrix_upper_cholesky = chol(covariance_matrix); -% Set seed to its default state. -if DynareOptions.bnlms.set_dynare_seed_to_default - set_dynare_seed('default'); -end + % Set seed to its default state. + if DynareOptions.bnlms.set_dynare_seed_to_default + set_dynare_seed('default'); + end -% Simulate structural innovations. -switch DynareOptions.bnlms.innovation_distribution - case 'gaussian' - DynareOutput.bnlms.shocks = randn(sample_size,effective_number_of_shocks)*covariance_matrix_upper_cholesky; - otherwise - error(['simul_backward_nonlinear_model:: ' DynareOption.bnlms.innovation_distribution ' distribution for the structural innovations is not (yet) implemented!']) -end + % Simulate structural innovations. + switch DynareOptions.bnlms.innovation_distribution + case 'gaussian' + DynareOutput.bnlms.shocks = randn(sample_size,effective_number_of_shocks)*covariance_matrix_upper_cholesky; + otherwise + error(['simul_backward_nonlinear_model:: ' DynareOption.bnlms.innovation_distribution ' distribution for the structural innovations is not (yet) implemented!']) + end -% Put the simulated innovations in DynareOutput.exo_simul. -DynareOutput.exo_simul = zeros(sample_size,number_of_shocks); -DynareOutput.exo_simul(:,positive_var_indx) = DynareOutput.bnlms.shocks; -DynareOutput.exo_simul = [zeros(1,number_of_shocks); DynareOutput.exo_simul]; + % Put the simulated innovations in DynareOutput.exo_simul. + DynareOutput.exo_simul = zeros(sample_size,number_of_shocks); + DynareOutput.exo_simul(:,positive_var_indx) = DynareOutput.bnlms.shocks; + DynareOutput.exo_simul = [zeros(1,number_of_shocks); DynareOutput.exo_simul]; +else + DynareOutput.exo_simul = innovations; +end % Get usefull vector of indices. ny0 = nnz(DynareModel.lead_lag_incidence(2,:)); -- GitLab