698 lines
36 KiB
HTML
698 lines
36 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
|
"http://www.w3.org/TR/REC-html40/loose.dtd">
|
|
<html>
|
|
<head>
|
|
<title>Description of dr1</title>
|
|
<meta name="keywords" content="dr1">
|
|
<meta name="description" content="Copyright (C) 2001 Michel Juillard">
|
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
|
<meta name="generator" content="m2html © 2003 Guillaume Flandin">
|
|
<meta name="robots" content="index, follow">
|
|
<link type="text/css" rel="stylesheet" href="../m2html.css">
|
|
</head>
|
|
<body>
|
|
<a name="_top"></a>
|
|
<div><a href="../index.html">Home</a> > <a href="index.html">.</a> > dr1.m</div>
|
|
|
|
<!--<table width="100%"><tr><td align="left"><a href="../index.html"><img alt="<" border="0" src="../left.png"> Master index</a></td>
|
|
<td align="right"><a href="index.html">Index for . <img alt=">" border="0" src="../right.png"></a></td></tr></table>-->
|
|
|
|
<h1>dr1
|
|
</h1>
|
|
|
|
<h2><a name="_name"></a>PURPOSE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
|
|
<div class="box"><strong>Copyright (C) 2001 Michel Juillard</strong></div>
|
|
|
|
<h2><a name="_synopsis"></a>SYNOPSIS <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
|
|
<div class="box"><strong>function [dr,info]=dr1(dr,task) </strong></div>
|
|
|
|
<h2><a name="_description"></a>DESCRIPTION <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
|
|
<div class="fragment"><pre class="comment"> Copyright (C) 2001 Michel Juillard</pre></div>
|
|
|
|
<!-- crossreference -->
|
|
<h2><a name="_cross"></a>CROSS-REFERENCE INFORMATION <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
|
|
This function calls:
|
|
<ul style="list-style-image:url(../matlabicon.gif)">
|
|
<li><a href="hessian.html" class="code" title="function hessian_mat = hessian(func,x,varargin)">hessian</a> Copyright (C) 2001 Michel Juillard</li><li><a href="qzdiv.html" class="code" title="function [A,B,Q,Z] = qzdiv(stake,A,B,Q,Z)">qzdiv</a> from Chris Sims web site</li><li><a href="resid.html" class="code" title="function resid(period)">resid</a> Copyright (C) 2001 Michel Juillard</li><li><a href="set_default_option.html" class="code" title="function options=set_default_option(options,field,default)">set_default_option</a> </li><li><a href="set_state_space.html" class="code" title="function dr=set_state_space(dr)">set_state_space</a> Copyright (C) 2001 Michel Juillard</li><li><a href="sylvester3.html" class="code" title="function x=sylvester3(a,b,c,d)">sylvester3</a> solves a*x+b*x*c=d</li><li><a href="sylvester3a.html" class="code" title="function x=sylvester3a(x0,a,b,c,d)">sylvester3a</a> solves iteratively ax+bxc=d</li><li><a href="transition_matrix.html" class="code" title="function [A,B] = transition_matrix(dr)">transition_matrix</a> makes transition matrices out of ghx and ghu</li></ul>
|
|
This function is called by:
|
|
<ul style="list-style-image:url(../matlabicon.gif)">
|
|
<li><a href="dr2.html" class="code" title="function ghs2=dr2(ys,dr)">dr2</a> Copyright (C) 2001 Michel Juillard</li><li><a href="resol.html" class="code" title="function [dr,info]=resol(ys,check_flag)">resol</a> Copyright (C) 2001 Michel Juillard</li></ul>
|
|
<!-- crossreference -->
|
|
|
|
|
|
<h2><a name="_source"></a>SOURCE CODE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
|
|
<div class="fragment"><pre>0001 <span class="comment">% Copyright (C) 2001 Michel Juillard</span>
|
|
0002 <span class="comment">%</span>
|
|
0003 <a name="_sub0" href="#_subfunctions" class="code">function [dr,info]=dr1(dr,task)</a>
|
|
0004 <span class="keyword">global</span> M_ options_ oo_
|
|
0005
|
|
0006 <span class="keyword">global</span> olr_state
|
|
0007 <span class="comment">% info = 1: the model doesn't define current variables uniquely</span>
|
|
0008 <span class="comment">% info = 2: problem in mjdgges.dll info(2) contains error code</span>
|
|
0009 <span class="comment">% info = 3: BK order condition not satisfied info(2) contains "distance"</span>
|
|
0010 <span class="comment">% absence of stable trajectory</span>
|
|
0011 <span class="comment">% info = 4: BK order condition not satisfied info(2) contains "distance"</span>
|
|
0012 <span class="comment">% indeterminacy</span>
|
|
0013 <span class="comment">% info = 5: BK rank condition not satisfied</span>
|
|
0014
|
|
0015
|
|
0016
|
|
0017 info = 0;
|
|
0018
|
|
0019 options_ = <a href="set_default_option.html" class="code" title="function options=set_default_option(options,field,default)">set_default_option</a>(options_,<span class="string">'loglinear'</span>,0);
|
|
0020 options_ = <a href="set_default_option.html" class="code" title="function options=set_default_option(options,field,default)">set_default_option</a>(options_,<span class="string">'noprint'</span>,0);
|
|
0021 options_ = <a href="set_default_option.html" class="code" title="function options=set_default_option(options,field,default)">set_default_option</a>(options_,<span class="string">'olr'</span>,0);
|
|
0022 options_ = <a href="set_default_option.html" class="code" title="function options=set_default_option(options,field,default)">set_default_option</a>(options_,<span class="string">'olr_beta'</span>,1);
|
|
0023 options_ = <a href="set_default_option.html" class="code" title="function options=set_default_option(options,field,default)">set_default_option</a>(options_,<span class="string">'qz_criterium'</span>,1.000001);
|
|
0024
|
|
0025 xlen = M_.maximum_lead + M_.maximum_lag + 1;
|
|
0026 klen = M_.maximum_lag + M_.maximum_lead + 1;
|
|
0027 iyv = M_.lead_lag_incidence';
|
|
0028 iyv = iyv(:);
|
|
0029 iyr0 = find(iyv) ;
|
|
0030 it_ = M_.maximum_lag + 1 ;
|
|
0031
|
|
0032 <span class="keyword">if</span> M_.exo_nbr == 0
|
|
0033 oo_.exo_steady_state = [] ;
|
|
0034 <span class="keyword">end</span>
|
|
0035
|
|
0036 tempex = oo_.exo_simul;
|
|
0037
|
|
0038 it_ = M_.maximum_lag + 1;
|
|
0039 <span class="keyword">if</span> options_.olr
|
|
0040 z = repmat(zeros(M_.endo_nbr,1),1,klen);
|
|
0041 <span class="keyword">else</span>
|
|
0042 z = repmat(dr.ys,1,klen);
|
|
0043 <span class="keyword">end</span>
|
|
0044 z = z(iyr0) ;
|
|
0045 <span class="keyword">if</span> options_.order == 1
|
|
0046 [junk,jacobia_] = feval([M_.fname <span class="string">'_dynamic'</span>],z,tempex);
|
|
0047 <span class="keyword">elseif</span> options_.order == 2
|
|
0048 [junk,jacobia_,<a href="hessian.html" class="code" title="function hessian_mat = hessian(func,x,varargin)">hessian</a>] = feval([M_.fname <span class="string">'_dynamic'</span>],z,<span class="keyword">...</span>
|
|
0049 [oo_.exo_simul <span class="keyword">...</span>
|
|
0050 oo_.exo_det_simul]);
|
|
0051 <span class="keyword">end</span>
|
|
0052
|
|
0053 oo_.exo_simul = tempex ;
|
|
0054 tempex = [];
|
|
0055
|
|
0056 <span class="comment">% expanding system for Optimal Linear Regulator</span>
|
|
0057 <span class="keyword">if</span> options_.olr
|
|
0058 bet = options_.olr_beta;
|
|
0059 jacobia1 = [];
|
|
0060 n_inst = size(options_.olr_inst,1);
|
|
0061
|
|
0062 <span class="keyword">if</span> ~isfield(olr_state_,<span class="string">'done'</span>)
|
|
0063 olr_state_.done = 1;
|
|
0064 olr_state_.old_M_.maximum_lag = M_.maximum_lag;
|
|
0065 olr_state_.old_M_.maximum_lead = M_.maximum_lead;
|
|
0066 olr_state_.old_M_.endo_nbr = M_.endo_nbr;
|
|
0067 olr_state_.old_M_.lead_lag_incidence = M_.lead_lag_incidence;
|
|
0068
|
|
0069 <span class="keyword">for</span> i=1:M_.endo_nbr
|
|
0070 temp = [<span class="string">'mult_'</span> int2str(i)];
|
|
0071 lgoo_.endo_simul = strvcat(lgoo_.endo_simul,temp);
|
|
0072 <span class="keyword">end</span>
|
|
0073 M_.endo_nbr = 2*M_.endo_nbr-n_inst;
|
|
0074 M_.maximum_lag = max(M_.maximum_lag,M_.maximum_lead);
|
|
0075 M_.maximum_lead = M_.maximum_lag;
|
|
0076 <span class="keyword">end</span>
|
|
0077 nj = olr_state_.old_M_.endo_nbr-n_inst;
|
|
0078 offset_min = M_.maximum_lag - olr_state_.old_M_.maximum_lag;
|
|
0079 offset_max = M_.maximum_lead - olr_state_.old_M_.maximum_lead;
|
|
0080 newiy = zeros(2*M_.maximum_lag+1,nj+olr_state_.old_M_.endo_nbr);
|
|
0081 jacobia_ = jacobia_(1:nj,:);
|
|
0082 <span class="keyword">for</span> i=1:2*M_.maximum_lag+1
|
|
0083 <span class="keyword">if</span> i > offset_min & i <= 2*M_.maximum_lag+1-offset_max
|
|
0084 [junk,k1,k2] = find(olr_state_.old_M_.lead_lag_incidence(i-offset_min,:));
|
|
0085 <span class="keyword">if</span> i == M_.maximum_lag+1
|
|
0086 jacobia1 = [jacobia1 [jacobia_(:,k2); 2*options_.olr_w]];
|
|
0087 <span class="keyword">else</span>
|
|
0088 jacobia1 = [jacobia1 [jacobia_(:,k2); <span class="keyword">...</span>
|
|
0089 zeros(olr_state_.old_M_.endo_nbr,length(k1))]];
|
|
0090 <span class="keyword">end</span>
|
|
0091 newiy(i,k1) = ones(1,length(k1));
|
|
0092 <span class="keyword">end</span>
|
|
0093 i1 = 2*M_.maximum_lag+2-i;
|
|
0094 <span class="keyword">if</span> i1 <= 2*M_.maximum_lag+1-offset_max & i1 > offset_min
|
|
0095 [junk,k1,k2] = find(olr_state_.old_M_.lead_lag_incidence(i1-offset_min,:));
|
|
0096 k3 = find(any(jacobia_(:,k2),2));
|
|
0097 x = zeros(olr_state_.old_M_.endo_nbr,length(k3));
|
|
0098 x(k1,:) = bet^(-i1+M_.maximum_lag+1)*jacobia_(k3,k2)';
|
|
0099 jacobia1 = [jacobia1 [zeros(nj,length(k3)); x]];
|
|
0100 newiy(i,k3+olr_state_.old_M_.endo_nbr) = ones(1,length(k3));
|
|
0101 <span class="keyword">end</span>
|
|
0102 <span class="keyword">end</span>
|
|
0103 jacobia1 = [jacobia1 [jacobia_(:,end-M_.exo_nbr+1:end); <span class="keyword">...</span>
|
|
0104 zeros(olr_state_.old_M_.endo_nbr, M_.exo_nbr)]];
|
|
0105 newiy = newiy';
|
|
0106 newiy = find(newiy(:));
|
|
0107 M_.lead_lag_incidence = zeros(M_.endo_nbr*(M_.maximum_lag+M_.maximum_lead+1),1);
|
|
0108 M_.lead_lag_incidence(newiy) = [1:length(newiy)]';
|
|
0109 M_.lead_lag_incidence =reshape(M_.lead_lag_incidence,M_.endo_nbr,M_.maximum_lag+M_.maximum_lead+1)';
|
|
0110 jacobia_ = jacobia1;
|
|
0111 clear jacobia1
|
|
0112 <span class="comment">% computes steady state</span>
|
|
0113 <a href="resid.html" class="code" title="function resid(period)">resid</a> = feval([M_.fname <span class="string">'_steady'</span>],zeros(olr_state_.old_M_.endo_nbr,1));
|
|
0114 <span class="keyword">if</span> <a href="resid.html" class="code" title="function resid(period)">resid</a>'*<a href="resid.html" class="code" title="function resid(period)">resid</a> < 1e-12
|
|
0115 dr.ys =[dr.ys; zeros(nj,1)];
|
|
0116 <span class="keyword">else</span>
|
|
0117 AA = zeros(M_.endo_nbr,M_.endo_nbr);
|
|
0118 <span class="keyword">for</span> i=1:M_.maximum_lag+M_.maximum_lead+1
|
|
0119 [junk,k1,k2] = find(M_.lead_lag_incidence(i,:));
|
|
0120 AA(:,k1) = AA(:,k1)+jacobia_(:,k2);
|
|
0121 <span class="keyword">end</span>
|
|
0122 dr.ys = -AA\[<a href="resid.html" class="code" title="function resid(period)">resid</a>; zeros(nj,1)];
|
|
0123 <span class="keyword">end</span>
|
|
0124 <span class="keyword">end</span>
|
|
0125 <span class="comment">% end of code section for Optimal Linear Regulator</span>
|
|
0126
|
|
0127 klen = M_.maximum_lag + M_.maximum_lead + 1;
|
|
0128 dr=<a href="set_state_space.html" class="code" title="function dr=set_state_space(dr)">set_state_space</a>(dr);
|
|
0129 kstate = dr.kstate;
|
|
0130 kad = dr.kad;
|
|
0131 kae = dr.kae;
|
|
0132 nstatic = dr.nstatic;
|
|
0133 nfwrd = dr.nfwrd;
|
|
0134 npred = dr.npred;
|
|
0135 nboth = dr.nboth;
|
|
0136 order_var = dr.order_var;
|
|
0137 nd = size(kstate,1);
|
|
0138 nz = nnz(M_.lead_lag_incidence);
|
|
0139
|
|
0140 sdyn = M_.endo_nbr - nstatic;
|
|
0141
|
|
0142 k0 = M_.lead_lag_incidence(M_.maximum_lag+1,order_var);
|
|
0143 k1 = M_.lead_lag_incidence(find([1:klen] ~= M_.maximum_lag+1),:);
|
|
0144 b = jacobia_(:,k0);
|
|
0145
|
|
0146 <span class="keyword">if</span> M_.maximum_lead == 0; <span class="comment">% backward models</span>
|
|
0147 a = jacobia_(:,nonzeros(k1'));
|
|
0148 dr.ghx = zeros(size(a));
|
|
0149 m = 0;
|
|
0150 <span class="keyword">for</span> i=M_.maximum_lag:-1:1
|
|
0151 k = nonzeros(M_.lead_lag_incidence(i,order_var));
|
|
0152 dr.ghx(:,m+[1:length(k)]) = -b\a(:,k);
|
|
0153 m = m+length(k);
|
|
0154 <span class="keyword">end</span>
|
|
0155 <span class="keyword">if</span> M_.exo_nbr
|
|
0156 dr.ghu = -b\jacobia_(:,nz+1:end);
|
|
0157 <span class="keyword">end</span>
|
|
0158 dr.eigval = eig(<a href="transition_matrix.html" class="code" title="function [A,B] = transition_matrix(dr)">transition_matrix</a>(dr));
|
|
0159 dr.rank = 0;
|
|
0160 <span class="keyword">if</span> any(abs(dr.eigval) > options_.qz_criterium)
|
|
0161 temp = sort(abs(dr.eigval));
|
|
0162 nba = nnz(abs(dr.eigval) > options_.qz_criterium);
|
|
0163 temp = temp(nd-nba+1:nd)-1-options_.qz_criterium;
|
|
0164 info(1) = 3;
|
|
0165 info(2) = temp'*temp;
|
|
0166 <span class="keyword">end</span>
|
|
0167 <span class="keyword">return</span>;
|
|
0168 <span class="keyword">end</span>
|
|
0169
|
|
0170 <span class="comment">%forward--looking models</span>
|
|
0171 <span class="keyword">if</span> nstatic > 0
|
|
0172 [Q,R] = qr(b(:,1:nstatic));
|
|
0173 aa = Q'*jacobia_;
|
|
0174 <span class="keyword">else</span>
|
|
0175 aa = jacobia_;
|
|
0176 <span class="keyword">end</span>
|
|
0177 a = aa(:,nonzeros(k1'));
|
|
0178 b = aa(:,k0);
|
|
0179 b10 = b(1:nstatic,1:nstatic);
|
|
0180 b11 = b(1:nstatic,nstatic+1:end);
|
|
0181 b2 = b(nstatic+1:<span class="keyword">end</span>,nstatic+1:end);
|
|
0182 <span class="keyword">if</span> any(isinf(a(:)))
|
|
0183 info = 1;
|
|
0184 <span class="keyword">return</span>
|
|
0185 <span class="keyword">end</span>
|
|
0186 <span class="keyword">if</span> M_.exo_nbr
|
|
0187 fu = aa(:,nz+(1:M_.exo_nbr));
|
|
0188 <span class="keyword">end</span>
|
|
0189 clear aa;
|
|
0190
|
|
0191 <span class="comment">% buildind D and E</span>
|
|
0192 d = zeros(nd,nd) ;
|
|
0193 e = d ;
|
|
0194
|
|
0195 k = find(kstate(:,2) >= M_.maximum_lag+2 & kstate(:,3));
|
|
0196 d(1:sdyn,k) = a(nstatic+1:<span class="keyword">end</span>,kstate(k,3)) ;
|
|
0197 k1 = find(kstate(:,2) == M_.maximum_lag+2);
|
|
0198 e(1:sdyn,k1) = -b2(:,kstate(k1,1)-nstatic);
|
|
0199 k = find(kstate(:,2) <= M_.maximum_lag+1 & kstate(:,4));
|
|
0200 e(1:sdyn,k) = -a(nstatic+1:<span class="keyword">end</span>,kstate(k,4)) ;
|
|
0201 k2 = find(kstate(:,2) == M_.maximum_lag+1);
|
|
0202 k2 = k2(~ismember(kstate(k2,1),kstate(k1,1)));
|
|
0203 d(1:sdyn,k2) = b2(:,kstate(k2,1)-nstatic);
|
|
0204
|
|
0205 <span class="keyword">if</span> ~isempty(kad)
|
|
0206 <span class="keyword">for</span> j = 1:size(kad,1)
|
|
0207 d(sdyn+j,kad(j)) = 1 ;
|
|
0208 e(sdyn+j,kae(j)) = 1 ;
|
|
0209 <span class="keyword">end</span>
|
|
0210 <span class="keyword">end</span>
|
|
0211
|
|
0212 <span class="keyword">if</span> ~exist(<span class="string">'mjdgges'</span>)
|
|
0213 <span class="comment">% using Chris Sim's routines</span>
|
|
0214 use_qzdiv = 1;
|
|
0215 [ss,tt,qq,w] = qz(e,d);
|
|
0216 [tt,ss,qq,w] = <a href="qzdiv.html" class="code" title="function [A,B,Q,Z] = qzdiv(stake,A,B,Q,Z)">qzdiv</a>(options_.qz_criterium,tt,ss,qq,w);
|
|
0217 ss1=diag(ss);
|
|
0218 tt1=diag(tt);
|
|
0219 warning_state = warning;
|
|
0220 warning off;
|
|
0221 dr.eigval = ss1./tt1 ;
|
|
0222 warning warning_state;
|
|
0223 nba = nnz(abs(dr.eigval) > options_.qz_criterium);
|
|
0224 <span class="keyword">else</span>
|
|
0225 use_qzdiv = 0;
|
|
0226 [ss,tt,w,sdim,dr.eigval,info1] = mjdgges(e,d,options_.qz_criterium);
|
|
0227 <span class="keyword">if</span> info1
|
|
0228 info(1) = 2;
|
|
0229 info(2) = info1;
|
|
0230 <span class="keyword">return</span>
|
|
0231 <span class="keyword">end</span>
|
|
0232 nba = nd-sdim;
|
|
0233 <span class="keyword">end</span>
|
|
0234
|
|
0235 nyf = sum(kstate(:,2) > M_.maximum_lag+1);
|
|
0236
|
|
0237 <span class="keyword">if</span> task == 1
|
|
0238 dr.rank = rank(w(1:nyf,nd-nyf+1:end));
|
|
0239 dr.eigval = eig(e,d);
|
|
0240 <span class="keyword">return</span>
|
|
0241 <span class="keyword">end</span>
|
|
0242
|
|
0243 <span class="keyword">if</span> nba ~= nyf
|
|
0244 temp = sort(abs(dr.eigval));
|
|
0245 <span class="keyword">if</span> nba > nyf
|
|
0246 temp = temp(nd-nba+1:nd-nyf)-1-options_.qz_criterium;
|
|
0247 info(1) = 3;
|
|
0248 <span class="keyword">elseif</span> nba < nyf;
|
|
0249 temp = temp(nd-nyf+1:nd-nba)-1-options_.qz_criterium;
|
|
0250 info(1) = 4;
|
|
0251 <span class="keyword">end</span>
|
|
0252 info(2) = temp'*temp;
|
|
0253 <span class="keyword">return</span>
|
|
0254 <span class="keyword">end</span>
|
|
0255
|
|
0256 np = nd - nyf;
|
|
0257 n2 = np + 1;
|
|
0258 n3 = nyf;
|
|
0259 n4 = n3 + 1;
|
|
0260 <span class="comment">% derivatives with respect to dynamic state variables</span>
|
|
0261 <span class="comment">% forward variables</span>
|
|
0262 w1 =w(1:n3,n2:nd);
|
|
0263 <span class="keyword">if</span> condest(w1) > 1e9;
|
|
0264 info(1) = 5;
|
|
0265 info(2) = condest(w1);
|
|
0266 <span class="keyword">return</span>;
|
|
0267 <span class="keyword">else</span>
|
|
0268 gx = -w1'\w(n4:nd,n2:nd)';
|
|
0269 <span class="keyword">end</span>
|
|
0270
|
|
0271 <span class="comment">% predetermined variables</span>
|
|
0272 hx = w(1:n3,1:np)'*gx+w(n4:nd,1:np)';
|
|
0273 hx = (tt(1:np,1:np)*hx)\(ss(1:np,1:np)*hx);
|
|
0274
|
|
0275 k1 = find(kstate(n4:nd,2) == M_.maximum_lag+1);
|
|
0276 k2 = find(kstate(1:n3,2) == M_.maximum_lag+2);
|
|
0277 dr.ghx = [hx(k1,:); gx(k2(nboth+1:end),:)];
|
|
0278
|
|
0279 <span class="comment">%lead variables actually present in the model</span>
|
|
0280 j3 = nonzeros(kstate(:,3));
|
|
0281 j4 = find(kstate(:,3));
|
|
0282 <span class="comment">% derivatives with respect to exogenous variables</span>
|
|
0283 <span class="keyword">if</span> M_.exo_nbr
|
|
0284 a1 = b;
|
|
0285 aa1 = [];
|
|
0286 <span class="keyword">if</span> nstatic > 0
|
|
0287 aa1 = a1(:,1:nstatic);
|
|
0288 <span class="keyword">end</span>
|
|
0289 dr.ghu = -[aa1 a(:,j3)*gx(j4,1:npred)+a1(:,nstatic+1:nstatic+ <span class="keyword">...</span>
|
|
0290 npred) a1(:,nstatic+npred+1:end)]\fu;
|
|
0291 <span class="keyword">end</span>
|
|
0292
|
|
0293 <span class="comment">% static variables</span>
|
|
0294 <span class="keyword">if</span> nstatic > 0
|
|
0295 temp = -a(1:nstatic,j3)*gx(j4,:)*hx;
|
|
0296 j5 = find(kstate(n4:nd,4));
|
|
0297 temp(:,j5) = temp(:,j5)-a(1:nstatic,nonzeros(kstate(:,4)));
|
|
0298 temp = b10\(temp-b11*dr.ghx);
|
|
0299 dr.ghx = [temp; dr.ghx];
|
|
0300 temp = [];
|
|
0301 <span class="keyword">end</span>
|
|
0302
|
|
0303 <span class="keyword">if</span> options_.loglinear == 1
|
|
0304 k = find(dr.kstate(:,2) <= M_.maximum_lag+1);
|
|
0305 klag = dr.kstate(k,[1 2]);
|
|
0306 k1 = dr.order_var;
|
|
0307
|
|
0308 dr.ghx = repmat(1./dr.ys(k1),1,size(dr.ghx,2)).*dr.ghx.* <span class="keyword">...</span>
|
|
0309 repmat(dr.ys(k1(klag(:,1)))',size(dr.ghx,1),1);
|
|
0310 dr.ghu = repmat(1./dr.ys(k1),1,size(dr.ghu,2)).*dr.ghu;
|
|
0311 <span class="keyword">end</span>
|
|
0312
|
|
0313 <span class="comment">%necessary when using Sims' routines</span>
|
|
0314 <span class="keyword">if</span> use_qzdiv
|
|
0315 gx = real(gx);
|
|
0316 hx = real(hx);
|
|
0317 dr.ghx = real(dr.ghx);
|
|
0318 dr.ghu = real(dr.ghu);
|
|
0319 <span class="keyword">end</span>
|
|
0320
|
|
0321 <span class="comment">%exogenous deterministic variables</span>
|
|
0322 <span class="keyword">if</span> M_.exo_det_nbr > 0
|
|
0323 f1 = sparse(jacobia_(:,nonzeros(M_.lead_lag_incidence(M_.maximum_lag+2:<span class="keyword">end</span>,order_var))));
|
|
0324 f0 = sparse(jacobia_(:,nonzeros(M_.lead_lag_incidence(M_.maximum_lag+1,order_var))));
|
|
0325 fudet = sparse(jacobia_(:,nz+M_.exo_nbr+1:end));
|
|
0326 M1 = inv(f0+[zeros(M_.endo_nbr,nstatic) f1*gx zeros(M_.endo_nbr,nyf-nboth)]);
|
|
0327 M2 = M1*f1;
|
|
0328 dr.ghud = cell(M_.exo_det_length,1);
|
|
0329 dr.ghud{1} = -M1*fudet;
|
|
0330 <span class="keyword">for</span> i = 2:M_.exo_det_length
|
|
0331 dr.ghud{i} = -M2*dr.ghud{i-1}(end-nyf+1:<span class="keyword">end</span>,:);
|
|
0332 <span class="keyword">end</span>
|
|
0333 <span class="keyword">end</span>
|
|
0334
|
|
0335 <span class="keyword">if</span> options_.order == 1
|
|
0336 <span class="keyword">return</span>
|
|
0337 <span class="keyword">end</span>
|
|
0338
|
|
0339 <span class="comment">% Second order</span>
|
|
0340 <span class="comment">%tempex = oo_.exo_simul ;</span>
|
|
0341
|
|
0342 <span class="comment">%hessian = real(hessext('ff1_',[z; oo_.exo_steady_state]))' ;</span>
|
|
0343 kk = flipud(cumsum(flipud(M_.lead_lag_incidence(M_.maximum_lag+1:<span class="keyword">end</span>,order_var)),1));
|
|
0344 <span class="keyword">if</span> M_.maximum_lag > 0
|
|
0345 kk = [cumsum(M_.lead_lag_incidence(1:M_.maximum_lag,order_var),1); kk];
|
|
0346 <span class="keyword">end</span>
|
|
0347 kk = kk';
|
|
0348 kk = find(kk(:));
|
|
0349 nk = size(kk,1) + M_.exo_nbr + M_.exo_det_nbr;
|
|
0350 k1 = M_.lead_lag_incidence(:,order_var);
|
|
0351 k1 = k1';
|
|
0352 k1 = k1(:);
|
|
0353 k1 = k1(kk);
|
|
0354 k2 = find(k1);
|
|
0355 kk1(k1(k2)) = k2;
|
|
0356 kk1 = [kk1 length(k1)+1:length(k1)+M_.exo_nbr+M_.exo_det_nbr];
|
|
0357 kk = reshape([1:nk^2],nk,nk);
|
|
0358 kk1 = kk(kk1,kk1);
|
|
0359 <span class="comment">%[junk,junk,hessian] = feval([M_.fname '_dynamic'],z, oo_.exo_steady_state);</span>
|
|
0360 <a href="hessian.html" class="code" title="function hessian_mat = hessian(func,x,varargin)">hessian</a>(:,kk1(:)) = <a href="hessian.html" class="code" title="function hessian_mat = hessian(func,x,varargin)">hessian</a>;
|
|
0361
|
|
0362 <span class="comment">%oo_.exo_simul = tempex ;</span>
|
|
0363 <span class="comment">%clear tempex</span>
|
|
0364
|
|
0365 n1 = 0;
|
|
0366 n2 = np;
|
|
0367 zx = zeros(np,np);
|
|
0368 zu=zeros(np,M_.exo_nbr);
|
|
0369 <span class="keyword">for</span> i=2:M_.maximum_lag+1
|
|
0370 k1 = sum(kstate(:,2) == i);
|
|
0371 zx(n1+1:n1+k1,n2-k1+1:n2)=eye(k1);
|
|
0372 n1 = n1+k1;
|
|
0373 n2 = n2-k1;
|
|
0374 <span class="keyword">end</span>
|
|
0375 kk = flipud(cumsum(flipud(M_.lead_lag_incidence(M_.maximum_lag+1:<span class="keyword">end</span>,order_var)),1));
|
|
0376 k0 = [1:M_.endo_nbr];
|
|
0377 gx1 = dr.ghx;
|
|
0378 hu = dr.ghu(nstatic+[1:npred],:);
|
|
0379 zx = [zx; gx1];
|
|
0380 zu = [zu; dr.ghu];
|
|
0381 <span class="keyword">for</span> i=1:M_.maximum_lead
|
|
0382 k1 = find(kk(i+1,k0) > 0);
|
|
0383 zu = [zu; gx1(k1,1:npred)*hu];
|
|
0384 gx1 = gx1(k1,:)*hx;
|
|
0385 zx = [zx; gx1];
|
|
0386 kk = kk(:,k0);
|
|
0387 k0 = k1;
|
|
0388 <span class="keyword">end</span>
|
|
0389 zx=[zx; zeros(M_.exo_nbr,np);zeros(M_.exo_det_nbr,np)];
|
|
0390 zu=[zu; eye(M_.exo_nbr);zeros(M_.exo_det_nbr,M_.exo_nbr)];
|
|
0391 [n1,n2] = size(zx);
|
|
0392 <span class="keyword">if</span> n1*n1*n2*n2 > 1e7
|
|
0393 rhs = zeros(M_.endo_nbr,n2*n2);
|
|
0394 k1 = 1;
|
|
0395 <span class="keyword">for</span> i1 = 1:n2
|
|
0396 <span class="keyword">for</span> i2 = 1:n2
|
|
0397 rhs(:,k1) = <a href="hessian.html" class="code" title="function hessian_mat = hessian(func,x,varargin)">hessian</a>*kron(zx(:,i1),zx(:,i2));
|
|
0398 k1 = k1 + 1;
|
|
0399 <span class="keyword">end</span>
|
|
0400 <span class="keyword">end</span>
|
|
0401 <span class="keyword">else</span>
|
|
0402 rhs = <a href="hessian.html" class="code" title="function hessian_mat = hessian(func,x,varargin)">hessian</a>*kron(zx,zx);
|
|
0403 <span class="keyword">end</span>
|
|
0404 rhs = -rhs;
|
|
0405
|
|
0406 <span class="comment">%lhs</span>
|
|
0407 n = M_.endo_nbr+sum(kstate(:,2) > M_.maximum_lag+1 & kstate(:,2) < M_.maximum_lag+M_.maximum_lead+1);
|
|
0408 A = zeros(n,n);
|
|
0409 B = zeros(n,n);
|
|
0410 A(1:M_.endo_nbr,1:M_.endo_nbr) = jacobia_(:,M_.lead_lag_incidence(M_.maximum_lag+1,order_var));
|
|
0411 <span class="comment">% variables with the highest lead</span>
|
|
0412 k1 = find(kstate(:,2) == M_.maximum_lag+M_.maximum_lead+1);
|
|
0413 <span class="keyword">if</span> M_.maximum_lead > 1
|
|
0414 k2 = find(kstate(:,2) == M_.maximum_lag+M_.maximum_lead);
|
|
0415 [junk,junk,k3] = intersect(kstate(k1,1),kstate(k2,1));
|
|
0416 <span class="keyword">else</span>
|
|
0417 k2 = [1:M_.endo_nbr];
|
|
0418 k3 = kstate(k1,1);
|
|
0419 <span class="keyword">end</span>
|
|
0420 <span class="comment">% Jacobian with respect to the variables with the highest lead</span>
|
|
0421 B(1:M_.endo_nbr,end-length(k2)+k3) = jacobia_(:,kstate(k1,3)+M_.endo_nbr);
|
|
0422 offset = M_.endo_nbr;
|
|
0423 k0 = [1:M_.endo_nbr];
|
|
0424 gx1 = dr.ghx;
|
|
0425 <span class="keyword">for</span> i=1:M_.maximum_lead-1
|
|
0426 k1 = find(kstate(:,2) == M_.maximum_lag+i+1);
|
|
0427 [k2,junk,k3] = find(kstate(k1,3));
|
|
0428 A(1:M_.endo_nbr,offset+k2) = jacobia_(:,k3+M_.endo_nbr);
|
|
0429 n1 = length(k1);
|
|
0430 A(offset+[1:n1],nstatic+[1:npred]) = -gx1(kstate(k1,1),1:npred);
|
|
0431 gx1 = gx1*hx;
|
|
0432 A(offset+[1:n1],offset+[1:n1]) = eye(n1);
|
|
0433 n0 = length(k0);
|
|
0434 E = eye(n0);
|
|
0435 <span class="keyword">if</span> i == 1
|
|
0436 [junk,junk,k4]=intersect(kstate(k1,1),[1:M_.endo_nbr]);
|
|
0437 <span class="keyword">else</span>
|
|
0438 [junk,junk,k4]=intersect(kstate(k1,1),kstate(k0,1));
|
|
0439 <span class="keyword">end</span>
|
|
0440 i1 = offset-n0+n1;
|
|
0441 B(offset+[1:n1],offset-n0+[1:n0]) = -E(k4,:);
|
|
0442 k0 = k1;
|
|
0443 offset = offset + n1;
|
|
0444 <span class="keyword">end</span>
|
|
0445 [junk,k1,k2] = find(M_.lead_lag_incidence(M_.maximum_lag+M_.maximum_lead+1,order_var));
|
|
0446 A(1:M_.endo_nbr,nstatic+1:nstatic+npred)=<span class="keyword">...</span>
|
|
0447 A(1:M_.endo_nbr,nstatic+[1:npred])+jacobia_(:,k2)*gx1(k1,1:npred);
|
|
0448 C = hx;
|
|
0449 D = [rhs; zeros(n-M_.endo_nbr,size(rhs,2))];
|
|
0450 dr.ghxx = gensylv(2,A,B,C,D);
|
|
0451 <span class="keyword">if</span> exist(<span class="string">'gensylv'</span>)
|
|
0452 dr.ghxx = gensylv(2,A,B,C,D);
|
|
0453 <span class="keyword">else</span>
|
|
0454 C = kron(hx,hx);
|
|
0455 x0 = <a href="sylvester3.html" class="code" title="function x=sylvester3(a,b,c,d)">sylvester3</a>(A,B,C,D);
|
|
0456 dr.ghxx = <a href="sylvester3a.html" class="code" title="function x=sylvester3a(x0,a,b,c,d)">sylvester3a</a>(x0,A,B,C,D);
|
|
0457 <span class="keyword">end</span>
|
|
0458
|
|
0459 <span class="comment">%ghxu</span>
|
|
0460 <span class="comment">%rhs</span>
|
|
0461 hu = dr.ghu(nstatic+1:nstatic+npred,:);
|
|
0462 <span class="comment">%kk = reshape([1:np*np],np,np);</span>
|
|
0463 <span class="comment">%kk = kk(1:npred,1:npred);</span>
|
|
0464 <span class="comment">%rhs = -hessian*kron(zx,zu)-f1*dr.ghxx(end-nyf+1:end,kk(:))*kron(hx(1:npred,:),hu(1:npred,:));</span>
|
|
0465 <span class="keyword">if</span> n1*n1*n2*M_.exo_nbr > 1e7
|
|
0466 rhs = zeros(M_.endo_nbr,n2*M_.exo_nbr);
|
|
0467 k1 = 1;
|
|
0468 <span class="keyword">for</span> i1 = 1:n2
|
|
0469 <span class="keyword">for</span> i2 = 1:M_.exo_nbr
|
|
0470 rhs(:,k1) = <a href="hessian.html" class="code" title="function hessian_mat = hessian(func,x,varargin)">hessian</a>*kron(zx(:,i1),zu(:,i2));
|
|
0471 k1 = k1 + 1;
|
|
0472 <span class="keyword">end</span>
|
|
0473 <span class="keyword">end</span>
|
|
0474 <span class="keyword">else</span>
|
|
0475 rhs = <a href="hessian.html" class="code" title="function hessian_mat = hessian(func,x,varargin)">hessian</a>*kron(zx,zu);
|
|
0476 <span class="keyword">end</span>
|
|
0477 nyf1 = sum(kstate(:,2) == M_.maximum_lag+2);
|
|
0478 hu1 = [hu;zeros(np-npred,M_.exo_nbr)];
|
|
0479 <span class="comment">%B1 = [B(1:M_.endo_nbr,:);zeros(size(A,1)-M_.endo_nbr,size(B,2))];</span>
|
|
0480 rhs = -[rhs; zeros(n-M_.endo_nbr,size(rhs,2))]-B*dr.ghxx*kron(hx,hu1);
|
|
0481
|
|
0482
|
|
0483 <span class="comment">%lhs</span>
|
|
0484 dr.ghxu = A\rhs;
|
|
0485
|
|
0486 <span class="comment">%ghuu</span>
|
|
0487 <span class="comment">%rhs</span>
|
|
0488 kk = reshape([1:np*np],np,np);
|
|
0489 kk = kk(1:npred,1:npred);
|
|
0490 <span class="keyword">if</span> n1*n1*M_.exo_nbr*M_.exo_nbr > 1e7
|
|
0491 rhs = zeros(M_.endo_nbr,M_.exo_nbr*M_.exo_nbr);
|
|
0492 k1 = 1;
|
|
0493 <span class="keyword">for</span> i1 = 1:M_.exo_nbr
|
|
0494 <span class="keyword">for</span> i2 = 1:M_.exo_nbr
|
|
0495 rhs(:,k1) = <a href="hessian.html" class="code" title="function hessian_mat = hessian(func,x,varargin)">hessian</a>*kron(zu(:,i1),zu(:,i2));
|
|
0496 k1 = k1 + 1;
|
|
0497 <span class="keyword">end</span>
|
|
0498 <span class="keyword">end</span>
|
|
0499 <span class="keyword">else</span>
|
|
0500 rhs = <a href="hessian.html" class="code" title="function hessian_mat = hessian(func,x,varargin)">hessian</a>*kron(zu,zu);
|
|
0501 <span class="keyword">end</span>
|
|
0502
|
|
0503 rhs = -[rhs; zeros(n-M_.endo_nbr,size(rhs,2))]-B*dr.ghxx*kron(hu1,hu1);
|
|
0504
|
|
0505 <span class="comment">%lhs</span>
|
|
0506 dr.ghuu = A\rhs;
|
|
0507
|
|
0508 dr.ghxx = dr.ghxx(1:M_.endo_nbr,:);
|
|
0509 dr.ghxu = dr.ghxu(1:M_.endo_nbr,:);
|
|
0510 dr.ghuu = dr.ghuu(1:M_.endo_nbr,:);
|
|
0511
|
|
0512
|
|
0513 <span class="comment">% dr.ghs2</span>
|
|
0514 <span class="comment">% derivatives of F with respect to forward variables</span>
|
|
0515 <span class="comment">% reordering predetermined variables in diminishing lag order</span>
|
|
0516 O1 = zeros(M_.endo_nbr,nstatic);
|
|
0517 O2 = zeros(M_.endo_nbr,M_.endo_nbr-nstatic-npred);
|
|
0518 LHS = jacobia_(:,M_.lead_lag_incidence(M_.maximum_lag+1,order_var));
|
|
0519 RHS = zeros(M_.endo_nbr,M_.exo_nbr^2);
|
|
0520 kk = find(kstate(:,2) == M_.maximum_lag+2);
|
|
0521 gu = dr.ghu;
|
|
0522 guu = dr.ghuu;
|
|
0523 Gu = [dr.ghu(nstatic+[1:npred],:); zeros(np-npred,M_.exo_nbr)];
|
|
0524 Guu = [dr.ghuu(nstatic+[1:npred],:); zeros(np-npred,M_.exo_nbr*M_.exo_nbr)];
|
|
0525 E = eye(M_.endo_nbr);
|
|
0526 M_.lead_lag_incidenceordered = flipud(cumsum(flipud(M_.lead_lag_incidence(M_.maximum_lag+1:<span class="keyword">end</span>,order_var)),1));
|
|
0527 <span class="keyword">if</span> M_.maximum_lag > 0
|
|
0528 M_.lead_lag_incidenceordered = [cumsum(M_.lead_lag_incidence(1:M_.maximum_lag,order_var),1); M_.lead_lag_incidenceordered];
|
|
0529 <span class="keyword">end</span>
|
|
0530 M_.lead_lag_incidenceordered = M_.lead_lag_incidenceordered';
|
|
0531 M_.lead_lag_incidenceordered = M_.lead_lag_incidenceordered(:);
|
|
0532 k1 = find(M_.lead_lag_incidenceordered);
|
|
0533 M_.lead_lag_incidenceordered(k1) = [1:length(k1)]';
|
|
0534 M_.lead_lag_incidenceordered =reshape(M_.lead_lag_incidenceordered,M_.endo_nbr,M_.maximum_lag+M_.maximum_lead+1)';
|
|
0535 kh = reshape([1:nk^2],nk,nk);
|
|
0536 kp = sum(kstate(:,2) <= M_.maximum_lag+1);
|
|
0537 E1 = [eye(npred); zeros(kp-npred,npred)];
|
|
0538 H = E1;
|
|
0539 hxx = dr.ghxx(nstatic+[1:npred],:);
|
|
0540 <span class="keyword">for</span> i=1:M_.maximum_lead
|
|
0541 <span class="keyword">for</span> j=i:M_.maximum_lead
|
|
0542 [junk,k2a,k2] = find(M_.lead_lag_incidence(M_.maximum_lag+j+1,order_var));
|
|
0543 [junk,k3a,k3] = find(M_.lead_lag_incidenceordered(M_.maximum_lag+j+1,:));
|
|
0544 RHS = RHS + jacobia_(:,k2)*guu(k2a,:)+<a href="hessian.html" class="code" title="function hessian_mat = hessian(func,x,varargin)">hessian</a>(:,kh(k3,k3))* <span class="keyword">...</span>
|
|
0545 kron(gu(k3a,:),gu(k3a,:));
|
|
0546 <span class="keyword">end</span>
|
|
0547
|
|
0548 <span class="comment">% LHS</span>
|
|
0549 [junk,k2a,k2] = find(M_.lead_lag_incidence(M_.maximum_lag+i+1,order_var));
|
|
0550 LHS = LHS + jacobia_(:,k2)*(E(k2a,:)+[O1(k2a,:) dr.ghx(k2a,:)*H O2(k2a,:)]);
|
|
0551
|
|
0552 <span class="keyword">if</span> i == M_.maximum_lead
|
|
0553 <span class="keyword">break</span>
|
|
0554 <span class="keyword">end</span>
|
|
0555
|
|
0556 kk = find(kstate(:,2) == M_.maximum_lag+i+1);
|
|
0557 gu = dr.ghx*Gu;
|
|
0558 GuGu = kron(Gu,Gu);
|
|
0559 guu = dr.ghx*Guu+dr.ghxx*GuGu;
|
|
0560 Gu = hx*Gu;
|
|
0561 Guu = hx*Guu;
|
|
0562 Guu(end-npred+1:<span class="keyword">end</span>,:) = Guu(end-npred+1:<span class="keyword">end</span>,:) + hxx*GuGu;
|
|
0563
|
|
0564 H = E1 + hx*H;
|
|
0565 <span class="keyword">end</span>
|
|
0566 RHS = RHS*M_.Sigma_e(:);
|
|
0567 dr.fuu = RHS;
|
|
0568 RHS = -RHS-dr.fbias;
|
|
0569 dr.ghs2 = LHS\RHS;
|
|
0570
|
|
0571 <span class="comment">% deterministic exogenous variables</span>
|
|
0572 <span class="keyword">if</span> M_.exo_det_nbr > 0
|
|
0573 hud = dr.ghud{1}(nstatic+1:nstatic+npred,:);
|
|
0574 zud=[zeros(np,M_.exo_det_nbr);dr.ghud{1};gx(:,1:npred)*hud;zeros(M_.exo_nbr,M_.exo_det_nbr);eye(M_.exo_det_nbr)];
|
|
0575 R1 = <a href="hessian.html" class="code" title="function hessian_mat = hessian(func,x,varargin)">hessian</a>*kron(zx,zud);
|
|
0576 dr.ghxud = cell(M_.exo_det_length,1);
|
|
0577 kf = [M_.endo_nbr-nyf+1:M_.endo_nbr];
|
|
0578 kp = nstatic+[1:npred];
|
|
0579 dr.ghxud{1} = -M1*(R1+f1*dr.ghxx(kf,:)*kron(dr.ghx(kp,:),dr.ghud{1}(kp,:)));
|
|
0580 Eud = eye(M_.exo_det_nbr);
|
|
0581 <span class="keyword">for</span> i = 2:M_.exo_det_length
|
|
0582 hudi = dr.ghud{i}(kp,:);
|
|
0583 zudi=[zeros(np,M_.exo_det_nbr);dr.ghud{i};gx(:,1:npred)*hudi;zeros(M_.exo_nbr+M_.exo_det_nbr,M_.exo_det_nbr)];
|
|
0584 R2 = <a href="hessian.html" class="code" title="function hessian_mat = hessian(func,x,varargin)">hessian</a>*kron(zx,zudi);
|
|
0585 dr.ghxud{i} = -M2*(dr.ghxud{i-1}(kf,:)*kron(hx,Eud)+dr.ghxx(kf,:)*kron(dr.ghx(kp,:),dr.ghud{i}(kp,:)))-M1*R2;
|
|
0586 <span class="keyword">end</span>
|
|
0587 R1 = <a href="hessian.html" class="code" title="function hessian_mat = hessian(func,x,varargin)">hessian</a>*kron(zu,zud);
|
|
0588 dr.ghudud = cell(M_.exo_det_length,1);
|
|
0589 kf = [M_.endo_nbr-nyf+1:M_.endo_nbr];
|
|
0590
|
|
0591 dr.ghuud{1} = -M1*(R1+f1*dr.ghxx(kf,:)*kron(dr.ghu(kp,:),dr.ghud{1}(kp,:)));
|
|
0592 Eud = eye(M_.exo_det_nbr);
|
|
0593 <span class="keyword">for</span> i = 2:M_.exo_det_length
|
|
0594 hudi = dr.ghud{i}(kp,:);
|
|
0595 zudi=[zeros(np,M_.exo_det_nbr);dr.ghud{i};gx(:,1:npred)*hudi;zeros(M_.exo_nbr+M_.exo_det_nbr,M_.exo_det_nbr)];
|
|
0596 R2 = <a href="hessian.html" class="code" title="function hessian_mat = hessian(func,x,varargin)">hessian</a>*kron(zu,zudi);
|
|
0597 dr.ghuud{i} = -M2*dr.ghxud{i-1}(kf,:)*kron(hu,Eud)-M1*R2;
|
|
0598 <span class="keyword">end</span>
|
|
0599 R1 = <a href="hessian.html" class="code" title="function hessian_mat = hessian(func,x,varargin)">hessian</a>*kron(zud,zud);
|
|
0600 dr.ghudud = cell(M_.exo_det_length,M_.exo_det_length);
|
|
0601 dr.ghudud{1,1} = -M1*R1-M2*dr.ghxx(kf,:)*kron(hud,hud);
|
|
0602 <span class="keyword">for</span> i = 2:M_.exo_det_length
|
|
0603 hudi = dr.ghud{i}(nstatic+1:nstatic+npred,:);
|
|
0604 zudi=[zeros(np,M_.exo_det_nbr);dr.ghud{i};gx(:,1:npred)*hudi+dr.ghud{i-1}(kf,:);zeros(M_.exo_nbr+M_.exo_det_nbr,M_.exo_det_nbr)];
|
|
0605 R2 = <a href="hessian.html" class="code" title="function hessian_mat = hessian(func,x,varargin)">hessian</a>*kron(zudi,zudi);
|
|
0606 dr.ghudud{i,i} = -M2*(dr.ghudud{i-1,i-1}(kf,:)+<span class="keyword">...</span>
|
|
0607 2*dr.ghxud{i-1}(kf,:)*kron(hudi,Eud) <span class="keyword">...</span>
|
|
0608 +dr.ghxx(kf,:)*kron(hudi,hudi))-M1*R2;
|
|
0609 R2 = <a href="hessian.html" class="code" title="function hessian_mat = hessian(func,x,varargin)">hessian</a>*kron(zud,zudi);
|
|
0610 dr.ghudud{1,i} = -M2*(dr.ghxud{i-1}(kf,:)*kron(hud,Eud)+<span class="keyword">...</span>
|
|
0611 dr.ghxx(kf,:)*kron(hud,hudi))<span class="keyword">...</span>
|
|
0612 -M1*R2;
|
|
0613 <span class="keyword">for</span> j=2:i-1
|
|
0614 hudj = dr.ghud{j}(kp,:);
|
|
0615 zudj=[zeros(np,M_.exo_det_nbr);dr.ghud{j};gx(:,1:npred)*hudj;zeros(M_.exo_nbr+M_.exo_det_nbr,M_.exo_det_nbr)];
|
|
0616 R2 = <a href="hessian.html" class="code" title="function hessian_mat = hessian(func,x,varargin)">hessian</a>*kron(zudj,zudi);
|
|
0617 dr.ghudud{j,i} = -M2*(dr.ghudud{j-1,i-1}(kf,:)+dr.ghxud{j-1}(kf,:)* <span class="keyword">...</span>
|
|
0618 kron(hudi,Eud)+dr.ghxud{i-1}(kf,:)* <span class="keyword">...</span>
|
|
0619 kron(hudj,Eud)+dr.ghxx(kf,:)*kron(hudj,hudi))-M1*R2;
|
|
0620 <span class="keyword">end</span>
|
|
0621
|
|
0622 <span class="keyword">end</span>
|
|
0623 <span class="keyword">end</span>
|
|
0624 <span class="comment">% 01/08/2001 MJ put return on iorder == 1 after defining dr.kstate and dr.kdyn</span>
|
|
0625 <span class="comment">% 01/17/2001 MJ added dr.delta_s: correction factor for order = 2</span>
|
|
0626 <span class="comment">% 01/21/2001 FC correction of delta_s for more than 1 shock</span>
|
|
0627 <span class="comment">% 01/23/2001 MJ suppression of redundant sum() in delta_s formula</span>
|
|
0628 <span class="comment">% 02/22/2001 MJ stderr_ replaced by Sigma_e_</span>
|
|
0629 <span class="comment">% 08/24/2001 MJ changed the order of the variables, separates static</span>
|
|
0630 <span class="comment">% variables and handles only one instance of variables both</span>
|
|
0631 <span class="comment">% in lead and lag</span>
|
|
0632 <span class="comment">% 08/24/2001 MJ added sigma to state variables as in Schmitt-Grohe and</span>
|
|
0633 <span class="comment">% Uribe (2001)</span>
|
|
0634 <span class="comment">% 10/20/2002 MJ corrected lags on several periods bug</span>
|
|
0635 <span class="comment">% 10/30/2002 MJ corrected lags on several periods bug on static when some</span>
|
|
0636 <span class="comment">% intermediary lags are missing</span>
|
|
0637 <span class="comment">% 12/08/2002 MJ uses sylvester3 to solve for dr.ghxx</span>
|
|
0638 <span class="comment">% 01/01/2003 MJ added dr.fbias for iterative for dr_algo == 1</span>
|
|
0639 <span class="comment">% 02/21/2003 MJ corrected bug for models without lagged variables</span>
|
|
0640 <span class="comment">% 03/02/2003 MJ fixed second order for lag on several periods</span>
|
|
0641 <span class="comment">% 05/21/2003 MJ add check call argument and make computation for CHECK</span>
|
|
0642 <span class="comment">% 06/01/2003 MJ added a test for M_.maximum_lead > 1 and order > 1</span>
|
|
0643 <span class="comment">% 08/28/2003 MJ corrected bug in computation of 2nd order (ordering of</span>
|
|
0644 <span class="comment">% forward variable in LHS)</span>
|
|
0645 <span class="comment">% 08/29/2003 MJ use Sims routine if mjdgges isn't available</span>
|
|
0646
|
|
0647
|
|
0648
|
|
0649
|
|
0650
|
|
0651
|
|
0652</pre></div>
|
|
<hr><address>Generated on Fri 16-Jun-2006 09:09:06 by <strong><a href="http://www.artefact.tk/software/matlab/m2html/">m2html</a></strong> © 2003</address>
|
|
</body>
|
|
</html> |