<?xml-stylesheet type="text/xsl" href="../styles/pmathml.xsl"?>
<!-- saved from url=(0014)about:internet -->
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:dsi="http://www.w3.org/1999/xlink" xmlns:m="http://www.w3.org/1998/Math/MathML" xml:space="preserve"><head><meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"/><title>F08QGF (DTRSEN) : NAG Library, Mark 23</title><link rel="stylesheet" href="../styles/libdoc.css" type="text/css"/><script type="text/javascript">
   function showLevel(_levelId){
    var thisLevel = document.getElementById(_levelId);
    var thisplus = document.getElementById( _levelId.concat('plus'));
    var thisminus = document.getElementById( _levelId.concat('minus'));
    if(thisLevel.style.display != "block"){
     thisLevel.style.display = "block";
     thisplus.style.display = "none";
     thisminus.style.display = "inline";
     }
    else{
     thisLevel.style.display = "none";
     thisminus.style.display = "none";
     thisplus.style.display = "inline";
     }
    }
  </script></head><body><hr/><div><a class="rout" href="../../pdf/F08/f08qgf.pdf">F08QGF (DTRSEN) (PDF version)</a></div><div><a class="chap" href="f08conts.xml">F08 Chapter Contents</a></div><div><a class="chapint" href="f08intro.xml">F08 Chapter Introduction</a></div>
<div><a class="htmltoc" href="../FRONTMATTER/manconts.xml">NAG Library Manual</a></div><hr/><h1 class="libdoc">NAG Library Routine Document<br/><br/>F08QGF (DTRSEN)</h1><div class="paramtext"><div class="header"><b>Note:</b>&#160; before using this routine, please read the Users' Note for your implementation to check the interpretation of <span class="bitalic">bold italicised</span> terms and other implementation-dependent details.</div></div> 
<div class="htmltoc">
<h2 class="htmltoc"><span class="htmltochead" onclick="showLevel('htmltoc');"><span class="htmltocplus" id="htmltocplus">+</span><span class="htmltocminus" id="htmltocminus">&#8722;</span></span>&#160;Contents</h2>
<div class="htmltocitem" id="htmltoc">
<div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#purpose">1&#160;&#160;<b>Purpose</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#specification">2&#160;&#160;<b>Specification</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#description">3&#160;&#160;<b>Description</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#references">4&#160;&#160;<b>References</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#parameters">5&#160;&#160;<b>Parameters</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#errors">6&#160;&#160;<b>Error Indicators and Warnings</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#accuracy">7&#160;&#160;<b>Accuracy</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#fcomments">8&#160;&#160;<b>Further Comments</b></a>
</div><div class="htmltoc">
<span class="htmltoc" onclick="showLevel('tocexample');"><span class="htmltocplus" id="tocexampleplus">+</span><span class="htmltocminus" id="tocexampleminus">&#8722;</span></span>
<a class="htmltoc" href="#example">9&#160;&#160;<b>Example</b></a>
<div class="htmltocitem" id="tocexample">
<div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#examtext">9.1&#160;&#160;<b>Program Text</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#examdata">9.2&#160;&#160;<b>Program Data</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#examresults">9.3&#160;&#160;<b>Program Results</b></a>
</div>
</div>
</div>
</div>
</div><h2 class="standard"><a class="sec" name="purpose" id="purpose"/>1&#160;&#160;Purpose</h2>
<div class="paramtext">F08QGF (DTRSEN) reorders the Schur factorization of a real general matrix so that a selected cluster of eigenvalues appears in the leading elements or blocks on the diagonal of the Schur form.  The routine also optionally computes the reciprocal condition numbers of the cluster of eigenvalues and/or the invariant subspace.</div><h2 class="standard"><a class="sec" name="specification" id="specification"/>2&#160;&#160;Specification</h2><table class="fspec"><tr><td class="tdfspec1">
<div class="left-tablediv"><table class="fspec1"><tbody>
<tr>
<td class="tdfspec1" valign="top" align="left">SUBROUTINE&#160;F08QGF&#160;(</td>
<td class="tdfspec2" valign="top" align="left"><a class="arg" href="#JOB">JOB</a>, <a class="arg" href="#COMPQ">COMPQ</a>, <a class="arg" href="#SELECT">SELECT</a>, <a class="arg" href="#N">N</a>, <a class="arg" href="#T">T</a>, <a class="arg" href="#LDT">LDT</a>, <a class="arg" href="#Q">Q</a>, <a class="arg" href="#LDQ">LDQ</a>, <a class="arg" href="#WR">WR</a>, <a class="arg" href="#WI">WI</a>, <a class="arg" href="#M">M</a>, <a class="arg" href="#S">S</a>, <a class="arg" href="#SEP">SEP</a>, <a class="arg" href="#WORK">WORK</a>, <a class="arg" href="#LWORK">LWORK</a>, <a class="arg" href="#IWORK">IWORK</a>, <a class="arg" href="#LIWORK">LIWORK</a>, <a class="arg" href="#INFO">INFO</a>)</td>
</tr>
</tbody>
</table></div>
<div class="left-tablediv"><table class="fspec3"><tbody>
<tr>
<td class="tdfspec1" valign="top" align="left">INTEGER&#160;</td>
<td class="tdfspec2" valign="top" align="left">N, LDT, LDQ, M, LWORK, IWORK(max(1,LIWORK)), LIWORK, INFO</td>
</tr>
<tr>
<td class="tdfspec1" valign="top" align="left">REAL&#160;(KIND=nag_wp)&#160;</td>
<td class="tdfspec2" valign="top" align="left">T(LDT,*), Q(LDQ,*), WR(*), WI(*), S, SEP, WORK(max(1,LWORK))</td>
</tr>
<tr>
<td class="tdfspec1" valign="top" align="left">LOGICAL&#160;</td>
<td class="tdfspec2" valign="top" align="left">SELECT(*)</td>
</tr><tr>
<td class="tdfspec1" valign="top" align="left">CHARACTER(1)&#160;</td>
<td class="tdfspec2" valign="top" align="left">JOB, COMPQ</td></tr></tbody>
</table></div>
</td></tr></table>
<div class="paramtext">The routine may be called by its 
    LAPACK
    name <span class="bitalic">dtrsen</span>.</div><h2 class="standard"><a class="sec" name="description" id="description"/>3&#160;&#160;Description</h2>
