0001 function dr=set_state_space(dr,M_)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
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));
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
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);
0080 kmask(i_kmask) = (1:nd);
0081
0082
0083
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
0093
0094
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
0118 dr.nsfwrd = nfwrd+nboth;
0119
0120 dr.nspred = npred+nboth;
0121
0122 dr.transition_auxiliary_variables = [];