diff --git a/matlab/graph_decomp.m b/matlab/graph_decomp.m index 14cfd0d95..378ca3d8e 100644 --- a/matlab/graph_decomp.m +++ b/matlab/graph_decomp.m @@ -1,7 +1,7 @@ -function []=graph_decomp(z,shock_names,varlist,initial_date) +function []=graph_decomp(z,shock_names,endo_names,i_var,initial_date) %function []=graph_decomp(z,varlist,initial_period,freq) -% Copyright (C) 2009 Dynare Team +% Copyright (C) 2010 Dynare Team % % This file is part of Dynare. % @@ -18,7 +18,6 @@ function []=graph_decomp(z,shock_names,varlist,initial_date) % You should have received a copy of the GNU General Public License % along with Dynare. If not, see . -global M_ % number of components equals number of shocks + 1 (initial conditions) comp_nbr = size(z,2)-1; @@ -27,7 +26,8 @@ freq = initial_date.freq; initial_period = initial_date.period + initial_date.sub_period/freq; x = initial_period-1/freq:(1/freq):initial_period+(gend-1)/freq; -[i_var,nvar] = varlist_indices(varlist); +nvar = length(i_var); + for j=1:nvar z1 = squeeze(z(i_var(j),:,:)); xmin = x(1); @@ -39,7 +39,7 @@ for j=1:nvar if ymax-ymin < 1e-6 continue end - figure('Name',M_.endo_names(i_var(j),:)); + figure('Name',endo_names(i_var(j),:)); ax=axes('Position',[0.1 0.1 0.6 0.8]); axis(ax,[xmin xmax ymin ymax]); plot(ax,x(2:end),z1(end,:),'k-','LineWidth',2) diff --git a/matlab/shock_decomposition.m b/matlab/shock_decomposition.m index 9cf773ffb..7f7ef1dd6 100644 --- a/matlab/shock_decomposition.m +++ b/matlab/shock_decomposition.m @@ -37,7 +37,11 @@ endo_nbr = M_.endo_nbr; nshocks = M_.exo_nbr; % indices of endogenous variables -[i_var,nvar] = varlist_indices(varlist); +if size(varlist,1) == 0 + varlist = M_.endo_names(M_.orig_endo_nbr); +end + +[i_var,nvar] = varlist_indices(varlist,M_.endo_names); % reduced form dr = oo_.dr; @@ -91,4 +95,4 @@ options_.initial_date.freq = 1; options_.initial_date.period = 1; options_.initial_date.sub_period = 0; -graph_decomp(z,M_.exo_names,varlist,options_.initial_date) +graph_decomp(z,M_.exo_names,i_var,options_.initial_date) diff --git a/matlab/varlist_indices.m b/matlab/varlist_indices.m index 480fb20c2..40c83755e 100644 --- a/matlab/varlist_indices.m +++ b/matlab/varlist_indices.m @@ -1,9 +1,10 @@ -function [i_var,nvar] = varlist_indices(varlist) -% function [i_var,nvar] = varlist_indices(varlist) +function [i_var,nvar] = varlist_indices(sublist,list) +% function [i_var,nvar] = varlist_indices(sublist,list) % returns the indices of a list of endogenous variables % % INPUT -% varlist: (character area) list of variables +% sublist: sublist of variables +% list: list of variables % % OUTPUT % i_var: variable indices in M_.endo_names @@ -12,7 +13,7 @@ function [i_var,nvar] = varlist_indices(varlist) % SPECIAL REQUIREMENTS % none -% Copyright (C) 2009 Dynare Team +% Copyright (C) 2010 Dynare Team % % This file is part of Dynare. % @@ -29,19 +30,13 @@ function [i_var,nvar] = varlist_indices(varlist) % You should have received a copy of the GNU General Public License % along with Dynare. If not, see . -global M_ -endo_nbr = M_.endo_nbr; +[check,i_var] = ismember(sublist,list,'rows'); -if isempty(varlist) - 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'); - if isempty(tmp) - error([tmp ' isn''t an endogenous variable']) - end - i_var = [i_var; tmp]; -end nvar = length(i_var); + +if ~all(check) + k =find(check); + error(strcat(sublist(k,:),' hasn''t been declared')) +end +