<div class="paramtext">F08QGF (DTRSEN) reorders the Schur factorization of a real general matrix <m:math><m:mi>A</m:mi><m:mo>=</m:mo><m:mi>Q</m:mi><m:mi>T</m:mi><m:msup><m:mi>Q</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup></m:math>, so that a selected cluster of eigenvalues appears in the leading diagonal elements or blocks of the Schur form.</div><div class="paramtext">The reordered Schur form <m:math><m:mover><m:mi>T</m:mi><m:mo>~</m:mo></m:mover></m:math>&#160;is computed by an orthogonal similarity transformation: <m:math><m:mover><m:mi>T</m:mi><m:mo>~</m:mo></m:mover><m:mo>=</m:mo><m:msup><m:mi>Z</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>T</m:mi><m:mi>Z</m:mi></m:math>.  Optionally the updated matrix <m:math><m:mover><m:mi>Q</m:mi><m:mo>~</m:mo></m:mover></m:math>&#160;of Schur vectors is computed as <m:math><m:mover><m:mi>Q</m:mi><m:mo>~</m:mo></m:mover><m:mo>=</m:mo><m:mi>Q</m:mi><m:mi>Z</m:mi></m:math>, giving <m:math><m:mi>A</m:mi><m:mo>=</m:mo><m:mover><m:mi>Q</m:mi><m:mo>~</m:mo></m:mover><m:mover><m:mi>T</m:mi><m:mo>~</m:mo></m:mover><m:msup><m:mover><m:mi>Q</m:mi><m:mo>~</m:mo></m:mover><m:mi mathvariant="normal">T</m:mi></m:msup></m:math>.</div><div class="paramtext">Let <m:math><m:mover><m:mi>T</m:mi><m:mo>~</m:mo></m:mover><m:mo>=</m:mo> <m:mfenced><m:mtable>
  <m:mtr>
   <m:mtd><m:msub><m:mi>T</m:mi><m:mn>11</m:mn></m:msub></m:mtd>
   <m:mtd><m:msub><m:mi>T</m:mi><m:mn>12</m:mn></m:msub></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:msub><m:mi>T</m:mi><m:mn>22</m:mn></m:msub></m:mtd>
  </m:mtr>
 </m:mtable></m:mfenced>
</m:math>, where the selected eigenvalues are precisely the eigenvalues of the leading <m:math><m:mi>m</m:mi></m:math>&#160;by <m:math><m:mi>m</m:mi></m:math>&#160;sub-matrix <m:math><m:msub><m:mi>T</m:mi><m:mn>11</m:mn></m:msub></m:math>.  Let <m:math><m:mover><m:mi>Q</m:mi><m:mo>~</m:mo></m:mover></m:math>&#160;be correspondingly partitioned as <m:math>
 <m:mfenced><m:mtable>
  <m:mtr>
   <m:mtd><m:msub><m:mi>Q</m:mi><m:mn>1</m:mn></m:msub></m:mtd>
   <m:mtd><m:msub><m:mi>Q</m:mi><m:mn>2</m:mn></m:msub></m:mtd>
  </m:mtr>
 </m:mtable></m:mfenced>
</m:math>&#160;where <m:math><m:msub><m:mi>Q</m:mi><m:mn>1</m:mn></m:msub></m:math>&#160;consists of the first <m:math><m:mi>m</m:mi></m:math>&#160;columns of <m:math><m:mi>Q</m:mi></m:math>.  Then <m:math><m:mi>A</m:mi><m:msub><m:mi>Q</m:mi><m:mn>1</m:mn></m:msub><m:mo>=</m:mo><m:msub><m:mi>Q</m:mi><m:mn>1</m:mn></m:msub><m:msub><m:mi>T</m:mi><m:mn>11</m:mn></m:msub></m:math>, and so the <m:math><m:mi>m</m:mi></m:math>&#160;columns of <m:math><m:msub><m:mi>Q</m:mi><m:mn>1</m:mn></m:msub></m:math>&#160;form an orthonormal basis for the invariant subspace corresponding to the selected cluster of eigenvalues.</div><div class="paramtext">Optionally the routine also computes estimates of the reciprocal condition numbers of the average of the cluster of eigenvalues and of the invariant subspace.</div><h2 class="standard"><a class="sec" name="references" id="references"/>4&#160;&#160;References</h2><div class="paramtext"><a name="ref105" id="ref105"/>Golub G H and Van Loan C F (1996)  <i>Matrix Computations</i> (3rd Edition) Johns Hopkins University Press, Baltimore </div><h2 class="standard"><a class="sec" name="parameters" id="parameters"/>5&#160;&#160;Parameters</h2>
<dl><dt class="paramhead"><a name="JOB" id="JOB"/>1: &#160;&#160;&#8194; JOB &#8211; CHARACTER(1)<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: indicates whether condition numbers are required for the cluster of eigenvalues and/or the invariant subspace.

<dl>
<dt class="paramval"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#JOB"><m:mi mathcolor="#EE0000" mathvariant="bold">JOB</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'N'</m:mtext></m:math></dt>
<dd>No condition numbers are required.</dd>
<dt class="paramval"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#JOB"><m:mi mathcolor="#EE0000" mathvariant="bold">JOB</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'E'</m:mtext></m:math></dt>
<dd>Only the condition number for the cluster of eigenvalues is computed.</dd>
<dt class="paramval"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#JOB"><m:mi mathcolor="#EE0000" mathvariant="bold">JOB</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'V'</m:mtext></m:math></dt>
<dd>Only the condition number for the invariant subspace is computed.</dd>
<dt class="paramval"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#JOB"><m:mi mathcolor="#EE0000" mathvariant="bold">JOB</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'B'</m:mtext></m:math></dt>
<dd>Condition numbers for both the cluster of eigenvalues and the invariant subspace are computed.</dd></dl>
</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#JOB"><m:mi mathcolor="#EE0000" mathvariant="bold">JOB</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'N'</m:mtext></m:math>, <m:math><m:mtext>'E'</m:mtext></m:math>, <m:math><m:mtext>'V'</m:mtext></m:math>&#160;or <m:math><m:mtext>'B'</m:mtext></m:math>.
</div>
</dd><dt class="paramhead"><a name="COMPQ" id="COMPQ"/>2: &#160;&#160;&#8194; COMPQ &#8211; CHARACTER(1)<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: indicates whether the matrix <m:math><m:mi>Q</m:mi></m:math>&#160;of Schur vectors is to be updated.

