118 lines
7.3 KiB
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 © 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> > lyapunov_symm.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>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)) > 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)) > 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 > 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 > 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)) > 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> © 2003</address>
|
|
</body>
|
|
</html> |