diff --git a/matlab/UnivariateSpectralDensity.m b/matlab/UnivariateSpectralDensity.m index 818063ad91712766d05d5d9ea81553e1b374e76e..671b2582035e9e1f98a5cef9b2ed5baf2711af91 100644 --- a/matlab/UnivariateSpectralDensity.m +++ b/matlab/UnivariateSpectralDensity.m @@ -5,7 +5,7 @@ function [omega,f] = UnivariateSpectralDensity(dr,var_list) % % Adapted from th_autocovariances.m. -% Copyright (C) 2006-2008 Dynare Team +% Copyright (C) 2006-2009 Dynare Team % % This file is part of Dynare. % @@ -48,11 +48,10 @@ end if nargin<2 var_list = []; end +if size(var_list,1) == 0 + var_list = M_.endo_names(1:M_.orig_endo_nbr, :); +end nvar = size(var_list,1); -if nvar == 0 - nvar = length(dr.order_var); - ivar = [1:nvar]'; -else ivar=zeros(nvar,1); for i=1:nvar i_tmp = strmatch(var_list(i,:),M_.endo_names,'exact'); @@ -62,7 +61,6 @@ else ivar(i) = i_tmp; end end -end f = zeros(nvar,GridSize); ghx = dr.ghx; ghu = dr.ghu; diff --git a/matlab/add_auxiliary_variables_to_steadystate.m b/matlab/add_auxiliary_variables_to_steadystate.m index bfd43964f64b77e1d9b2312c4d114b9abb15a7c3..f010d12d1150c6eec8f55a9aba4bce042d716cfb 100644 --- a/matlab/add_auxiliary_variables_to_steadystate.m +++ b/matlab/add_auxiliary_variables_to_steadystate.m @@ -25,7 +25,7 @@ function ys1 = add_auxiliary_variables_to_steadystate(ys,aux_vars,fname, ... aux_lead_nbr = 0; for i=1:n if aux_vars(i).type == 1 - ys1(k) = ys(aux_vars(i).orig_endo_index); + ys1(k) = ys(aux_vars(i).orig_index); elseif aux_vars(i).type == 0 aux_lead_nbr = aux_lead_nbr + 1; end diff --git a/matlab/check_list_of_variables.m b/matlab/check_list_of_variables.m index bdc9914bf729728877dd598e585de2efff5c21e2..801110ce94267a0ebef76063961e5c351485de89 100644 --- a/matlab/check_list_of_variables.m +++ b/matlab/check_list_of_variables.m @@ -115,7 +115,7 @@ function varlist = check_list_of_variables(options_, M_, varlist) choice=1; end if choice==1 - varlist = M_.endo_names; + varlist = M_.endo_names(1:M_.orig_endo_nbr, :); elseif choice==2 varlist = options_.varobs; elseif choice==3 diff --git a/matlab/datatomfile.m b/matlab/datatomfile.m index e968896abf9982ffc01426344a489f7d859dc7e9..a320f1e2a30b59b7322c3b668220b98bfa78278f 100644 --- a/matlab/datatomfile.m +++ b/matlab/datatomfile.m @@ -1,5 +1,4 @@ function datatomfile (s,var_list) - % function datatomfile (s,var_list) % This optional command saves the simulation results in a text file. The name of each % variable preceeds the corresponding results. This command must follow SIMUL. @@ -14,7 +13,7 @@ function datatomfile (s,var_list) % SPECIAL REQUIREMENTS % none -% Copyright (C) 2001-2007 Dynare Team +% Copyright (C) 2001-2009 Dynare Team % % This file is part of Dynare. % @@ -33,16 +32,13 @@ function datatomfile (s,var_list) global M_ oo_ -%fid=fopen([s,'.m'],'w') ; sm=[s,'.m']; fid=fopen(sm,'w') ; +if size(var_list,1) == 0 + var_list = M_.endo_names(1:M_.orig_endo_nbr,:); +end n = size(var_list,1); -if n == 0 - n = M_.endo_nbr; - ivar = [1:n]'; - var_list = M_.endo_names; -else ivar=zeros(n,1); for i=1:n i_tmp = strmatch(var_list(i,:),M_.endo_names,'exact'); @@ -52,7 +48,7 @@ else ivar(i) = i_tmp; end end -end + for i = 1:n diff --git a/matlab/disp_dr.m b/matlab/disp_dr.m index b729cfdc84a9c33d313d62f2499a4fc0825086b5..22050118e68c26cd02191e70917593bfaf61da08 100644 --- a/matlab/disp_dr.m +++ b/matlab/disp_dr.m @@ -1,6 +1,13 @@ function disp_dr(dr,order,var_list) - -% Copyright (C) 2001 Dynare Team +% Display the decision rules +% +% INPUTS +% dr [struct]: decision rules +% order [int]: order of approximation +% var_list [char array]: list of endogenous variables for which the +% decision rules should be printed + +% Copyright (C) 2001-2009 Dynare Team % % This file is part of Dynare. % @@ -26,11 +33,12 @@ function disp_dr(dr,order,var_list) k1 = dr.order_var; + if size(var_list,1) == 0 + var_list = M_.endo_names(1:M_.orig_endo_nbr, :); + end + nvar = size(var_list,1); - if nvar == 0 - nvar = length(k1); - ivar = [1:nvar]; - else + ivar=zeros(nvar,1); for i=1:nvar i_tmp = strmatch(var_list(i,:),M_.endo_names(k1,:),'exact'); @@ -41,7 +49,7 @@ function disp_dr(dr,order,var_list) ivar(i) = i_tmp; end end - end + disp('POLICY AND TRANSITION FUNCTIONS') % variable names str = ' '; @@ -90,7 +98,7 @@ function disp_dr(dr,order,var_list) % for k=1:nx flag = 0; - str1 = sprintf('%s(%d)',M_.endo_names(k1(klag(k,1)),:),klag(k,2)-M_.maximum_lag-2); + str1 = subst_auxvar(k1(klag(k,1)),klag(k,2)-M_.maximum_lag-2); str = sprintf('%-20s',str1); for i=1:nvar x = dr.ghx(ivar(i),k); @@ -130,8 +138,8 @@ function disp_dr(dr,order,var_list) for k = 1:nx for j = 1:k flag = 0; - str1 = sprintf('%s(%d),%s(%d)',M_.endo_names(k1(klag(k,1)),:),klag(k,2)-M_.maximum_lag-2, ... - M_.endo_names(k1(klag(j,1)),:),klag(j,2)-M_.maximum_lag-2); + str1 = sprintf('%s,%s',subst_auxvar(k1(klag(k,1)),klag(k,2)-M_.maximum_lag-2), ... + subst_auxvar(k1(klag(j,1)),klag(j,2)-M_.maximum_lag-2)); str = sprintf('%-20s',str1); for i=1:nvar if k == j @@ -182,7 +190,7 @@ function disp_dr(dr,order,var_list) for k = 1:nx for j = 1:nu flag = 0; - str1 = sprintf('%s(%d),%s',M_.endo_names(k1(klag(k,1)),:),klag(k,2)-M_.maximum_lag-2, ... + str1 = sprintf('%s,%s',subst_auxvar(k1(klag(k,1)),klag(k,2)-M_.maximum_lag-2), ... M_.exo_names(j,:)); str = sprintf('%-20s',str1); for i=1:nvar @@ -200,17 +208,32 @@ function disp_dr(dr,order,var_list) end end end +end -% $$$ dr.ghx -% $$$ dr.ghu -% $$$ dr.ghxx -% $$$ dr.ghuu -% $$$ dr.ghxu - -% 01/08/2001 MJ added test for order in printing quadratic terms -% 02/21/2001 MJ pass all variable names through deblank() -% 02/21/2001 MJ changed from f to g format to write numbers -% 10/09/2002 MJ corrected error on constant whith subset of variables - - - +% Given the index of an endogenous (possibly an auxiliary var), and a +% lead/lag, creates a string of the form "x(lag)". +% In the case of auxiliary vars for lags, replace by the original variable +% name, and compute the lead/lag accordingly. +function str = subst_auxvar(aux_index, aux_lead_lag) + global M_ + + if aux_index <= M_.orig_endo_nbr + str = sprintf('%s(%d)', deblank(M_.endo_names(aux_index,:)), aux_lead_lag); + return + end + for i = 1:length(M_.aux_vars) + if M_.aux_vars(i).endo_index == aux_index + switch M_.aux_vars(i).type + case 1 + orig_name = deblank(M_.endo_names(M_.aux_vars(i).orig_index, :)); + case 3 + orig_name = deblank(M_.exo_names(M_.aux_vars(i).orig_index, :)); + otherwise + error(sprintf('Invalid auxiliary type: %s', M_.endo_names(aux_index, :))) + end + str = sprintf('%s(%d)', orig_name, M_.aux_vars(i).orig_lead_lag+aux_lead_lag); + return + end + end + error(sprintf('Could not find aux var: %s', M_.endo_names(aux_index, :))) +end diff --git a/matlab/disp_dr_sparse.m b/matlab/disp_dr_sparse.m index bf5ce3f0f2f20c3d56252ec30c8f705328a62e18..859f0e178101ac46594bb311c1f15c5da68f9842 100644 --- a/matlab/disp_dr_sparse.m +++ b/matlab/disp_dr_sparse.m @@ -1,6 +1,14 @@ function disp_dr_sparse(dr,order,var_list) +% Display the decision rules in sparse mode +% This file is a modified version of disp_dr.m: the common parts should be factorized! +% +% INPUTS +% dr [struct]: decision rules +% order [int]: order of approximation +% var_list [char array]: list of endogenous variables for which the +% decision rules should be printed -% Copyright (C) 2001 Dynare Team +% Copyright (C) 2001-2009 Dynare Team % % This file is part of Dynare. % @@ -44,11 +52,13 @@ function disp_dr_sparse(dr,order,var_list) klag = [klag ; M_.block_structure.block(i).dr.kstate(k_tmp,[1 2])]; k1 = [k1 ; M_.block_structure.block(i).variable(M_.block_structure.block(i).dr.order_var)']; end + + if size(var_list,1) == 0 + var_list = M_.endo_names(1:M_.orig_endo_nbr, :); + end + nvar = size(var_list,1); - if nvar == 0 - nvar = length(k1); - ivar = [1:nvar]; - else + ivar=zeros(nvar,1); for i=1:nvar i_tmp = strmatch(var_list(i,:),M_.endo_names(k1,:),'exact'); @@ -59,7 +69,7 @@ function disp_dr_sparse(dr,order,var_list) ivar(i) = i_tmp; end end - end + disp('POLICY AND TRANSITION FUNCTIONS') % variable names str = ' '; @@ -108,7 +118,7 @@ function disp_dr_sparse(dr,order,var_list) % for k=1:nx flag = 0; - str1 = sprintf('%s(%d)',M_.endo_names(k1(klag(k,1)),:),klag(k,2)-M_.maximum_lag-2); + str1 = subst_auxvar(k1(klag(k,1)),klag(k,2)-M_.maximum_lag-2); str = sprintf('%-20s',str1); for i=1:nvar x = ghx(ivar(i),k); @@ -148,8 +158,8 @@ function disp_dr_sparse(dr,order,var_list) for k = 1:nx for j = 1:k flag = 0; - str1 = sprintf('%s(%d),%s(%d)',M_.endo_names(k1(klag(k,1)),:),klag(k,2)-M_.maximum_lag-2, ... - M_.endo_names(k1(klag(j,1)),:),klag(j,2)-M_.maximum_lag-2); + str1 = sprintf('%s,%s',subst_auxvar(k1(klag(k,1)),klag(k,2)-M_.maximum_lag-2), ... + subst_auxvar(k1(klag(j,1)),klag(j,2)-M_.maximum_lag-2)); str = sprintf('%-20s',str1); for i=1:nvar if k == j @@ -200,7 +210,7 @@ function disp_dr_sparse(dr,order,var_list) for k = 1:nx for j = 1:nu flag = 0; - str1 = sprintf('%s(%d),%s',M_.endo_names(k1(klag(k,1)),:),klag(k,2)-M_.maximum_lag-2, ... + str1 = sprintf('%s,%s',subst_auxvar(k1(klag(k,1)),klag(k,2)-M_.maximum_lag-2), ... M_.exo_names(j,:)); str = sprintf('%-20s',str1); for i=1:nvar @@ -218,17 +228,32 @@ function disp_dr_sparse(dr,order,var_list) end end end +end -% $$$ dr.ghx -% $$$ dr.ghu -% $$$ dr.ghxx -% $$$ dr.ghuu -% $$$ dr.ghxu - -% 01/08/2001 MJ added test for order in printing quadratic terms -% 02/21/2001 MJ pass all variable names through deblank() -% 02/21/2001 MJ changed from f to g format to write numbers -% 10/09/2002 MJ corrected error on constant whith subset of variables - - - +% Given the index of an endogenous (possibly an auxiliary var), and a +% lead/lag, creates a string of the form "x(lag)". +% In the case of auxiliary vars for lags, replace by the original variable +% name, and compute the lead/lag accordingly. +function str = subst_auxvar(aux_index, aux_lead_lag) + global M_ + + if aux_index <= M_.orig_endo_nbr + str = sprintf('%s(%d)', deblank(M_.endo_names(aux_index,:)), aux_lead_lag); + return + end + for i = 1:length(M_.aux_vars) + if M_.aux_vars(i).endo_index == aux_index + switch M_.aux_vars(i).type + case 1 + orig_name = deblank(M_.endo_names(M_.aux_vars(i).orig_index, :)); + case 3 + orig_name = deblank(M_.exo_names(M_.aux_vars(i).orig_index, :)); + otherwise + error(sprintf('Invalid auxiliary type: %s', M_.endo_names(aux_index, :))) + end + str = sprintf('%s(%d)', orig_name, M_.aux_vars(i).orig_lead_lag+aux_lead_lag); + return + end + end + error(sprintf('Could not find aux var: %s', M_.endo_names(aux_index, :))) +end diff --git a/matlab/disp_moments.m b/matlab/disp_moments.m index 0a9744486ec6cd89c47210d629391217484cc1e4..a4dbf1f5d46891c284a3058ce11cf8dd94b9df04 100644 --- a/matlab/disp_moments.m +++ b/matlab/disp_moments.m @@ -1,6 +1,7 @@ function disp_moments(y,var_list) +% Displays moments of simulated variables -% Copyright (C) 2001-2008 Dynare Team +% Copyright (C) 2001-2009 Dynare Team % % This file is part of Dynare. % @@ -21,11 +22,12 @@ function disp_moments(y,var_list) warning_old_state = warning; warning off - nvar = size(var_list,1); - if nvar == 0 - nvar = M_.endo_nbr; - ivar = [1:nvar]'; - else + + if size(var_list,1) == 0 + var_list = M_.endo_names(1:M_.orig_endo_nbr, :); + end + + nvar = size(var_list,1); ivar=zeros(nvar,1); for i=1:nvar i_tmp = strmatch(var_list(i,:),M_.endo_names,'exact'); @@ -35,7 +37,7 @@ function disp_moments(y,var_list) ivar(i) = i_tmp; end end - end + y = y(ivar,options_.drop+M_.maximum_lag+1:end)'; m = mean(y); @@ -90,10 +92,3 @@ function disp_moments(y,var_list) end warning(warning_old_state); -% 10/03/02 MJ corrected order std. dev var in printed report. -% 01/02/03 MJ added correlation and autocorrelation -% 01/19/03 MJ corrected variable name truncation -% 02/18/03 MJ added subtitle for HP filter -% 03/02/03 MJ added M_.maximum_lag to the number of entries of y -% 04/28/03 MJ modified handling of options_ -% 06/23/03 MJ added warning off diff --git a/matlab/disp_th_moments.m b/matlab/disp_th_moments.m index 0b7c18d321275b8a59fd1fe4485a2dc7e9c435fb..1775360df6a24cc0a3332b344209c4d65064e322 100644 --- a/matlab/disp_th_moments.m +++ b/matlab/disp_th_moments.m @@ -1,6 +1,7 @@ function disp_th_moments(dr,var_list) - -% Copyright (C) 2001-2008 Dynare Team +% Display theoretical moments of variables + +% Copyright (C) 2001-2009 Dynare Team % % This file is part of Dynare. % @@ -19,11 +20,10 @@ function disp_th_moments(dr,var_list) global M_ oo_ options_ + if size(var_list,1) == 0 + var_list = M_.endo_names(1:M_.orig_endo_nbr, :); + end nvar = size(var_list,1); - if nvar == 0 - nvar = length(dr.order_var); - ivar = [1:nvar]'; - else ivar=zeros(nvar,1); for i=1:nvar i_tmp = strmatch(var_list(i,:),M_.endo_names,'exact'); @@ -33,7 +33,6 @@ function disp_th_moments(dr,var_list) ivar(i) = i_tmp; end end - end [oo_.gamma_y,stationary_vars] = th_autocovariances(dr,ivar,M_,options_); m = dr.ys(ivar); @@ -114,13 +113,3 @@ function disp_th_moments(dr,var_list) lh = size(labels,2)+2; dyntable(title,headers,labels,z,lh,8,4); end - -% 10/09/02 MJ -% 10/18/02 MJ added th_autocovariances() and provided for lags on several -% periods -% 10/30/02 MJ added correlations and autocorrelations, uses table() -% oo_.gamma_y is now a cell array. -% 02/18/03 MJ added subtitles for HP filter -% 05/01/03 MJ corrected options_.hp_filter -% 05/21/03 MJ variance decomposition: test M_.exo_nbr > 1 -% 05/21/03 MJ displays only variables with positive variance diff --git a/matlab/dr1.m b/matlab/dr1.m index 2c864a1a3c7ad80af027c33c6a9095af0f909898..2b9cd168c326dac4078e325a14e6033d26e7c4c7 100644 --- a/matlab/dr1.m +++ b/matlab/dr1.m @@ -67,6 +67,8 @@ function [dr,info,M_,options_,oo_] = dr1(dr,task,M_,options_,oo_) if isfield(M_,'orig_model') orig_model = M_.orig_model; M_.endo_nbr = orig_model.endo_nbr; + M_.orig_endo_nbr = orig_model.orig_endo_nbr; + M_.aux_vars = orig_model.aux_vars; M_.endo_names = orig_model.endo_names; M_.lead_lag_incidence = orig_model.lead_lag_incidence; M_.maximum_lead = orig_model.maximum_lead; diff --git a/matlab/dr1_sparse.m b/matlab/dr1_sparse.m index 984aa58ac290286bd1405bdfda9989840ed0c828..b6df040377671ce77673be0ee376ccfcb82b9aa2 100644 --- a/matlab/dr1_sparse.m +++ b/matlab/dr1_sparse.m @@ -71,6 +71,8 @@ function [dr,info,M_,options_,oo_] = dr1_sparse(dr,task,M_,options_,oo_) if isfield(M_,'orig_model') orig_model = M_.orig_model; M_.endo_nbr = orig_model.endo_nbr; + M_.orig_endo_nbr = orig_model.orig_endo_nbr; + M_.aux_vars = orig_model.aux_vars; M_.endo_names = orig_model.endo_names; M_.lead_lag_incidence = orig_model.lead_lag_incidence; M_.maximum_lead = orig_model.maximum_lead; diff --git a/matlab/dyn_ramsey_dynamic_.m b/matlab/dyn_ramsey_dynamic_.m index fda44da2e3a0c9b10ca5b1fec177f54319e6bbfc..7503f6fcd50b815c3de867e89080ae8de4976ba9 100644 --- a/matlab/dyn_ramsey_dynamic_.m +++ b/matlab/dyn_ramsey_dynamic_.m @@ -1,5 +1,4 @@ function [J,M_] = dyn_ramsey_dynamic_(ys,lbar,M_,options_,oo_,it_) - % function J = dyn_ramsey_dynamic_(ys,lbar) % dyn_ramsey_dynamic_ sets up the Jacobian of the expanded model for optimal % policies. It modifies several fields of M_ @@ -14,7 +13,7 @@ function [J,M_] = dyn_ramsey_dynamic_(ys,lbar,M_,options_,oo_,it_) % SPECIAL REQUIREMENTS % none -% Copyright (C) 2003-2008 Dynare Team +% Copyright (C) 2003-2009 Dynare Team % % This file is part of Dynare. % @@ -54,6 +53,8 @@ function [J,M_] = dyn_ramsey_dynamic_(ys,lbar,M_,options_,oo_,it_) % storing original values orig_model.endo_nbr = endo_nbr; + orig_model.orig_endo_nbr = M_.orig_endo_nbr; + orig_model.aux_vars = M_.aux_vars; orig_model.endo_names = endo_names; orig_model.lead_lag_incidence = i_leadlag; orig_model.maximum_lead = max_lead; @@ -225,6 +226,10 @@ function [J,M_] = dyn_ramsey_dynamic_(ys,lbar,M_,options_,oo_,it_) % setting expanded model parameters % storing original values M_.endo_nbr = endo_nbr1; + % Consider that there is no auxiliary variable, because otherwise it + % interacts badly with the auxiliary variables from the preprocessor. + M_.orig_endo_nbr = endo_nbr1; + M_.aux_vars = []; M_.endo_names = endo_names1; M_.lead_lag_incidence = i_leadlag1; M_.maximum_lead = max_lead1; diff --git a/matlab/dynare_estimation_1.m b/matlab/dynare_estimation_1.m index 9031408764f49314e74f4f90a14b973b8325efce..6d6399458ac337dcf77b4224e73319fe8c1c7dc8 100644 --- a/matlab/dynare_estimation_1.m +++ b/matlab/dynare_estimation_1.m @@ -287,7 +287,7 @@ if options_.steadystate_flag% if the *_steadystate.m file is provided. [zeros(M_.exo_nbr,1);... oo_.exo_det_steady_state]); if size(ys,1) < M_.endo_nbr - if isfield(M_,'aux_vars') + if length(M_.aux_vars) > 0 ys = add_auxiliary_variables_to_steadystate(ys,M_.aux_vars,... M_.fname,... zeros(M_.exo_nbr,1),... diff --git a/matlab/dynasave.m b/matlab/dynasave.m index 725d7bd131ec4b8047de724755d905ffd6280a2d..bcb35bf69b484a282d7085b82b72a547c269ca3b 100644 --- a/matlab/dynasave.m +++ b/matlab/dynasave.m @@ -1,6 +1,4 @@ - function dynasave(s,var_list) - % function dynasave(s,var_list) % This optional command saves the simulation results in a .MAT file. % @@ -14,7 +12,7 @@ function dynasave(s,var_list) % SPECIAL REQUIREMENTS % none -% Copyright (C) 2001-2008 Dynare Team +% Copyright (C) 2001-2009 Dynare Team % % This file is part of Dynare. % @@ -33,12 +31,11 @@ function dynasave(s,var_list) global M_ oo_ + if size(var_list,1) == 0 + var_list = M_.endo_names(1:M_.orig_endo_nbr, :); + end + n = size(var_list,1); - if n == 0 - n = M_.endo_nbr; - ivar = [1:n]'; - var_list = M_.endo_names; - else ivar=zeros(n,1); for i=1:n i_tmp = strmatch(var_list(i,:),M_.endo_names,'exact'); @@ -48,8 +45,6 @@ function dynasave(s,var_list) ivar(i) = i_tmp; end end - end - % dyn2vec(var_list(1),var_list(1)); eval([var_list(1) '=oo_.endo_simul(ivar(1),:)'';']) diff --git a/matlab/dynatype.m b/matlab/dynatype.m index 661a5a0ba2e30749b56b8930459d8778d344d997..9ce527b9d96f1bd167315468694f477353ba374f 100644 --- a/matlab/dynatype.m +++ b/matlab/dynatype.m @@ -13,7 +13,7 @@ function dynatype (s,var_list) % SPECIAL REQUIREMENTS % none -% Copyright (C) 2001-2008 Dynare Team +% Copyright (C) 2001-2009 Dynare Team % % This file is part of Dynare. % @@ -34,12 +34,11 @@ global M_ oo_ fid=fopen(s,'w') ; +if size(var_list,1) == 0 + var_list = M_.endo_names(1:M_.orig_endo_nbr,:); +end + n = size(var_list,1); -if n == 0 - n = M_.endo_nbr; - ivar = [1:n]'; - var_list = M_.endo_names; -else ivar=zeros(n,1); for i=1:n i_tmp = strmatch(var_list(i,:),M_.endo_names,'exact'); @@ -49,8 +48,6 @@ else ivar(i) = i_tmp; end end -end - for i = 1:n fprintf(fid,M_.endo_names(ivar(i),:),'\n') ; diff --git a/matlab/evaluate_likelihood.m b/matlab/evaluate_likelihood.m index b80456fb0adf13be96785676c34f2921417c16a8..8d3efed076713096c0e389519eebc58da97f6d22 100644 --- a/matlab/evaluate_likelihood.m +++ b/matlab/evaluate_likelihood.m @@ -110,7 +110,7 @@ function [llik,parameters] = evaluate_likelihood(parameters) [zeros(M_.exo_nbr,1);... oo_.exo_det_steady_state]); if size(ys,1) < M_.endo_nbr - if isfield(M_,'aux_vars') + if length(M_.aux_vars) > 0 ys = add_auxiliary_variables_to_steadystate(ys,M_.aux_vars,... M_.fname,... zeros(M_.exo_nbr,1),... diff --git a/matlab/forcst.m b/matlab/forcst.m index 35eed8a8bbf31dee6e40ee14c8357fa35e0c66b8..29726d62f2fcd6feb7cac76ec06cc8565079b215 100644 --- a/matlab/forcst.m +++ b/matlab/forcst.m @@ -1,5 +1,4 @@ function [yf,int_width]=forcst(dr,y0,horizon,var_list) - % function [yf,int_width]=forecst(dr,y0,horizon,var_list) % computes mean forecast for a given value of the parameters % computes also confidence band for the forecast @@ -18,7 +17,7 @@ function [yf,int_width]=forcst(dr,y0,horizon,var_list) % SPECIAL REQUIREMENTS % none -% Copyright (C) 2003-2008 Dynare Team +% Copyright (C) 2003-2009 Dynare Team % % This file is part of Dynare. % @@ -46,11 +45,10 @@ function [yf,int_width]=forcst(dr,y0,horizon,var_list) inv_order_var = dr.inv_order_var; [A,B] = kalman_transition_matrix(dr,nstatic+(1:npred),1:nc,dr.transition_auxiliary_variables,M_.exo_nbr); + if size(var_list,1) == 0 + var_list = M_.endo_names(1:M_.orig_endo_nbr,:); + end nvar = size(var_list,1); - if nvar == 0 - nvar = M_.endo_nbr; - ivar = [1:nvar]; - else ivar=zeros(nvar,1); for i=1:nvar i_tmp = strmatch(var_list(i,:),M_.endo_names,'exact'); @@ -61,7 +59,6 @@ function [yf,int_width]=forcst(dr,y0,horizon,var_list) ivar(i) = i_tmp; end end - end ghx1 = dr.ghx(inv_order_var(ivar),:); ghu1 = dr.ghu(inv_order_var(ivar),:); diff --git a/matlab/forcst_unc.m b/matlab/forcst_unc.m index ffaf1295d158f604b88e4a6ced341958319ec1e9..a3d28806897808e384df0b330053849fb9f7ef18 100644 --- a/matlab/forcst_unc.m +++ b/matlab/forcst_unc.m @@ -15,7 +15,7 @@ function forcst_unc(y0,var_list) % SPECIAL REQUIREMENTS % None. -% Copyright (C) 2006-2008 Dynare Team +% Copyright (C) 2006-2009 Dynare Team % % This file is part of Dynare. % @@ -43,11 +43,10 @@ function forcst_unc(y0,var_list) % workspace initialization if isempty(var_list) - var_list = M_.endo_names; - n = M_.endo_nbr; - else - n = size(var_list,1); + var_list = M_.endo_names(1:M_.orig_endo_nbr,:); end + n = size(var_list,1); + periods = options_.forecast; exo_nbr = M_.exo_nbr; replic = options_.replic; diff --git a/matlab/forecast.m b/matlab/forecast.m index f5a34064e87e8dcb66675ed3d13cdbf9b38df790..109866142fb4534ed8c2d966c597580cd13a8dc0 100644 --- a/matlab/forecast.m +++ b/matlab/forecast.m @@ -1,5 +1,4 @@ function info = forecast(var_list,task) - % function forecast(var_list,task) % computes mean forecast for a given value of the parameters % computes also confidence band for the forecast @@ -45,9 +44,8 @@ function info = forecast(var_list,task) endo_names = M_.endo_names; if isempty(var_list) - var_list = endo_names; - i_var = 1:M_.endo_nbr; - else + var_list = endo_names(1:M_.orig_endo_nbr, :); + end i_var = []; for i = 1:size(var_list) tmp = strmatch(var_list(i,:),endo_names,'exact'); @@ -56,7 +54,7 @@ function info = forecast(var_list,task) end i_var = [i_var; tmp]; end - end + n_var = length(i_var); trend = 0; diff --git a/matlab/forecast_graphs.m b/matlab/forecast_graphs.m index a739282187af975feb98c81949057f68cfb4c6ee..aba7f08ad3a5d0efdf2da6afda82fecfe48d5b6d 100644 --- a/matlab/forecast_graphs.m +++ b/matlab/forecast_graphs.m @@ -32,9 +32,8 @@ function forecast_graphs(var_list) hpdinf = oo_.forecast.HPDinf; hpdsup = oo_.forecast.HPDsup; if isempty(var_list) - varlist = endo_names; - i_var = 1:M_.endo_nbr; - else + varlist = endo_names(1:M_.orig_endo_nbr,:); + end i_var = []; for i = 1:size(var_list) tmp = strmatch(var_list(i,:),endo_names,'exact'); @@ -43,7 +42,6 @@ function forecast_graphs(var_list) end i_var = [i_var; tmp]; end - end nvar = length(i_var); % $$$ % build trend for smoothed variables if necessary diff --git a/matlab/initial_estimation_checks.m b/matlab/initial_estimation_checks.m index 88db173cc8745898d4465fa79560dda0ab9207f6..83f1a85955c8cca631f55e79342e794d2d16efda 100644 --- a/matlab/initial_estimation_checks.m +++ b/matlab/initial_estimation_checks.m @@ -1,6 +1,5 @@ function initial_estimation_checks(xparam1,gend,data,data_index,number_of_observations,no_more_missing_observations) - -% function initial_estimation_checks(xparam1,gend,data) +% function initial_estimation_checks(xparam1,gend,data,data_index,number_of_observations,no_more_missing_observations) % Checks data (complex values, ML evaluation, initial values, BK conditions,..) % % INPUTS @@ -14,7 +13,7 @@ function initial_estimation_checks(xparam1,gend,data,data_index,number_of_observ % SPECIAL REQUIREMENTS % none -% Copyright (C) 2003-2008 Dynare Team +% Copyright (C) 2003-2009 Dynare Team % % This file is part of Dynare. % @@ -69,7 +68,7 @@ function initial_estimation_checks(xparam1,gend,data,data_index,number_of_observ [oo_.exo_steady_state; ... oo_.exo_det_steady_state]); if size(ys,1) < M_.endo_nbr - if isfield(M_,'aux_vars') + if length(M_.aux_vars) > 0 ys = add_auxiliary_variables_to_steadystate(ys,M_.aux_vars,... M_.fname,... oo_.exo_steady_state,... diff --git a/matlab/model_diagnostics.m b/matlab/model_diagnostics.m index acdb9e5631e2bf9dcf8d2eff0e8b83b625b25825..76908e1c92a909c3195fe9aaddd0fc9627203a6c 100644 --- a/matlab/model_diagnostics.m +++ b/matlab/model_diagnostics.m @@ -79,7 +79,7 @@ function model_diagnostics(M_,options_,oo_) [ys,check1] = feval([M_.fname '_steadystate'],dr.ys,... [oo_.exo_steady_state; oo_.exo_det_steady_state]); if size(ys,1) < M_.endo_nbr - if isfield(M_,'aux_vars') + if length(M_.aux_vars) > 0 ys = add_auxiliary_variables_to_steadystate(ys,M_.aux_vars,... M_.fname,... oo_.exo_steady_state,... diff --git a/matlab/osr1.m b/matlab/osr1.m index 030559725e4c9c9746b71ca20262e5c57b94f3c5..17dda24a3ba9fbd90733b4db5b8fb34b4b8ccefa 100644 --- a/matlab/osr1.m +++ b/matlab/osr1.m @@ -1,6 +1,6 @@ function osr1(i_params,i_var,weights) -% Copyright (C) 2005-2008 Dynare Team +% Copyright (C) 2005-2009 Dynare Team % % This file is part of Dynare. % @@ -47,7 +47,7 @@ function osr1(i_params,i_var,weights) [ys,check1] = feval([M_.fname '_steadystate'],oo_.steady_state,... [oo_.exo_steady_state; oo_.exo_det_steady_state]); if size(ys,1) < M_.endo_nbr - if isfield(M_,'aux_vars') + if length(M_.aux_vars) > 0 ys = add_auxiliary_variables_to_steadystate(ys,M_.aux_vars,... M_.fname,... oo_.exo_steady_state,... diff --git a/matlab/prior_posterior_statistics.m b/matlab/prior_posterior_statistics.m index c599651ea295b3ddef9373891a89ee78ee1c28a0..71367a7ae6f5612d3987035b1cf37139e9e224df 100644 --- a/matlab/prior_posterior_statistics.m +++ b/matlab/prior_posterior_statistics.m @@ -1,5 +1,4 @@ function prior_posterior_statistics(type,Y,gend,data_index,missing_value) - % function PosteriorFilterSmootherAndForecast(Y,gend, type) % Computes posterior filter smoother and forecasts % @@ -18,7 +17,7 @@ function prior_posterior_statistics(type,Y,gend,data_index,missing_value) % SPECIAL REQUIREMENTS % none -% Copyright (C) 2005-2008 Dynare Team +% Copyright (C) 2005-2009 Dynare Team % % This file is part of Dynare. % @@ -96,10 +95,8 @@ MAX_momentsno = min(B,ceil(MaxNumberOfBytes/(get_moments_size(options_)*8))); %% varlist = options_.varlist; if isempty(varlist) - varlist = M_.endo_names; - SelecVariables = transpose(1:M_.endo_nbr); - nvar = M_.endo_nbr; -else + varlist = M_.endo_names(1:M_.orig_endo_nbr, :); +end nvar = size(varlist,1); SelecVariables = []; for i=1:nvar @@ -107,7 +104,6 @@ else SelecVariables = [SelecVariables;strmatch(varlist(i,:),M_.endo_names,'exact')]; end end -end irun = ones(7,1); ifil = zeros(7,1); diff --git a/matlab/resid.m b/matlab/resid.m index f88ce8e524590efcde4d6247ee92b76d289564be..9c3c592b2e450d2a6cac5b37aa83d4d96ddca56d 100644 --- a/matlab/resid.m +++ b/matlab/resid.m @@ -40,7 +40,7 @@ function z = resid(junk) [oo_.exo_steady_state; ... oo_.exo_det_steady_state]); if size(ys, 1) < M_.endo_nbr - if isfield(M_, 'aux_vars') + if length(M_.aux_vars) > 0 ys = add_auxiliary_variables_to_steadystate(ys,M_.aux_vars, ... M_.fname, ... oo_.exo_steady_state, ... diff --git a/matlab/resol.m b/matlab/resol.m index 65c979644927d1a78b8b03fbcb395adb8183eb5a..2bf6a57a967567ffea02ec4cbf53bed4110e2d10 100644 --- a/matlab/resol.m +++ b/matlab/resol.m @@ -72,7 +72,7 @@ if options_.steadystate_flag [oo_.exo_steady_state; ... oo_.exo_det_steady_state]); if size(dr.ys,1) < M_.endo_nbr - if isfield(M_,'aux_vars') + if length(M_.aux_vars) > 0 dr.ys = add_auxiliary_variables_to_steadystate(dr.ys,M_.aux_vars,... M_.fname,... oo_.exo_steady_state,... diff --git a/matlab/steady.m b/matlab/steady.m index ed475145b4f1b6d1c400ec244cacc4ddbfbce24c..785e229289b446da4e287dc7b131dcd353b3334d 100644 --- a/matlab/steady.m +++ b/matlab/steady.m @@ -11,7 +11,7 @@ function steady() % SPECIAL REQUIREMENTS % none -% Copyright (C) 2001-2008 Dynare Team +% Copyright (C) 2001-2009 Dynare Team % % This file is part of Dynare. % @@ -56,7 +56,7 @@ function steady() disp(' ') endo_names = M_.endo_names; steady_state = oo_.steady_state; - for i=1:size(oo_.steady_state,1) + for i=1:M_.orig_endo_nbr disp(sprintf('%s \t\t %g',endo_names(i,:),steady_state(i))); end diff --git a/matlab/steady_.m b/matlab/steady_.m index a0f710df06fcb3e40864d751c202c1f49231e56c..bdd54409802c1fb70496100057624d179b1b1a5f 100644 --- a/matlab/steady_.m +++ b/matlab/steady_.m @@ -42,7 +42,7 @@ function steady_() [oo_.exo_steady_state; ... oo_.exo_det_steady_state]); if size(ys,1) < M_.endo_nbr - if isfield(M_,'aux_vars') + if length(M_.aux_vars) > 0 ys = add_auxiliary_variables_to_steadystate(ys,M_.aux_vars,... M_.fname,... oo_.exo_steady_state,... diff --git a/matlab/stoch_simul.m b/matlab/stoch_simul.m index 88211281f1c1a5ac1e458d6b078ad70427606525..25c08e142e68ee99d6affdfb9811f60aba8924ce 100644 --- a/matlab/stoch_simul.m +++ b/matlab/stoch_simul.m @@ -1,6 +1,6 @@ function info=stoch_simul(var_list) -% Copyright (C) 2001-2008 Dynare Team +% Copyright (C) 2001-2009 Dynare Team % % This file is part of Dynare. % @@ -87,15 +87,14 @@ function info=stoch_simul(var_list) if options_.irf - n = size(var_list,1); - if n == 0 - n = M_.endo_nbr; - ivar = [1:n]'; - var_list = M_.endo_names; + if size(var_list,1) == 0 + var_list = M_.endo_names(1:M_.orig_endo_nbr, :); if TeX - var_listTeX = M_.endo_names_tex; + var_listTeX = M_.endo_names_tex(1:M_.orig_endo_nbr, :); end - else + end + + n = size(var_list,1); ivar=zeros(n,1); if TeX var_listTeX = []; @@ -111,7 +110,7 @@ function info=stoch_simul(var_list) end end end - end + if TeX fidTeX = fopen([M_.fname '_IRF.TeX'],'w'); fprintf(fidTeX,'%% TeX eps-loader file generated by stoch_simul.m (Dynare).\n'); diff --git a/matlab/stoch_simul_sparse.m b/matlab/stoch_simul_sparse.m index 9057468113700f924b2bf5e503476f5edec5efc2..04741fbd926876a62c41d850a1a4602427f5dd40 100644 --- a/matlab/stoch_simul_sparse.m +++ b/matlab/stoch_simul_sparse.m @@ -1,6 +1,7 @@ function info=stoch_simul_sparse(var_list) - -% Copyright (C) 2001-2008 Dynare Team +% This file is a modified version of stoch_simul.m: common parts should be factorized! + +% Copyright (C) 2001-2009 Dynare Team % % This file is part of Dynare. % @@ -94,15 +95,14 @@ function info=stoch_simul_sparse(var_list) if options_.irf - n = size(var_list,1); - if n == 0 - n = M_.endo_nbr; - ivar = [1:n]'; - var_list = M_.endo_names; + if size(var_list,1) == 0 + var_list = M_.endo_names(1:M_.orig_endo_nbr, :); if TeX - var_listTeX = M_.endo_names_tex; + var_listTeX = M_.endo_names_tex(1:M_.orig_endo_nbr, :); end - else + end + + n = size(var_list,1); ivar=zeros(n,1); if TeX var_listTeX = []; @@ -118,7 +118,7 @@ function info=stoch_simul_sparse(var_list) end end end - end + if TeX fidTeX = fopen([M_.fname '_IRF.TeX'],'w'); fprintf(fidTeX,'%% TeX eps-loader file generated by stoch_simul.m (Dynare).\n'); diff --git a/matlab/varlist_indices.m b/matlab/varlist_indices.m index 88ee31318fed1dd75f64aec4a19e152f02a75189..7ce0f21f1b5f671333614beb3b008e0ed4f7a540 100644 --- a/matlab/varlist_indices.m +++ b/matlab/varlist_indices.m @@ -34,9 +34,8 @@ function [i_var,nvar] = varlist_indices(varlist) endo_nbr = M_.endo_nbr; if isempty(varlist) - i_var = (1:endo_nbr)'; - nvar = endo_nbr; - else + varlist = M_.endo_names(1:M_.orig_endo_nbr,:); + end i_var = []; for i=1:size(varlist,1) tmp = strmatch(varlist(i,:),M_.endo_names,'exact'); @@ -46,5 +45,3 @@ function [i_var,nvar] = varlist_indices(varlist) i_var = [i_var; tmp]; end nvar = length(i_var); - end - \ No newline at end of file diff --git a/preprocessor/SymbolTable.cc b/preprocessor/SymbolTable.cc index 8dd000d620b738a40b69499fe0e88a21b837e871..38d3c46bd7f92cfe8c6eeaf0d88868377b1acae5 100644 --- a/preprocessor/SymbolTable.cc +++ b/preprocessor/SymbolTable.cc @@ -203,23 +203,27 @@ SymbolTable::writeOutput(ostream &output) const throw (NotYetFrozenException) output << "M_.Sigma_e = zeros(" << exo_nbr() << ", " << exo_nbr() << ");" << endl; // Write the auxiliary variable table - for(int i = 0; i < (int) aux_vars.size(); i++) - { - output << "M_.aux_vars(" << i+1 << ").endo_index = " << getTypeSpecificID(aux_vars[i].symb_id)+1 << ";" << endl - << "M_.aux_vars(" << i+1 << ").type = " << aux_vars[i].type << ";" << endl; - switch(aux_vars[i].type) - { - case avEndoLead: - case avExoLead: - case avExpectation: - break; - case avEndoLag: - case avExoLag: - output << "M_.aux_vars(" << i+1 << ").orig_endo_index = " << getTypeSpecificID(aux_vars[i].orig_symb_id)+1 << ";" << endl - << "M_.aux_vars(" << i+1 << ").orig_lag = " << aux_vars[i].orig_lag << ";" << endl; - break; - } - } + output << "M_.orig_endo_nbr = " << endo_nbr() - aux_vars.size() << ";" << endl; + if (aux_vars.size() == 0) + output << "M_.aux_vars = [];" << endl; + else + for(int i = 0; i < (int) aux_vars.size(); i++) + { + output << "M_.aux_vars(" << i+1 << ").endo_index = " << getTypeSpecificID(aux_vars[i].symb_id)+1 << ";" << endl + << "M_.aux_vars(" << i+1 << ").type = " << aux_vars[i].type << ";" << endl; + switch(aux_vars[i].type) + { + case avEndoLead: + case avExoLead: + case avExpectation: + break; + case avEndoLag: + case avExoLag: + output << "M_.aux_vars(" << i+1 << ").orig_index = " << getTypeSpecificID(aux_vars[i].orig_symb_id)+1 << ";" << endl + << "M_.aux_vars(" << i+1 << ").orig_lead_lag = " << aux_vars[i].orig_lead_lag << ";" << endl; + break; + } + } if (predeterminedNbr() > 0) { @@ -260,14 +264,14 @@ SymbolTable::addLeadAuxiliaryVarInternal(bool endo, int index) throw (FrozenExce } int -SymbolTable::addLagAuxiliaryVarInternal(bool endo, int orig_symb_id, int orig_lag) throw (FrozenException) +SymbolTable::addLagAuxiliaryVarInternal(bool endo, int orig_symb_id, int orig_lead_lag) throw (FrozenException) { ostringstream varname; if (endo) varname << "AUX_ENDO_LAG_"; else varname << "AUX_EXO_LAG_"; - varname << orig_symb_id << "_" << -orig_lag; + varname << orig_symb_id << "_" << -orig_lead_lag; int symb_id; try @@ -284,7 +288,7 @@ SymbolTable::addLagAuxiliaryVarInternal(bool endo, int orig_symb_id, int orig_la avi.symb_id = symb_id; avi.type = (endo ? avEndoLag : avExoLag); avi.orig_symb_id = orig_symb_id; - avi.orig_lag = orig_lag; + avi.orig_lead_lag = orig_lead_lag; aux_vars.push_back(avi); return symb_id; @@ -297,9 +301,9 @@ SymbolTable::addEndoLeadAuxiliaryVar(int index) throw (FrozenException) } int -SymbolTable::addEndoLagAuxiliaryVar(int orig_symb_id, int orig_lag) throw (FrozenException) +SymbolTable::addEndoLagAuxiliaryVar(int orig_symb_id, int orig_lead_lag) throw (FrozenException) { - return addLagAuxiliaryVarInternal(true, orig_symb_id, orig_lag); + return addLagAuxiliaryVarInternal(true, orig_symb_id, orig_lead_lag); } int @@ -309,9 +313,9 @@ SymbolTable::addExoLeadAuxiliaryVar(int index) throw (FrozenException) } int -SymbolTable::addExoLagAuxiliaryVar(int orig_symb_id, int orig_lag) throw (FrozenException) +SymbolTable::addExoLagAuxiliaryVar(int orig_symb_id, int orig_lead_lag) throw (FrozenException) { - return addLagAuxiliaryVarInternal(false, orig_symb_id, orig_lag); + return addLagAuxiliaryVarInternal(false, orig_symb_id, orig_lead_lag); } int diff --git a/preprocessor/SymbolTable.hh b/preprocessor/SymbolTable.hh index 4eded1bc1bfd261301345d0086e6d99edb876cb7..b9395e4c1cf96314ec597ff5a8be4127b1231d7e 100644 --- a/preprocessor/SymbolTable.hh +++ b/preprocessor/SymbolTable.hh @@ -46,7 +46,7 @@ struct AuxVarInfo int symb_id; //!< Symbol ID of the auxiliary variable aux_var_t type; //!< Its type int orig_symb_id; //!< Symbol ID of the endo of the original model represented by this aux var. Not used for avEndoLead - int orig_lag; //!< Lead/lag of the endo of the original model represented by this aux var. Not used for avEndoLead + int orig_lead_lag; //!< Lead/lag of the endo of the original model represented by this aux var. Not used for avEndoLead }; //! Stores the symbol table @@ -143,7 +143,7 @@ public: private: //! Factorized code for adding aux lag variables - int addLagAuxiliaryVarInternal(bool endo, int orig_symb_id, int orig_lag) throw (FrozenException); + int addLagAuxiliaryVarInternal(bool endo, int orig_symb_id, int orig_lead_lag) throw (FrozenException); //! Factorized code for adding aux lead variables int addLeadAuxiliaryVarInternal(bool endo, int index) throw (FrozenException); @@ -162,9 +162,9 @@ public: //! Adds an auxiliary variable for endogenous with lag >= 2 /*! \param[in] orig_symb_id symbol ID of the endogenous declared by the user that this new variable will represent - \param[in] orig_lag lag value such that this new variable will be equivalent to orig_symb_id(orig_lag) + \param[in] orig_lead_lag lag value such that this new variable will be equivalent to orig_symb_id(orig_lead_lag) \return the symbol ID of the new symbol */ - int addEndoLagAuxiliaryVar(int orig_symb_id, int orig_lag) throw (FrozenException); + int addEndoLagAuxiliaryVar(int orig_symb_id, int orig_lead_lag) throw (FrozenException); //! Adds an auxiliary variable for endogenous with lead >= 1 /*! \param[in] index Used to construct the variable name @@ -173,9 +173,9 @@ public: //! Adds an auxiliary variable for exogenous with lag >= 1 /*! \param[in] orig_symb_id symbol ID of the exogenous declared by the user that this new variable will represent - \param[in] orig_lag lag value such that this new variable will be equivalent to orig_symb_id(orig_lag) + \param[in] orig_lead_lag lag value such that this new variable will be equivalent to orig_symb_id(orig_lead_lag) \return the symbol ID of the new symbol */ - int addExoLagAuxiliaryVar(int orig_symb_id, int orig_lag) throw (FrozenException); + int addExoLagAuxiliaryVar(int orig_symb_id, int orig_lead_lag) throw (FrozenException); //! Adds an auxiliary variable for the expectation operator /*! \param[in] information_set information set (possibly negative) of the expectation operator