<dl>
<dt class="paramval"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#COMPQ"><m:mi mathcolor="#EE0000" mathvariant="bold">COMPQ</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'V'</m:mtext></m:math></dt>
<dd>The matrix <m:math><m:mi>Q</m:mi></m:math>&#160;of Schur vectors is updated.</dd>
<dt class="paramval"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#COMPQ"><m:mi mathcolor="#EE0000" mathvariant="bold">COMPQ</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'N'</m:mtext></m:math></dt>
<dd>No Schur vectors are updated.</dd></dl>
</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#COMPQ"><m:mi mathcolor="#EE0000" mathvariant="bold">COMPQ</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'V'</m:mtext></m:math>&#160;or <m:math><m:mtext>'N'</m:mtext></m:math>.
</div>
</dd><dt class="paramhead"><a name="SELECT" id="SELECT"/>3: &#160;&#160;&#8194; SELECT(<m:math><m:mo>*</m:mo></m:math>) &#8211; LOGICAL&#160;array<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><b>Note:</b> the dimension of the array <a class="arg" href="#SELECT">SELECT</a>
must be at least
<m:math><m:mrow><m:mi>max</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:mn>1</m:mn><m:mo>,</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction></m:mfenced></m:mrow></m:math>.</div>
<div class="paramtext"><i>On entry</i>: the eigenvalues in the selected cluster. To select a real eigenvalue <m:math><m:msub><m:mi>&#955;</m:mi><m:mi>j</m:mi></m:msub></m:math>, <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#SELECT"><m:mi mathcolor="#EE0000" mathvariant="bold">SELECT</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>j</m:mi></m:mfenced></m:mrow></m:math>&#160;must be set .TRUE.. To select a complex conjugate pair of eigenvalues <m:math><m:msub><m:mi>&#955;</m:mi><m:mi>j</m:mi></m:msub></m:math>&#160;and <m:math><m:msub><m:mi>&#955;</m:mi><m:mrow><m:mi>j</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow></m:msub></m:math>&#160;(corresponding to a <m:math><m:mn>2</m:mn></m:math>&#160;by <m:math><m:mn>2</m:mn></m:math>&#160;diagonal block), <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#SELECT"><m:mi mathcolor="#EE0000" mathvariant="bold">SELECT</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>j</m:mi></m:mfenced></m:mrow></m:math>&#160;and/or <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#SELECT"><m:mi mathcolor="#EE0000" mathvariant="bold">SELECT</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mrow><m:mi>j</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow></m:mfenced></m:mrow></m:math>&#160;must be set to .TRUE.. A complex conjugate pair of eigenvalues <b>must</b> be either both included in the cluster or both excluded. See also <a class="sec" href="#fcomments">Section 8</a>.</div>
</dd><dt class="paramhead"><a name="N" id="N"/>4: &#160;&#160;&#8194; N &#8211; INTEGER<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: 

<m:math><m:mi>n</m:mi></m:math>, the order of the matrix <m:math><m:mi>T</m:mi></m:math>.</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mn>0</m:mn></m:math>.
</div>
</dd><dt class="paramhead"><a name="T" id="T"/>5: &#160;&#160;&#8194; T(<a class="arg" href="#LDT">LDT</a>,<m:math><m:mo>*</m:mo></m:math>) &#8211; REAL&#160;(KIND=nag_wp)&#160;array<span class="pclass">Input/Output</span></dt><dd>
<div class="paramtext"><b>Note:</b> the second dimension of the array <a class="arg" href="#T">T</a>
must be at least
<m:math><m:mrow><m:mi>max</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:mn>1</m:mn><m:mo>,</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction></m:mfenced></m:mrow></m:math>.</div>
<div class="paramtext"><i>On entry</i>: the <m:math><m:mi>n</m:mi></m:math>&#160;by <m:math><m:mi>n</m:mi></m:math>&#160;upper quasi-triangular matrix <m:math><m:mi>T</m:mi></m:math>&#160;in canonical Schur form, as returned by <a class="rout" href="../F08/f08pef.xml">F08PEF (DHSEQR)</a>. See also <a class="sec" href="#fcomments">Section 8</a>.</div>
<div class="paramtext"><i>On exit</i>: <a class="arg" href="#T">T</a> is overwritten by the updated matrix <m:math><m:mover><m:mi>T</m:mi><m:mo>~</m:mo></m:mover></m:math>.</div>
</dd><dt class="paramhead"><a name="LDT" id="LDT"/>6: &#160;&#160;&#8194; LDT &#8211; INTEGER<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: the first dimension of the array <a class="arg" href="#T">T</a> as declared in the (sub)program from which F08QGF (DTRSEN) is called.</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#LDT"><m:mi mathcolor="#EE0000" mathvariant="bold">LDT</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mrow><m:mi>max</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:mn>1</m:mn><m:mo>,</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction></m:mfenced></m:mrow></m:math>.
</div>
</dd><dt class="paramhead"><a name="Q" id="Q"/>7: &#160;&#160;&#8194; Q(<a class="arg" href="#LDQ">LDQ</a>,<m:math><m:mo>*</m:mo></m:math>) &#8211; REAL&#160;(KIND=nag_wp)&#160;array<span class="pclass">Input/Output</span></dt><dd>
<div class="paramtext"><b>Note:</b> the second dimension of the array <a class="arg" href="#Q">Q</a>
must be at least
<m:math><m:mrow><m:mi>max</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:mn>1</m:mn><m:mo>,</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction></m:mfenced></m:mrow></m:math>&#160;if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#COMPQ"><m:mi mathcolor="#EE0000" mathvariant="bold">COMPQ</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'V'</m:mtext></m:math>&#160;and at least <m:math><m:mn>1</m:mn></m:math>&#160;if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#COMPQ"><m:mi mathcolor="#EE0000" mathvariant="bold">COMPQ</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'N'</m:mtext></m:math>.</div>
<div class="paramtext"><i>On entry</i>: if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#COMPQ"><m:mi mathcolor="#EE0000" mathvariant="bold">COMPQ</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'V'</m:mtext></m:math>, <a class="arg" href="#Q">Q</a> must contain the <m:math><m:mi>n</m:mi></m:math>&#160;by <m:math><m:mi>n</m:mi></m:math>&#160;orthogonal matrix <m:math><m:mi>Q</m:mi></m:math>&#160;of Schur vectors, as returned by <a class="rout" href="../F08/f08pef.xml">F08PEF (DHSEQR)</a>.</div>
<div class="paramtext"><i>On exit</i>: if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#COMPQ"><m:mi mathcolor="#EE0000" mathvariant="bold">COMPQ</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'V'</m:mtext></m:math>, <a class="arg" href="#Q">Q</a> contains the updated matrix of Schur vectors; the first <m:math><m:mi>m</m:mi></m:math>&#160;columns of <m:math><m:mi>Q</m:mi></m:math>&#160;form an orthonormal basis for the specified invariant subspace.
<div class="paramtext">If <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#COMPQ"><m:mi mathcolor="#EE0000" mathvariant="bold">COMPQ</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'N'</m:mtext></m:math>, <a class="arg" href="#Q">Q</a> is not referenced.</div>
</div>
</dd><dt class="paramhead"><a name="LDQ" id="LDQ"/>8: &#160;&#160;&#8194; LDQ &#8211; INTEGER<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: the first dimension of the array <a class="arg" href="#Q">Q</a> as declared in the (sub)program from which F08QGF (DTRSEN) is called.</div><div class="paramtext"><i>Constraints</i>:
   <div class="paramtext"/><ul class="listcons">
