Home > matlab > set_state_space.m

set_state_space

PURPOSE ^

function dr = set_state_space(dr,M_)

SYNOPSIS ^

function dr=set_state_space(dr,M_)

DESCRIPTION ^

 function dr = set_state_space(dr,M_)
 finds the state vector for structural state space representation
 sets many fields of dr 

 INPUTS
   dr: structure of decision rules for stochastic simulations
  
 OUTPUTS
   dr: structure of decision rules for stochastic simulations
  
 ALGORITHM
   ...
 SPECIAL REQUIREMENTS
   none

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function dr=set_state_space(dr,M_)
0002 % function dr = set_state_space(dr,M_)
0003 % finds the state vector for structural state space representation
0004 % sets many fields of dr
0005 %
0006 % INPUTS
0007 %   dr: structure of decision rules for stochastic simulations
0008 %
0009 % OUTPUTS
0010 %   dr: structure of decision rules for stochastic simulations
0011 %
0012 % ALGORITHM
0013 %   ...
0014 % SPECIAL REQUIREMENTS
0015 %   none
0016 %
0017 
0018 % Copyright (C) 1996-2010 Dynare Team
0019 %
0020 % This file is part of Dynare.
0021 %
0022 % Dynare is free software: you can redistribute it and/or modify
0023 % it under the terms of the GNU General Public License as published by
0024 % the Free Software Foundation, either version 3 of the License, or
0025 % (at your option) any later version.
0026 %
0027 % Dynare is distributed in the hope that it will be useful,
0028 % but WITHOUT ANY WARRANTY; without even the implied warranty of
0029 % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0030 % GNU General Public License for more details.
0031 %
0032 % You should have received a copy of the GNU General Public License
0033 % along with Dynare.  If not, see <http://www.gnu.org/licenses/>.
0034 global options_
0035 
0036 max_lead = M_.maximum_endo_lead;
0037 max_lag = M_.maximum_endo_lag;
0038 endo_nbr = M_.endo_nbr;
0039 lead_lag_incidence = M_.lead_lag_incidence;
0040 klen = max_lag + max_lead + 1;
0041 
0042 fwrd_var = find(lead_lag_incidence(max_lag+2:end,:))';
0043 if max_lag > 0
0044     pred_var = find(lead_lag_incidence(1,:))';
0045     both_var = intersect(pred_var,fwrd_var);
0046     pred_var = setdiff(pred_var,both_var);
0047     fwrd_var = setdiff(fwrd_var,both_var);
0048     stat_var = setdiff([1:endo_nbr]',union(union(pred_var,both_var),fwrd_var));  % static variables
0049 else
0050     pred_var = [];
0051     both_var = [];
0052     stat_var = setdiff([1:endo_nbr]',fwrd_var);
0053 end
0054 nboth = length(both_var);
0055 npred = length(pred_var);
0056 nfwrd = length(fwrd_var);
0057 nstatic = length(stat_var);
0058 if options_.block == 1
0059     order_var = M_.block_structure.variable_reordered;
0060 else
0061     order_var = [ stat_var(:); pred_var(:); both_var(:); fwrd_var(:)];
0062 end;
0063 inv_order_var(order_var) = (1:endo_nbr);
0064 
0065 % building kmask for z state vector in t+1
0066 if max_lag > 0
0067     kmask = [];
0068     if max_lead > 0 
0069         kmask = lead_lag_incidence(max_lag+2,order_var) ;
0070     end
0071     kmask = [kmask; lead_lag_incidence(1,order_var)] ;
0072 else
0073     kmask = lead_lag_incidence(max_lag+2,order_var) ;
0074 end
0075 
0076 kmask = kmask';
0077 kmask = kmask(:);
0078 i_kmask = find(kmask);
0079 nd = nnz(kmask);           % size of the state vector
0080 kmask(i_kmask) = (1:nd);
0081 % auxiliary equations
0082 
0083 % elements that are both in z(t+1) and z(t)
0084 k1 = find([kmask(1:end-M_.endo_nbr) & kmask(M_.endo_nbr+1:end)] );
0085 kad = [];
0086 kae = [];
0087 if ~isempty(k1)
0088     kad = kmask(k1+M_.endo_nbr);
0089     kae = kmask(k1);
0090 end
0091 
0092 % composition of state vector
0093 % col 1: variable;           col 2: lead/lag in z(t+1);
0094 % col 3: A cols for t+1 (D); col 4: A cols for t (E)
0095 kstate = [ repmat([1:endo_nbr]',klen-1,1) kron([klen:-1:2]',ones(endo_nbr,1)) ...
0096            zeros((klen-1)*endo_nbr,2)];
0097 kiy = flipud(lead_lag_incidence(:,order_var))';
0098 kiy = kiy(:);
0099 if max_lead > 0
0100     kstate(1:endo_nbr,3) = kiy(1:endo_nbr)-nnz(lead_lag_incidence(max_lag+1,:));  
0101     kstate(kstate(:,3) < 0,3) = 0;
0102     kstate(endo_nbr+1:end,4) = kiy(2*endo_nbr+1:end);  
0103 else
0104     kstate(:,4) = kiy(endo_nbr+1:end);  
0105 end
0106 kstate = kstate(i_kmask,:);
0107    
0108 dr.order_var = order_var;
0109 dr.inv_order_var = inv_order_var';
0110 dr.nstatic = nstatic;
0111 dr.npred = npred+nboth;
0112 dr.kstate = kstate;
0113 dr.kad = kad;
0114 dr.kae = kae;
0115 dr.nboth = nboth;
0116 dr.nfwrd = nfwrd;
0117 % number of forward variables in the state vector
0118 dr.nsfwrd = nfwrd+nboth;
0119 % number of predetermined variables in the state vector
0120 dr.nspred = npred+nboth;
0121 
0122 dr.transition_auxiliary_variables = [];

Generated on Tue 22-May-2012 02:40:23 by m2html © 2005