% Solving the full-information model
clear all;clc;
dynare Test_statespace
% Y(t) = PHI*S(t-1) + OMEGA*e(t); e(t) = [ea  ee egsh ern ega] 5 shocks
phi = oo_.dr.ghx;
omega = oo_.dr.ghu;
% Writing the system as:
% S(t) = A*S(t-1) + B*e(t);    States: k rn p a ga E5Y gsh c y (9)
% x(t) = C*S(t-1) + D*e(t);    Controls: lam n w r mc q i pi g (9)
% Shocks: ea ee egsh ern ega
% Dynare order of declaration: lam c n w r mc k q i rn pi y g p a ga E5Y gsh
p_lam=1; p_c=2; p_n=3; p_w=4; p_r=5; p_mc=6; p_k=7; p_q=8;
p_i=9; p_rn=10; p_pi=11; p_y=12; p_g=13; p_p=14; p_a=15; p_ga=16;
p_E5Y=17; p_gsh=18;
A = [phi(oo_.dr.inv_order_var(p_k),:);   phi(oo_.dr.inv_order_var(p_rn),:);
     phi(oo_.dr.inv_order_var(p_p),:);   phi(oo_.dr.inv_order_var(p_a),:);
     phi(oo_.dr.inv_order_var(p_ga),:);  phi(oo_.dr.inv_order_var(p_E5Y),:);
     phi(oo_.dr.inv_order_var(p_gsh),:); phi(oo_.dr.inv_order_var(p_c),:);
     phi(oo_.dr.inv_order_var(p_y),:)];
B = [omega(oo_.dr.inv_order_var(p_k),:);   omega(oo_.dr.inv_order_var(p_rn),:);
     omega(oo_.dr.inv_order_var(p_p),:);   omega(oo_.dr.inv_order_var(p_a),:);
     omega(oo_.dr.inv_order_var(p_ga),:);  omega(oo_.dr.inv_order_var(p_E5Y),:);
     omega(oo_.dr.inv_order_var(p_gsh),:); omega(oo_.dr.inv_order_var(p_c),:);
     omega(oo_.dr.inv_order_var(p_y),:)];
C = [phi(oo_.dr.inv_order_var(p_lam),:);  phi(oo_.dr.inv_order_var(p_n),:);
     phi(oo_.dr.inv_order_var(p_w),:);    phi(oo_.dr.inv_order_var(p_r),:);
     phi(oo_.dr.inv_order_var(p_mc),:);   phi(oo_.dr.inv_order_var(p_q),:);
     phi(oo_.dr.inv_order_var(p_i),:);    phi(oo_.dr.inv_order_var(p_pi),:);
     phi(oo_.dr.inv_order_var(p_g),:)];    
D = [omega(oo_.dr.inv_order_var(p_lam),:); omega(oo_.dr.inv_order_var(p_n),:);
     omega(oo_.dr.inv_order_var(p_w),:);   omega(oo_.dr.inv_order_var(p_r),:);
     omega(oo_.dr.inv_order_var(p_mc),:);  omega(oo_.dr.inv_order_var(p_q),:);
     omega(oo_.dr.inv_order_var(p_i),:);   omega(oo_.dr.inv_order_var(p_pi),:);
     omega(oo_.dr.inv_order_var(p_g),:)];
% Finally, since C = FA, F = C*A^(-1):
% S(t) = A*S(t-1) + B*e(t);
% x(t) = F*S(t)
F = C*inv(A);
F = C/A;