<li class="listcons">if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#COMPQ"><m:mi mathcolor="#EE0000" mathvariant="bold">COMPQ</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'V'</m:mtext></m:math>, <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#LDQ"><m:mi mathcolor="#EE0000" mathvariant="bold">LDQ</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mrow><m:mi>max</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:mn>1</m:mn><m:mo>,</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction></m:mfenced></m:mrow></m:math>;</li>
<li class="listcons">if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#COMPQ"><m:mi mathcolor="#EE0000" mathvariant="bold">COMPQ</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'N'</m:mtext></m:math>, <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#LDQ"><m:mi mathcolor="#EE0000" mathvariant="bold">LDQ</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mn>1</m:mn></m:math>.</li>
</ul></div>
</dd><dt class="paramhead"><a name="WR" id="WR"/>9: &#160;&#160;&#8194; WR(<m:math><m:mo>*</m:mo></m:math>) &#8211; REAL&#160;(KIND=nag_wp)&#160;array<span class="pclass">Output</span></dt><dt class="multi-paramhead"><a name="WI" id="WI"/>10: &#8194; WI(<m:math><m:mo>*</m:mo></m:math>) &#8211; REAL&#160;(KIND=nag_wp)&#160;array<span class="pclass">Output</span></dt><dd>
<div class="paramtext"><b>Note:</b> the dimension of the arrays <a class="arg" href="#WR">WR</a> and <a class="arg" href="#WI">WI</a>
must be at least
<m:math><m:mrow><m:mi>max</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:mn>1</m:mn><m:mo>,</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction></m:mfenced></m:mrow></m:math>.</div>
<div class="paramtext"><i>On exit</i>: the real and imaginary parts, respectively, of the reordered eigenvalues of <m:math><m:mover><m:mi>T</m:mi><m:mo>~</m:mo></m:mover></m:math>. The eigenvalues are stored in the same order as on the diagonal of <m:math><m:mover><m:mi>T</m:mi><m:mo>~</m:mo></m:mover></m:math>; see <a class="sec" href="#fcomments">Section 8</a> for details. Note that if a complex eigenvalue is sufficiently ill-conditioned, then its value may differ significantly from its value before reordering.</div>
</dd><dt class="paramhead"><a name="M" id="M"/>11: &#8194; M &#8211; INTEGER<span class="pclass">Output</span></dt><dd>
<div class="paramtext"><i>On exit</i>: <m:math><m:mi>m</m:mi></m:math>, the dimension of the specified invariant subspace. The value of <m:math><m:mi>m</m:mi></m:math>&#160;is obtained by counting <m:math><m:mn>1</m:mn></m:math>&#160;for each selected real eigenvalue and <m:math><m:mn>2</m:mn></m:math>&#160;for each selected complex conjugate pair of eigenvalues (see <a class="arg" href="#SELECT">SELECT</a>); <m:math><m:mn>0</m:mn><m:mo>&#8804;</m:mo><m:mi>m</m:mi><m:mo>&#8804;</m:mo><m:mi>n</m:mi></m:math>.</div>
</dd><dt class="paramhead"><a name="S" id="S"/>12: &#8194; S &#8211; REAL&#160;(KIND=nag_wp)<span class="pclass">Output</span></dt><dd>
<div class="paramtext"><i>On exit</i>: if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#JOB"><m:mi mathcolor="#EE0000" mathvariant="bold">JOB</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'E'</m:mtext></m:math>&#160;or <m:math><m:mtext>'B'</m:mtext></m:math>, <a class="arg" href="#S">S</a> is a lower bound on the reciprocal condition number of the average of the selected cluster of eigenvalues. If <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#M"><m:mi mathcolor="#EE0000" mathvariant="bold">M</m:mi></m:maction><m:mo>=</m:mo><m:mn>0</m:mn><m:mtext>&#8203; or &#8203;</m:mtext><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction></m:math>, <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#S"><m:mi mathcolor="#EE0000" mathvariant="bold">S</m:mi></m:maction><m:mo>=</m:mo><m:mn>1</m:mn></m:math>; if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#INFO"><m:mi mathcolor="#EE0000" mathvariant="bold">INFO</m:mi></m:maction><m:mo>=</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#INeq1"><m:mn mathcolor="#003399" mathvariant="bold">1</m:mn></m:maction></m:math>&#160;(see <a class="sec" href="#errors">Section 6</a>), <a class="arg" href="#S">S</a> is set to zero.
<div class="paramtext">If <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#JOB"><m:mi mathcolor="#EE0000" mathvariant="bold">JOB</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'N'</m:mtext></m:math>&#160;or <m:math><m:mtext>'V'</m:mtext></m:math>, <a class="arg" href="#S">S</a> is not referenced.</div>
</div>
</dd><dt class="paramhead"><a name="SEP" id="SEP"/>13: &#8194; SEP &#8211; REAL&#160;(KIND=nag_wp)<span class="pclass">Output</span></dt><dd>
<div class="paramtext"><i>On exit</i>: if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#JOB"><m:mi mathcolor="#EE0000" mathvariant="bold">JOB</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'V'</m:mtext></m:math>&#160;or <m:math><m:mtext>'B'</m:mtext></m:math>, <a class="arg" href="#SEP">SEP</a> is the estimated reciprocal condition number of the specified invariant subspace. If <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#M"><m:mi mathcolor="#EE0000" mathvariant="bold">M</m:mi></m:maction><m:mo>=</m:mo><m:mn>0</m:mn><m:mtext>&#8203; or &#8203;</m:mtext><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction></m:math>, <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#SEP"><m:mi mathcolor="#EE0000" mathvariant="bold">SEP</m:mi></m:maction><m:mo>=</m:mo><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>T</m:mi></m:mfenced></m:math>; if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#INFO"><m:mi mathcolor="#EE0000" mathvariant="bold">INFO</m:mi></m:maction><m:mo>=</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#INeq1"><m:mn mathcolor="#003399" mathvariant="bold">1</m:mn></m:maction></m:math>&#160;(see <a class="sec" href="#errors">Section 6</a>), <a class="arg" href="#SEP">SEP</a> is set to zero.
<div class="paramtext">If <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#JOB"><m:mi mathcolor="#EE0000" mathvariant="bold">JOB</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'N'</m:mtext></m:math>&#160;or <m:math><m:mtext>'E'</m:mtext></m:math>, <a class="arg" href="#SEP">SEP</a> is not referenced.</div>
</div>
</dd><dt class="paramhead"><a name="WORK" id="WORK"/>14: &#8194; WORK(<m:math><m:mrow><m:mi>max</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:mn>1</m:mn><m:mo>,</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#LWORK"><m:mi mathcolor="#EE0000" mathvariant="bold">LWORK</m:mi></m:maction></m:mfenced></m:mrow></m:math>) &#8211; REAL&#160;(KIND=nag_wp)&#160;array<span class="pclass">Workspace</span></dt><dd><div class="paramtext"><i>On exit</i>: if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#INFO"><m:mi mathcolor="#EE0000" mathvariant="bold">INFO</m:mi></m:maction><m:mo>=</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#errors"><m:mn mathcolor="#003399" mathvariant="bold">0</m:mn></m:maction></m:math>, <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#WORK"><m:mi mathcolor="#EE0000" mathvariant="bold">WORK</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mn>1</m:mn></m:mfenced></m:mrow></m:math>&#160;contains the minimum value of <a class="arg" href="#LWORK">LWORK</a> required for optimal performance.</div>
</dd><dt class="paramhead"><a name="LWORK" id="LWORK"/>15: &#8194; LWORK &#8211; INTEGER<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: the dimension of the array <a class="arg" href="#WORK">WORK</a> as declared in the (sub)program from which F08QGF (DTRSEN) is called, unless <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#LWORK"><m:mi mathcolor="#EE0000" mathvariant="bold">LWORK</m:mi></m:maction><m:mo>=</m:mo><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:math>, in which case a workspace query is assumed and the routine only calculates the minimum dimension of <a class="arg" href="#WORK">WORK</a>.</div><div class="paramtext"><i>Constraints</i>:
   <div class="paramtext"/><ul class="listcons">
