diff --git a/matlab/backward/backward_model_inversion.m b/matlab/backward/backward_model_inversion.m index fe4ae51528d503df4b8004ae4434513b8ee7bf66..99198771f5c349351af09eb19b0ab0ed330e2951 100644 --- a/matlab/backward/backward_model_inversion.m +++ b/matlab/backward/backward_model_inversion.m @@ -87,17 +87,15 @@ model_dtransf = str2func('dynamic_backward_model_for_inversion'); % Initialization of the returned simulations (endogenous variables). Y = NaN(DynareModel.endo_nbr, nobs(constraints)); - Y = [transpose(initialconditions{DynareModel.endo_names{:}}(constraints.dates(1)-1).data), Y]; for i=1:nyctrl Y(controlledendogenousvariables_id(i),2:end) = transpose(constraints.data(:,i)); end % Exogenous variables. -X = exogenousvariables.data; %{exo_names{:}}(constraints.dates(1)-max(1,DynareModel.orig_maximum_exo_lag):constraints.dates(end)).data; +X = exogenousvariables.data; % Inversion of the model, solvers for the free endogenous and exogenous variables (call a Newton-like algorithm in each period). - ity = 2; itx = find(exogenousvariables.dates==constraints.dates(1)); DynareOptions.solve_algo=4; diff --git a/matlab/backward/simul_backward_linear_model.m b/matlab/backward/simul_backward_linear_model.m index da055a2bbcc6fdfab4719225c3d404cfc5627cd0..381642998212bf667f3739bf51b679aef7172e6b 100644 --- a/matlab/backward/simul_backward_linear_model.m +++ b/matlab/backward/simul_backward_linear_model.m @@ -1,4 +1,4 @@ -function simulations = simul_backward_linear_model(varargin) +function simulations = simul_backward_linear_model(initialconditions, samplesize, DynareOptions, DynareModel, DynareOutput, innovations) % Simulates a stochastic linear backward looking model. % @@ -38,16 +38,20 @@ function simulations = simul_backward_linear_model(varargin) % You should have received a copy of the GNU General Public License % along with Dynare. If not, see <http://www.gnu.org/licenses/>. -if M_.maximum_lead +if DynareModel.maximum_lead error('Model defined in %s.mod is not backward.', M_.fname) end -if M_.maximum_lag +if ~DynareModel.maximum_lag error('Model defined in %s.mod is not backward.', M_.fname) end +if nargin<6 + innovations = []; +end + [initialconditions, samplesize, innovations, DynareOptions, DynareModel, DynareOutput, endonames, exonames, nx, ny1, iy1, jdx, model_dynamic] = ... - simul_backward_model_init(varargin{:}); + simul_backward_model_init(initialconditions, samplesize, DynareOptions, DynareModel, DynareOutput, innovations); [ysim, xsim] = simul_backward_linear_model_(initialconditions, samplesize, DynareOptions, DynareModel, DynareOutput, innovations, nx, ny1, iy1, jdx, model_dynamic); diff --git a/matlab/backward/simul_backward_model_init.m b/matlab/backward/simul_backward_model_init.m index c519cebe56d086ea55139bbf71300b2c0dfc12d0..ab1e30c6ebe62f1012ae4c2ea85cbb22be1ad026 100644 --- a/matlab/backward/simul_backward_model_init.m +++ b/matlab/backward/simul_backward_model_init.m @@ -1,4 +1,5 @@ -function [initialconditions, samplesize, innovations, DynareOptions, DynareModel, DynareOutput, endonames, exonames, nx, ny1, iy1, jdx, model_dynamic, y] = simul_backward_model_init(varargin) +function [initialconditions, samplesize, innovations, DynareOptions, DynareModel, DynareOutput, endonames, exonames, nx, ny1, iy1, jdx, model_dynamic, y] = ... + simul_backward_model_init(initialconditions, samplesize, DynareOptions, DynareModel, DynareOutput, innovations) % Initialization of the routines simulating backward models. @@ -19,12 +20,6 @@ function [initialconditions, samplesize, innovations, DynareOptions, DynareModel % You should have received a copy of the GNU General Public License % along with Dynare. If not, see <http://www.gnu.org/licenses/>. -initialconditions = varargin{1}; -samplesize = varargin{2}; -DynareOptions = varargin{3}; -DynareModel = varargin{4}; -DynareOutput = varargin{5}; - % Test if the model is backward. if DynareModel.maximum_lead error('simul_backward_nonlinear_model:: The specified model is not backward looking!') @@ -150,7 +145,7 @@ if missinginitialcondition error('Please fix the dseries object used for setting the initial conditions!') end -if nargin<6 || isempty(varargin{6}) +if nargin<6 || isempty(innovations) % Set the covariance matrix of the structural innovations. variances = diag(DynareModel.Sigma_e); number_of_shocks = length(DynareModel.Sigma_e); @@ -174,7 +169,6 @@ if nargin<6 || isempty(varargin{6}) DynareOutput.exo_simul(:,positive_var_indx) = DynareOutput.bnlms.shocks; innovations = DynareOutput.exo_simul; else - innovations = varargin{6}; DynareOutput.exo_simul = innovations; % innovations end diff --git a/matlab/backward/simul_backward_nonlinear_model.m b/matlab/backward/simul_backward_nonlinear_model.m index 048d85e4df70a7ffdbd43bd0a168519e214dbcd3..956af53aff61d4782be06edd7b1229c810cb142f 100644 --- a/matlab/backward/simul_backward_nonlinear_model.m +++ b/matlab/backward/simul_backward_nonlinear_model.m @@ -1,4 +1,4 @@ -function simulations = simul_backward_nonlinear_model(varargin) +function simulations = simul_backward_nonlinear_model(initialconditions, samplesize, DynareOptions, DynareModel, DynareOutput, innovations) % Simulates a stochastic non linear backward looking model with arbitrary precision (a deterministic solver is used). % @@ -38,16 +38,20 @@ function simulations = simul_backward_nonlinear_model(varargin) % You should have received a copy of the GNU General Public License % along with Dynare. If not, see <http://www.gnu.org/licenses/>. -if M_.maximum_lead - error('Model defined in %s.mod is not backward.', M_.fname) +if DynareModel.maximum_lead + error('Model defined in %s.mod is not backward.', DynareModel.fname) end -if M_.maximum_lag - error('Model defined in %s.mod is not backward.', M_.fname) +if ~DynareModel.maximum_lag + error('Model defined in %s.mod is not backward.', DynareModel.fname) +end + +if nargin<6 + innovations = []; end [initialconditions, samplesize, innovations, DynareOptions, DynareModel, DynareOutput, endonames, exonames, ~, ~, iy1, ~, model_dynamic] = ... - simul_backward_model_init(varargin{:}); + simul_backward_model_init(initialconditions, samplesize, DynareOptions, DynareModel, DynareOutput, innovations); [ysim, xsim] = simul_backward_nonlinear_model_(initialconditions, samplesize, DynareOptions, DynareModel, DynareOutput, innovations, iy1, model_dynamic);