diff --git a/matlab/discretionary_policy_1.m b/matlab/discretionary_policy_1.m index 4497bd0b352d2095718b8b268812d16d18d31468..236e6ec0ca4aa32f968a3c1f8daab83c4372c5e3 100644 --- a/matlab/discretionary_policy_1.m +++ b/matlab/discretionary_policy_1.m @@ -1,6 +1,6 @@ function [dr,ys,info]=discretionary_policy_1(oo_,Instruments) -% Copyright (C) 2007-2012 Dynare Team +% Copyright (C) 2007-2015 Dynare Team % % This file is part of Dynare. % @@ -88,6 +88,7 @@ end eq_nbr= size(jacobia_,1); instr_nbr=endo_nbr-eq_nbr; + instr_id=nan(instr_nbr,1); for j=1:instr_nbr vj=deblank(Instruments(j,:)); @@ -126,24 +127,49 @@ if info dr=[]; return else - Hold=H; + Hold=H; %save previous solution % Hold=[]; use this line if persistent command is not used. end % update the following elements LLI=lead_lag_incidence; -LLI(MaxLag,:)=any(H); +LLI(MaxLag,:)=any(H); %check if variable drops out in solution LLI=LLI'; tmp=find(LLI); -LLI(tmp)=1:numel(tmp); - -M_.lead_lag_incidence = LLI'; +LLI(tmp)=1:numel(tmp); %renumber + +M_.lead_lag_incidence = LLI'; %update lead_lag_incidence + +%update info in M_ +max_lag = M_.maximum_endo_lag; +endo_nbr = M_.endo_nbr; +lead_lag_incidence = M_.lead_lag_incidence; + +fwrd_var = find(lead_lag_incidence(max_lag+2:end,:))'; +if max_lag > 0 + pred_var = find(lead_lag_incidence(1,:))'; + both_var = intersect(pred_var,fwrd_var); + pred_var = setdiff(pred_var,both_var); + fwrd_var = setdiff(fwrd_var,both_var); + stat_var = setdiff([1:endo_nbr]',union(union(pred_var,both_var),fwrd_var)); % static variables +else + pred_var = []; + both_var = []; + stat_var = setdiff([1:endo_nbr]',fwrd_var); +end +M_.nstatic=length(stat_var); +M_.nfwrd=length(fwrd_var); +M_.npred=length(pred_var); +M_.nboth=length(both_var); +M_.nspred=M_.npred+M_.nboth; +M_.nsfwrd=M_.nfwrd+M_.nboth; +M_.ndynamic=M_.endo_nbr-M_.nstatic; % set the state dr=oo_.dr; dr.ys =zeros(endo_nbr,1); -dr=set_state_space(dr,M_,options_); +dr=set_state_space(dr,M_,options_); %relies on M_.lead_lag_incidence being updated order_var=dr.order_var; T=H(order_var,order_var);