<li class="listcons">if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#JOB"><m:mi mathcolor="#EE0000" mathvariant="bold">JOB</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'N'</m:mtext></m:math>, <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#LWORK"><m:mi mathcolor="#EE0000" mathvariant="bold">LWORK</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mrow><m:mi>max</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:mn>1</m:mn><m:mo>,</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction></m:mfenced></m:mrow></m:math>&#160;or <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#LWORK"><m:mi mathcolor="#EE0000" mathvariant="bold">LWORK</m:mi></m:maction><m:mo>=</m:mo><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:math>;</li>
<li class="listcons">if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#JOB"><m:mi mathcolor="#EE0000" mathvariant="bold">JOB</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'E'</m:mtext></m:math>, <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#LWORK"><m:mi mathcolor="#EE0000" mathvariant="bold">LWORK</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mrow><m:mi>max</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:mn>1</m:mn><m:mo>,</m:mo><m:mrow><m:mi>m</m:mi><m:mo>&#215;</m:mo><m:mfenced separators=""><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction><m:mo>-</m:mo><m:mi>m</m:mi></m:mfenced></m:mrow></m:mfenced></m:mrow></m:math>&#160;or <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#LWORK"><m:mi mathcolor="#EE0000" mathvariant="bold">LWORK</m:mi></m:maction><m:mo>=</m:mo><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:math>;</li>
<li class="listcons">if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#JOB"><m:mi mathcolor="#EE0000" mathvariant="bold">JOB</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'V'</m:mtext></m:math>&#160;or <m:math><m:mtext>'B'</m:mtext></m:math>, <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#LWORK"><m:mi mathcolor="#EE0000" mathvariant="bold">LWORK</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mrow><m:mi>max</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:mn>1</m:mn><m:mo>,</m:mo><m:mrow><m:mn>2</m:mn><m:mi>m</m:mi><m:mo>&#215;</m:mo><m:mfenced separators=""><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction><m:mo>-</m:mo><m:mi>m</m:mi></m:mfenced></m:mrow></m:mfenced></m:mrow></m:math>&#160;or <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#LWORK"><m:mi mathcolor="#EE0000" mathvariant="bold">LWORK</m:mi></m:maction><m:mo>=</m:mo><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:math>.</li>
</ul><div class="paramtext">The actual amount of workspace required cannot exceed <m:math><m:msup><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction><m:mn>2</m:mn></m:msup><m:mo>/</m:mo><m:mn>4</m:mn></m:math>&#160;if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#JOB"><m:mi mathcolor="#EE0000" mathvariant="bold">JOB</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'E'</m:mtext></m:math>&#160;or <m:math><m:msup><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction><m:mn>2</m:mn></m:msup><m:mo>/</m:mo><m:mn>2</m:mn></m:math>&#160;if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#JOB"><m:mi mathcolor="#EE0000" mathvariant="bold">JOB</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'V'</m:mtext></m:math>&#160;or <m:math><m:mtext>'B'</m:mtext></m:math>.</div></div>
</dd><dt class="paramhead"><a name="IWORK" id="IWORK"/>16: &#8194; IWORK(<m:math><m:mrow><m:mi>max</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:mn>1</m:mn><m:mo>,</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#LIWORK"><m:mi mathcolor="#EE0000" mathvariant="bold">LIWORK</m:mi></m:maction></m:mfenced></m:mrow></m:math>) &#8211; INTEGER&#160;array<span class="pclass">Workspace</span></dt><dd><div class="paramtext"><i>On exit</i>: if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#INFO"><m:mi mathcolor="#EE0000" mathvariant="bold">INFO</m:mi></m:maction><m:mo>=</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#errors"><m:mn mathcolor="#003399" mathvariant="bold">0</m:mn></m:maction></m:math>, <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#IWORK"><m:mi mathcolor="#EE0000" mathvariant="bold">IWORK</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mn>1</m:mn></m:mfenced></m:mrow></m:math>&#160;contains the required minimal size of <a class="arg" href="#LIWORK">LIWORK</a>.</div>
</dd><dt class="paramhead"><a name="LIWORK" id="LIWORK"/>17: &#8194; LIWORK &#8211; INTEGER<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: the dimension of the array <a class="arg" href="#IWORK">IWORK</a> as declared in the (sub)program from which F08QGF (DTRSEN) is called, unless <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#LIWORK"><m:mi mathcolor="#EE0000" mathvariant="bold">LIWORK</m:mi></m:maction><m:mo>=</m:mo><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:math>, in which case a workspace query is assumed and the routine only calculates the minimum dimension of <a class="arg" href="#IWORK">IWORK</a>.</div><div class="paramtext"><i>Constraints</i>:
   <div class="paramtext"/><ul class="listcons">
