0001 function [yf,var_yf]=forcst(dr,y0,k,m) 0002 global M_ oo_ options_ 0003 0004 options_.periods = k; 0005 make_ex_; 0006 yf = simult_(y0,dr,oo_.exo_simul(1:k,:),1); 0007 0008 nstatic = dr.nstatic; 0009 npred = dr.npred; 0010 j = find(kstate(dr.kae,2) <= ykmin_+1); 0011 kae = dr.kae(j); 0012 nh = size(dr.ghx,2); 0013 hx = dr.ghx(nstatic+1:nstatic+npred,:); 0014 hu = dr.ghu(nstatic+1:nstatic+npred,:); 0015 if ~isempty(kae) 0016 n = length(kae); 0017 tmp = sparse([1:n]',kae-sum(dr.kstate(:,2)>M_.maximum_lag+1),ones(n,1),n,nh); 0018 hx = [hx; tmp]; 0019 hu = [hu; zeros(n,M_.exo_nbr)]; 0020 end 0021 gx = []; 0022 k2 = []; 0023 if nstatic > 0 0024 gx = dr.ghx(1:nstatic,:); 0025 k2 = [1:nstatic]'; 0026 end 0027 if size(dr.ghx,1) > nstatic+npred 0028 gx = [gx; dr.ghx(nstatic+npred+1:end,:)]; 0029 k2 = [k2; [nstatic+npred+1:size(dr.ghx,1)]']; 0030 end 0031 0032 k1 = dr.order_var([nstatic+1:nstatic+npred]); 0033 k2 = dr.order_var(k2); 0034 0035 sigma_u = hu*M_.Sigma_e*hu'; 0036 sigma_y1 = 0; 0037 var_yf = zeros(k,M_.endo_nbr); 0038 0039 0040 if isempty(k2) 0041 for i=1:k 0042 sigma_y1 = sigma_y1+sigma_u; 0043 var_yf(i,k1) = diag(sigma_y1(1:npred,1:npred))'; 0044 if i == k 0045 break 0046 end 0047 sigma_u = hx*sigma_u*hx'; 0048 end 0049 else 0050 for i=1:k 0051 sigma_y1 = sigma_y1+sigma_u; 0052 var_yf(i,k1) = diag(sigma_y1(1:npred,1:npred))'; 0053 sigma_y2 = gx*sigma_y1*gx'; 0054 var_yf(i,k2) = diag(sigma_y2)'; 0055 if i == k 0056 break 0057 end 0058 sigma_u = hx*sigma_u*hx'; 0059 end 0060 end 0061 0062 0063 0064 0065 0066 0067 0068 0069 0070 0071 0072 0073