dynare/matlab/doc/lyapunov_symm.html

118 lines
7.3 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 lyapunov_symm</title>
<meta name="keywords" content="lyapunov_symm">
<meta name="description" content="solves x-a*x*a'=b for b (and then x) symmetrical">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="generator" content="m2html &copy; 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> &gt; <a href="index.html">.</a> &gt; lyapunov_symm.m</div>
<!--<table width="100%"><tr><td align="left"><a href="../index.html"><img alt="<" border="0" src="../left.png">&nbsp;Master index</a></td>
<td align="right"><a href="index.html">Index for .&nbsp;<img alt=">" border="0" src="../right.png"></a></td></tr></table>-->
<h1>lyapunov_symm
</h1>
<h2><a name="_name"></a>PURPOSE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
<div class="box"><strong>solves x-a*x*a'=b for b (and then x) symmetrical</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 [x,ns_var]=lyapunov_symm(a,b) </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"> solves x-a*x*a'=b for b (and then x) symmetrical</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="my_ordeig.html" class="code" title="function eval = my_ordeig(t)">my_ordeig</a> </li></ul>
This function is called by:
<ul style="list-style-image:url(../matlabicon.gif)">
<li><a href="DsgeLikelihood.html" class="code" title="function [fval,cost_flag,ys,trend_coeff,info] = DsgeLikelihood(xparam1,gend,data)">DsgeLikelihood</a> stephane.adjemian@cepremap.cnrs.fr [09-07-2004]</li><li><a href="DsgeSmoother.html" class="code" title="function [alphahat,etahat,epsilonhat,ahat,SteadyState,trend_coeff,aK] = DsgeSmoother(xparam1,gend,Y)">DsgeSmoother</a> stephane.adjemian@cepremap.cnrs.fr [09-07-2004]</li><li><a href="UnivariateSpectralDensity.html" class="code" title="function [omega,f] = UnivariateSpectralDensity(dr,var_list)">UnivariateSpectralDensity</a> stephane.adjemian@ens.fr</li><li><a href="calib_obj.html" class="code" title="function f=calib_obj(M_.Sigma_e,A,ghu1,ghx,ghu,targets,var_weights,iy,nar)">calib_obj</a> targets and iy order: 1) variances 2) correlations</li><li><a href="calib_obj2.html" class="code" title="function objective=calib_obj2(M_.Sigma_e,A,ghu1,ghx,ghu,targets,var_weights,iy,nar)">calib_obj2</a> targets and iy order: 1) variances 2) correlations</li><li><a href="th_autocovariances.html" class="code" title="function [Gamma_y,ivar]=th_autocovariances(dr,ivar)">th_autocovariances</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">% solves x-a*x*a'=b for b (and then x) symmetrical</span>
0002 <a name="_sub0" href="#_subfunctions" class="code">function [x,ns_var]=lyapunov_symm(a,b)</a>
0003 <span class="keyword">global</span> options_
0004
0005 info = 0;
0006 <span class="keyword">if</span> size(a,1) == 1
0007 x=b/(1-a*a);
0008 <span class="keyword">return</span>
0009 <span class="keyword">end</span>
0010 [u,t] = schur(a);
0011 <span class="keyword">if</span> exist(<span class="string">'ordeig'</span>,<span class="string">'builtin'</span>)
0012 e1 = abs(ordeig(t)) &gt; 2-options_.qz_criterium;
0013 <span class="keyword">else</span>
0014 e1 = abs(<a href="my_ordeig.html" class="code" title="function eval = my_ordeig(t)">my_ordeig</a>(t)) &gt; 2-options_.qz_criterium;
0015 <span class="keyword">end</span>
0016 k = sum(e1);
0017 <span class="keyword">if</span> exist(<span class="string">'ordschur'</span>,<span class="string">'builtin'</span>)
0018 <span class="comment">% selects stable roots</span>
0019 [u,t] = ordschur(u,t,e1);
0020 n = length(e1)-k;
0021 b=u(:,k+1:end)'*b*u(:,k+1:end);
0022 t = t(k+1:<span class="keyword">end</span>,k+1:end);
0023 <span class="keyword">elseif</span> k &gt; 0
0024 <span class="comment">% problem for Matlab version that don't have ordschur</span>
0025 error([<span class="string">'lyapunov_sym: you need a Matlab version &gt; 6.5 to handle models'</span> <span class="keyword">...</span>
0026 <span class="string">' with unit roots'</span>])
0027 <span class="keyword">else</span>
0028 <span class="comment">% no unit root</span>
0029 n = length(e1);
0030 b=u'*b*u;
0031 <span class="keyword">end</span>
0032 x=zeros(n,n);
0033 <span class="keyword">for</span> i=n:-1:2
0034 <span class="keyword">if</span> t(i,i-1) == 0
0035 <span class="keyword">if</span> i == n
0036 c = zeros(n,1);
0037 <span class="keyword">else</span>
0038 c = t(1:i,:)*(x(:,i+1:end)*t(i,i+1:end)')+<span class="keyword">...</span>
0039 t(i,i)*t(1:i,i+1:end)*x(i+1:<span class="keyword">end</span>,i);
0040 <span class="keyword">end</span>
0041 q = eye(i)-t(1:i,1:i)*t(i,i);
0042 x(1:i,i) = q\(b(1:i,i)+c);
0043 x(i,1:i-1) = x(1:i-1,i)';
0044 <span class="keyword">else</span>
0045 <span class="keyword">if</span> i == n
0046 c = zeros(n,1);
0047 c1 = zeros(n,1);
0048 <span class="keyword">else</span>
0049 c = t(1:i,:)*(x(:,i+1:end)*t(i,i+1:end)')+<span class="keyword">...</span>
0050 t(i,i)*t(1:i,i+1:end)*x(i+1:<span class="keyword">end</span>,i)+<span class="keyword">...</span>
0051 t(i,i-1)*t(1:i,i+1:end)*x(i+1:<span class="keyword">end</span>,i-1);
0052 c1 = t(1:i,:)*(x(:,i+1:end)*t(i-1,i+1:end)')+<span class="keyword">...</span>
0053 t(i-1,i-1)*t(1:i,i+1:end)*x(i+1:<span class="keyword">end</span>,i-1)+<span class="keyword">...</span>
0054 t(i-1,i)*t(1:i,i+1:end)*x(i+1:<span class="keyword">end</span>,i);
0055 <span class="keyword">end</span>
0056 q = [eye(i)-t(1:i,1:i)*t(i,i) -t(1:i,1:i)*t(i,i-1);<span class="keyword">...</span>
0057 -t(1:i,1:i)*t(i-1,i) eye(i)-t(1:i,1:i)*t(i-1,i-1)];
0058 z = q\[b(1:i,i)+c;b(1:i,i-1)+c1];
0059 x(1:i,i) = z(1:i);
0060 x(1:i,i-1) = z(i+1:end);
0061 x(i,1:i-1)=x(1:i-1,i)';
0062 x(i-1,1:i-2)=x(1:i-2,i-1)';
0063 i = i - 1;
0064 <span class="keyword">end</span>
0065 <span class="keyword">end</span>
0066 <span class="keyword">if</span> i == 2
0067 c = t(1,:)*(x(:,2:end)*t(1,2:end)')+t(1,1)*t(1,2:end)*x(2:<span class="keyword">end</span>,1);
0068 x(1,1)=(b(1,1)+c)/(1-t(1,1)*t(1,1));
0069 <span class="keyword">end</span>
0070 x=u(:,k+1:end)*x*u(:,k+1:end)';
0071 ns_var = [];
0072 ns_var = find(any(abs(u(:,1:k)) &gt; 1e-8,2));</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> &copy; 2003</address>
</body>
</html>