<li class="listcons">if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#JOB"><m:mi mathcolor="#EE0000" mathvariant="bold">JOB</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'N'</m:mtext></m:math>&#160;or <m:math><m:mtext>'E'</m:mtext></m:math>, <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#LIWORK"><m:mi mathcolor="#EE0000" mathvariant="bold">LIWORK</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mn>1</m:mn></m:math>&#160;or <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#LIWORK"><m:mi mathcolor="#EE0000" mathvariant="bold">LIWORK</m:mi></m:maction><m:mo>=</m:mo><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:math>;</li>
<li class="listcons">if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#JOB"><m:mi mathcolor="#EE0000" mathvariant="bold">JOB</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'V'</m:mtext></m:math>&#160;or <m:math><m:mtext>'B'</m:mtext></m:math>, <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#LIWORK"><m:mi mathcolor="#EE0000" mathvariant="bold">LIWORK</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mrow><m:mi>max</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:mn>1</m:mn><m:mo>,</m:mo><m:mrow><m:mi>m</m:mi><m:mo>&#215;</m:mo><m:mfenced separators=""><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction><m:mo>-</m:mo><m:mi>m</m:mi></m:mfenced></m:mrow></m:mfenced></m:mrow></m:math>&#160;or <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#LIWORK"><m:mi mathcolor="#EE0000" mathvariant="bold">LIWORK</m:mi></m:maction><m:mo>=</m:mo><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:math>.</li>
</ul><div class="paramtext">The actual amount of workspace required cannot exceed <m:math><m:msup><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction><m:mn>2</m:mn></m:msup><m:mo>/</m:mo><m:mn>2</m:mn></m:math>&#160;if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#JOB"><m:mi mathcolor="#EE0000" mathvariant="bold">JOB</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'V'</m:mtext></m:math>&#160;or <m:math><m:mtext>'B'</m:mtext></m:math>.</div></div>
</dd><dt class="paramhead"><a name="INFO" id="INFO"/>18: &#8194; INFO &#8211; INTEGER<span class="pclass">Output</span></dt><dd><div class="paramtext"><i>On exit</i>: <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#INFO"><m:mi mathcolor="#EE0000" mathvariant="bold">INFO</m:mi></m:maction><m:mo>=</m:mo><m:mn>0</m:mn></m:math>&#160;unless the routine detects an error (see <a class="sec" href="#errors">Section 6</a>).</div></dd></dl><h2 class="standard"><a class="sec" name="errors" id="errors"/>6&#160;&#160;Error Indicators and Warnings</h2>
<div class="paramtext">Errors or warnings detected by the routine:</div>
<dl class="ifail">
<dt class="errorhead"><a name="INlt0" id="INlt0"/><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#INFO"><m:mi mathcolor="#EE0000" mathvariant="bold">INFO</m:mi></m:maction><m:mo>&lt;</m:mo><m:mn>0</m:mn></m:math></dt>
<dd><div class="paramtext">If <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#INFO"><m:mi mathcolor="#EE0000" mathvariant="bold">INFO</m:mi></m:maction><m:mo>=</m:mo><m:mo>-</m:mo><m:mi>i</m:mi></m:math>, argument <m:math><m:mi>i</m:mi></m:math>&#160;had an illegal value. An explanatory message is output, and execution of the program is terminated.</div></dd>
</dl><dl class="ifail">
<dt class="errorhead"><a name="INeq1" id="INeq1"/><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#INFO"><m:mi mathcolor="#EE0000" mathvariant="bold">INFO</m:mi></m:maction><m:mo>=</m:mo><m:mn>1</m:mn></m:math></dt>
<dd><div class="paramtext">The reordering of <m:math><m:mi>T</m:mi></m:math>&#160;failed because a selected eigenvalue was too close to an eigenvalue which was not selected; this error exit can only occur if at least one of the eigenvalues involved was complex.  The problem is too ill-conditioned: consider modifying the selection of eigenvalues so that eigenvalues which are very close together are either all included in the cluster or all excluded.  On exit, <m:math><m:mi>T</m:mi></m:math>&#160;may have been partially reordered, but <a class="arg" href="#WR">WR</a>, <a class="arg" href="#WI">WI</a> and <m:math><m:mi>Q</m:mi></m:math>&#160;(if requested) are updated consistently with <m:math><m:mi>T</m:mi></m:math>; <a class="arg" href="#S">S</a> and <a class="arg" href="#SEP">SEP</a> (if requested) are both set to zero.</div></dd>
</dl><h2 class="standard"><a class="sec" name="accuracy" id="accuracy"/>7&#160;&#160;Accuracy</h2>
<div class="paramtext">The computed matrix <m:math><m:mover><m:mi>T</m:mi><m:mo>~</m:mo></m:mover></m:math>&#160;is similar to a matrix <m:math><m:mfenced separators=""><m:mi>T</m:mi><m:mo>+</m:mo><m:mi>E</m:mi></m:mfenced></m:math>, where

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>E</m:mi></m:mfenced><m:mn>2</m:mn></m:msub>
 <m:mo>=</m:mo>
 <m:mrow><m:mi mathvariant="italic">O</m:mi><m:mfenced separators=""><m:mi>&#949;</m:mi></m:mfenced></m:mrow>
 <m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>T</m:mi></m:mfenced><m:mn>2</m:mn></m:msub>
 <m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

