Home > . > simult_.m

simult_

PURPOSE ^

Copyright (C) 2001 Michel Juillard

SYNOPSIS ^

function y_=simult_(y0,dr,ex_,iorder)

DESCRIPTION ^

 Copyright (C) 2001 Michel Juillard

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 % Copyright (C) 2001 Michel Juillard
0002 %
0003 
0004 function y_=simult_(y0,dr,ex_,iorder)
0005 global M_ options_ it_
0006   iter = size(ex_,1);
0007   nx = size(dr.ghu,2);
0008   y_ = zeros(size(y0,1),iter+M_.maximum_lag);
0009   y_(:,1:M_.maximum_lag) = y0;
0010   k1 = [M_.maximum_lag:-1:1];
0011   k2 = dr.kstate(find(dr.kstate(:,2) <= M_.maximum_lag+1),[1 2]);
0012   k2 = k2(:,1)+(M_.maximum_lag+1-k2(:,2))*M_.endo_nbr;
0013   k3 = M_.lead_lag_incidence(1:M_.maximum_lag,:)';
0014   k3 = find(k3(:));
0015   k4 = dr.kstate(find(dr.kstate(:,2) < M_.maximum_lag+1),[1 2]);
0016   k4 = k4(:,1)+(M_.maximum_lag+1-k4(:,2))*M_.endo_nbr;
0017   
0018   options_ = set_default_option(options_,'simul_algo',0);
0019   if options_.simul_algo == 1
0020     o1 = dr.nstatic+1;
0021     o2 = dr.nstatic+dr.npred;
0022     o3 = o2-dr.nboth+1;
0023     [junk, k5] = sort(dr.order_var(o1:o2));
0024     [junk, k6] = sort(dr.order_var(o3:end));
0025   end
0026 
0027   if iorder == 1    
0028     for i = M_.maximum_lag+1: iter+M_.maximum_lag
0029       tempx1 = y_(dr.order_var,k1);
0030       tempx2 = tempx1-repmat(dr.ys(dr.order_var),1,M_.maximum_lag);
0031       tempx = tempx2(k2);
0032       if options_.simul_algo == 0
0033     y_(dr.order_var,i) = dr.ys(dr.order_var)+dr.ghx*tempx+dr.ghu* ...
0034         ex_(i-M_.maximum_lag,:)';
0035       elseif options_.simul_algo == 1
0036     it_ = i;
0037     m = dr.ys(dr.order_var);
0038     [y_(:,i), check] = dynare_solve('ff_simul1',y_(:,i-1),tempx1(k3), ...
0039                     m(o3:end),tempx(k4),o1,o2,o3,k6);
0040       end
0041       k1 = k1+1;
0042     end
0043   elseif iorder == 2
0044     for i = M_.maximum_lag+1: iter+M_.maximum_lag
0045       tempx1 = y_(dr.order_var,k1);
0046       tempx2 = tempx1-repmat(dr.ys(dr.order_var),1,M_.maximum_lag);
0047       tempx = tempx2(k2);
0048       tempu = ex_(i-M_.maximum_lag,:)';
0049       tempuu = kron(tempu,tempu);
0050       if options_.simul_algo == 0
0051     tempxx = kron(tempx,tempx);
0052     tempxu = kron(tempx,tempu);
0053     y_(dr.order_var,i) = dr.ys(dr.order_var)+dr.ghs2/2+dr.ghx*tempx+ ...
0054         dr.ghu*tempu+0.5*(dr.ghxx*tempxx+dr.ghuu*tempuu)+dr.ghxu*tempxu;
0055       elseif options_.simul_algo == 1
0056     it_ = i;
0057     m = dr.ys(dr.order_var)+dr.ghs2/2;
0058     tempx1 = y_(:,k1);
0059     [y_(:,i), check] = dynare_solve('ff_simul2',y_(:,i-1),tempx1(k3), ...
0060                     m(o3:end),tempx(k4),o1,o2,o3,k6);
0061       end
0062       k1 = k1+1;
0063     end
0064   end
0065 
0066 % MJ 08/30/02 corrected bug at order 2

Generated on Fri 16-Jun-2006 09:09:06 by m2html © 2003