and <m:math><m:mi>&#949;</m:mi></m:math>&#160;is the <span class="bitalic">machine precision</span>.</div><div class="paramtext"><a class="arg" href="#S">S</a> cannot underestimate the true reciprocal condition number by more than a factor of <m:math><m:msqrt><m:mrow><m:mi>min</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:mi>m</m:mi><m:mo>,</m:mo><m:mrow><m:mi>n</m:mi><m:mo>-</m:mo><m:mi>m</m:mi></m:mrow></m:mfenced></m:mrow></m:msqrt></m:math>.  <a class="arg" href="#SEP">SEP</a> may differ from the true value by <m:math><m:msqrt><m:mi>m</m:mi><m:mfenced separators=""><m:mi>n</m:mi><m:mo>-</m:mo><m:mi>m</m:mi></m:mfenced></m:msqrt></m:math>.  The angle between the computed invariant subspace and the true subspace is <m:math>
 <m:mfrac other="display">
  <m:mrow><m:mrow><m:mi mathvariant="italic">O</m:mi><m:mfenced separators=""><m:mi>&#949;</m:mi></m:mfenced></m:mrow><m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>A</m:mi></m:mfenced><m:mn>2</m:mn></m:msub></m:mrow><m:mi mathvariant="italic">sep</m:mi></m:mfrac>
</m:math>.</div><div class="paramtext">Note that if a <m:math><m:mn>2</m:mn></m:math>&#160;by <m:math><m:mn>2</m:mn></m:math>&#160;diagonal block is involved in the reordering, its off-diagonal elements are in general changed; the diagonal elements and the eigenvalues of the block are unchanged unless the block is sufficiently ill-conditioned, in which case they may be noticeably altered.  It is possible for a <m:math><m:mn>2</m:mn></m:math>&#160;by <m:math><m:mn>2</m:mn></m:math>&#160;block to break into two <m:math><m:mn>1</m:mn></m:math>&#160;by <m:math><m:mn>1</m:mn></m:math>&#160;blocks, i.e., for a pair of complex eigenvalues to become purely real.  The values of real eigenvalues however are never changed by the reordering.</div><h2 class="standard"><a class="sec" name="fcomments" id="fcomments"/>8&#160;&#160;Further Comments</h2>
<div class="paramtext">The input matrix <m:math><m:mi>T</m:mi></m:math>&#160;must be in canonical Schur form, as is the output matrix <m:math><m:mover><m:mi>T</m:mi><m:mo>~</m:mo></m:mover></m:math>.  This has the following structure.</div><div class="paramtext">If all the computed eigenvalues are real, <m:math><m:mover><m:mi>T</m:mi><m:mo>~</m:mo></m:mover></m:math>&#160;is upper triangular, and the diagonal elements of <m:math><m:mover><m:mi>T</m:mi><m:mo>~</m:mo></m:mover></m:math>&#160;are the eigenvalues; <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#WR"><m:mi mathcolor="#EE0000" mathvariant="bold">WR</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi mathvariant="italic">i</m:mi></m:mfenced></m:mrow><m:mo>=</m:mo><m:msub><m:mover><m:mi>t</m:mi><m:mo>~</m:mo></m:mover><m:mrow><m:mi mathvariant="italic">i</m:mi><m:mi mathvariant="italic">i</m:mi></m:mrow></m:msub></m:math>, for <m:math><m:mi mathvariant="italic">i</m:mi><m:mo>=</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:mi>n</m:mi></m:math>&#160;and <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#WI"><m:mi mathcolor="#EE0000" mathvariant="bold">WI</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi></m:mfenced></m:mrow><m:mo>=</m:mo><m:mn>0.0</m:mn></m:math>.</div><div class="paramtext">If some of the computed eigenvalues form complex conjugate pairs, then <m:math><m:mover><m:mi>T</m:mi><m:mo>~</m:mo></m:mover></m:math>&#160;has <m:math><m:mn>2</m:mn></m:math>&#160;by <m:math><m:mn>2</m:mn></m:math>&#160;diagonal blocks.  Each diagonal block has the form

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mfenced><m:mtable>
  <m:mtr>
   <m:mtd><m:msub><m:mover><m:mi>t</m:mi><m:mo>~</m:mo></m:mover><m:mrow><m:mi>i</m:mi><m:mi>i</m:mi></m:mrow></m:msub></m:mtd>
   <m:mtd><m:msub><m:mover><m:mi>t</m:mi><m:mo>~</m:mo></m:mover><m:mrow><m:mi>i</m:mi><m:mo>,</m:mo><m:mi>i</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow></m:msub></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:msub><m:mover><m:mi>t</m:mi><m:mo>~</m:mo></m:mover><m:mrow><m:mi>i</m:mi><m:mo>+</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mi>i</m:mi></m:mrow></m:msub></m:mtd>
   <m:mtd><m:msub><m:mover><m:mi>t</m:mi><m:mo>~</m:mo></m:mover><m:mrow><m:mi>i</m:mi><m:mo>+</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mi>i</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow></m:msub></m:mtd>
  </m:mtr>
 </m:mtable></m:mfenced><m:mo>=</m:mo> <m:mfenced><m:mtable>
  <m:mtr>
   <m:mtd><m:mi>&#945;</m:mi></m:mtd>
   <m:mtd><m:mi>&#946;</m:mi></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:mi>&#947;</m:mi></m:mtd>
   <m:mtd><m:mi>&#945;</m:mi></m:mtd>
  </m:mtr>
 </m:mtable></m:mfenced>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:mi>&#946;</m:mi><m:mi>&#947;</m:mi><m:mo>&lt;</m:mo><m:mn>0</m:mn></m:math>.  The corresponding eigenvalues are <m:math><m:mi>&#945;</m:mi><m:mo>&#177;</m:mo><m:msqrt><m:mi>&#946;</m:mi><m:mi>&#947;</m:mi></m:msqrt></m:math>; <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#WR"><m:mi mathcolor="#EE0000" mathvariant="bold">WR</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi></m:mfenced></m:mrow><m:mo>=</m:mo><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#WR"><m:mi mathcolor="#EE0000" mathvariant="bold">WR</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mrow><m:mi>i</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow></m:mfenced></m:mrow><m:mo>=</m:mo><m:mi>&#945;</m:mi></m:math>; <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#WI"><m:mi mathcolor="#EE0000" mathvariant="bold">WI</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi></m:mfenced></m:mrow><m:mo>=</m:mo><m:mrow><m:mo>+</m:mo><m:msqrt><m:mfenced open="|" close="|" separators=""><m:mi>&#946;</m:mi><m:mi>&#947;</m:mi></m:mfenced></m:msqrt></m:mrow></m:math>; <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#WI"><m:mi mathcolor="#EE0000" mathvariant="bold">WI</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mrow><m:mi>i</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow></m:mfenced></m:mrow><m:mo>=</m:mo><m:mo>-</m:mo><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#WI"><m:mi mathcolor="#EE0000" mathvariant="bold">WI</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi></m:mfenced></m:mrow></m:math>.</div><div class="paramtext">The complex analogue of this routine is <a class="rout" href="../F08/f08quf.xml">F08QUF (ZTRSEN)</a>.</div><h2 class="standard"><a class="sec" name="example" id="example"/>9&#160;&#160;Example</h2>
<div class="paramtext">This example reorders the Schur factorization of the matrix <m:math><m:mi>A</m:mi><m:mo>=</m:mo><m:mi>Q</m:mi><m:mi>T</m:mi><m:msup><m:mi>Q</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup></m:math>&#160;such that the two real eigenvalues appear as the leading elements on the diagonal of the reordered matrix <m:math><m:mover><m:mi>T</m:mi><m:mo>~</m:mo></m:mover></m:math>, where

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>T</m:mi>
 <m:mo>=</m:mo>
 <m:mfenced><m:mtable columnalign="right">
<m:mtr>
   <m:mtd><m:mn>0.7995</m:mn></m:mtd>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>0.1144</m:mn></m:mrow></m:mtd>
   <m:mtd><m:mn>0.0060</m:mn></m:mtd>
   <m:mtd><m:mn>0.0336</m:mn></m:mtd>
</m:mtr><m:mtr>
   <m:mtd><m:mn>0.0000</m:mn></m:mtd>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>0.0994</m:mn></m:mrow></m:mtd>
   <m:mtd><m:mn>0.2478</m:mn></m:mtd>
   <m:mtd><m:mn>0.3474</m:mn></m:mtd>
</m:mtr><m:mtr>
   <m:mtd><m:mn>0.0000</m:mn></m:mtd>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>0.6483</m:mn></m:mrow></m:mtd>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>0.0994</m:mn></m:mrow></m:mtd>
   <m:mtd><m:mn>0.2026</m:mn></m:mtd>
</m:mtr><m:mtr>
   <m:mtd><m:mn>0.0000</m:mn></m:mtd>
   <m:mtd><m:mn>0.0000</m:mn></m:mtd>
   <m:mtd><m:mn>0.0000</m:mn></m:mtd>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>0.1007</m:mn></m:mrow></m:mtd>
</m:mtr>
</m:mtable></m:mfenced>
</m:math></td><td class="formula2"/></tr></table></div>

and

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>Q</m:mi>
 <m:mo>=</m:mo>
 <m:mfenced><m:mtable columnalign="right">
<m:mtr>
   <m:mtd><m:mn>0.6551</m:mn></m:mtd>
   <m:mtd><m:mn>0.1037</m:mn></m:mtd>
   <m:mtd><m:mn>0.3450</m:mn></m:mtd>
   <m:mtd><m:mn>0.6641</m:mn></m:mtd>
</m:mtr><m:mtr>
   <m:mtd><m:mn>0.5236</m:mn></m:mtd>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>0.5807</m:mn></m:mrow></m:mtd>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>0.6141</m:mn></m:mrow></m:mtd>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>0.1068</m:mn></m:mrow></m:mtd>
</m:mtr><m:mtr>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>0.5362</m:mn></m:mrow></m:mtd>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>0.3073</m:mn></m:mrow></m:mtd>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>0.2935</m:mn></m:mrow></m:mtd>
   <m:mtd><m:mn>0.7293</m:mn></m:mtd>
</m:mtr><m:mtr>
   <m:mtd><m:mn>0.0956</m:mn></m:mtd>
   <m:mtd><m:mn>0.7467</m:mn></m:mtd>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>0.6463</m:mn></m:mrow></m:mtd>
   <m:mtd><m:mn>0.1249</m:mn></m:mtd>
</m:mtr>
</m:mtable></m:mfenced>
<m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div></div><div class="paramtext">The example program for F08QGF (DTRSEN) illustrates the computation of error bounds for the eigenvalues.</div><div class="paramtext">The original matrix <m:math><m:mi>A</m:mi></m:math>&#160;is given in <a class="sec" href="../F08/f08nff.xml#example">Section 9</a> in F08NFF (DORGHR).</div><h3 class="standard"><a class="sec" name="examtext" id="examtext"/>9.1&#160;&#160;Program Text</h3>
<p><a class="verbatimref" href="../../examples/source/f08qgfe.f90">Program Text (f08qgfe.f90)</a></p><h3 class="standard"><a class="sec" name="examdata" id="examdata"/>9.2&#160;&#160;Program Data</h3>
<p><a class="verbatimref" href="../../examples/data/f08qgfe.d">Program&#160;Data (f08qgfe.d)</a></p><h3 class="standard"><a class="sec" name="examresults" id="examresults"/>9.3&#160;&#160;Program Results</h3>
<p><a class="verbatimref" href="../../examples/baseresults/f08qgfe.r">Program Results (f08qgfe.r)</a></p>
<hr/><div><a class="rout" href="../../pdf/F08/f08qgf.pdf">F08QGF (DTRSEN) (PDF version)</a></div><div><a class="chap" href="f08conts.xml">F08 Chapter Contents</a></div><div><a class="chapint" href="f08intro.xml">F08 Chapter Introduction</a></div>
<div><a class="htmltoc" href="../FRONTMATTER/manconts.xml">NAG Library Manual</a></div>
<div><hr/><a class="genint" href="../FRONTMATTER/copyright.xml">&#169; The Numerical Algorithms Group Ltd, Oxford, UK. 2011</a></div></body></html>