<?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>F08PEF (DHSEQR) : 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/f08pef.pdf">F08PEF (DHSEQR) (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/>F08PEF (DHSEQR)</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="paramtext"><div class="header"><b>Warning.</b> The specification of the parameter <a class="arg" href="#LWORK">LWORK</a> changed at Mark 20: <a class="arg" href="#LWORK">LWORK</a> is no longer redundant.</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">F08PEF (DHSEQR) computes all the eigenvalues and, optionally, the Schur factorization of a real Hessenberg matrix or a real general matrix which has been reduced to Hessenberg form.</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;F08PEF&#160;(</td>
<td class="tdfspec2" valign="top" align="left"><a class="arg" href="#JOB">JOB</a>, <a class="arg" href="#COMPZ">COMPZ</a>, <a class="arg" href="#N">N</a>, <a class="arg" href="#ILO">ILO</a>, <a class="arg" href="#IHI">IHI</a>, <a class="arg" href="#H">H</a>, <a class="arg" href="#LDH">LDH</a>, <a class="arg" href="#WR">WR</a>, <a class="arg" href="#WI">WI</a>, <a class="arg" href="#Z">Z</a>, <a class="arg" href="#LDZ">LDZ</a>, <a class="arg" href="#WORK">WORK</a>, <a class="arg" href="#LWORK">LWORK</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, ILO, IHI, LDH, LDZ, LWORK, 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">H(LDH,*), WR(*), WI(*), Z(LDZ,*), WORK(max(1,LWORK))</td>
</tr><tr>
<td class="tdfspec1" valign="top" align="left">CHARACTER(1)&#160;</td>
<td class="tdfspec2" valign="top" align="left">JOB, COMPZ</td></tr></tbody>
</table></div>
</td></tr></table>
<div class="paramtext">The routine may be called by its 
    LAPACK
    name <span class="bitalic">dhseqr</span>.</div><h2 class="standard"><a class="sec" name="description" id="description"/>3&#160;&#160;Description</h2>
<div class="paramtext">F08PEF (DHSEQR) computes all the eigenvalues and, optionally, the Schur factorization of a real upper Hessenberg matrix <m:math><m:mi>H</m:mi></m:math>:

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>H</m:mi>
 <m:mo>=</m:mo>
 <m:mi>Z</m:mi><m:mi>T</m:mi><m:msup><m:mi>Z</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup>
 <m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:mi>T</m:mi></m:math>&#160;is an upper quasi-triangular matrix (the Schur form of <m:math><m:mi>H</m:mi></m:math>), and <m:math><m:mi>Z</m:mi></m:math>&#160;is the orthogonal matrix whose columns are the Schur vectors <m:math><m:msub><m:mi>z</m:mi><m:mi>i</m:mi></m:msub></m:math>.  See <a class="sec" href="#fcomments">Section 8</a> for details of the structure of <m:math><m:mi>T</m:mi></m:math>.</div><div class="paramtext">The routine may also be used to compute the Schur factorization of a real general matrix <m:math><m:mi>A</m:mi></m:math>&#160;which has been reduced to upper Hessenberg form <m:math><m:mi>H</m:mi></m:math>:

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mtable columnalign="left">
 <m:mtr>
   <m:mtd><m:mi>A</m:mi></m:mtd>
    <m:mtd><m:mo>=</m:mo></m:mtd>
   <m:mtd><m:mi>Q</m:mi><m:mi>H</m:mi><m:msup><m:mi>Q</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mtext>, where &#8203;</m:mtext><m:mi>Q</m:mi><m:mtext>&#8203; is orthogonal,</m:mtext></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd/>
   <m:mtd><m:mo>=</m:mo></m:mtd>
   <m:mtd><m:mfenced separators=""><m:mi>Q</m:mi><m:mi>Z</m:mi></m:mfenced><m:mi>T</m:mi><m:msup><m:mfenced separators=""><m:mi>Q</m:mi><m:mi>Z</m:mi></m:mfenced><m:mi mathvariant="normal">T</m:mi></m:msup><m:mtext>.</m:mtext></m:mtd>
  </m:mtr>
 </m:mtable>
</m:math></td><td class="formula2"/></tr></table></div>

In this case, after <a class="rout" href="../F08/f08nef.xml">F08NEF (DGEHRD)</a> has been called to reduce <m:math><m:mi>A</m:mi></m:math>&#160;to Hessenberg form, <a class="rout" href="../F08/f08nff.xml">F08NFF (DORGHR)</a> must be called to form <m:math><m:mi>Q</m:mi></m:math>&#160;explicitly; <m:math><m:mi>Q</m:mi></m:math>&#160;is then passed to F08PEF (DHSEQR), which must be called with <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#COMPZ"><m:mi mathcolor="#EE0000" mathvariant="bold">COMPZ</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'V'</m:mtext></m:math>.</div><div class="paramtext">The routine can also take advantage of a previous call to <a class="rout" href="../F08/f08nhf.xml">F08NHF (DGEBAL)</a> which may have balanced the original matrix before reducing it to Hessenberg form, so that the Hessenberg matrix <m:math><m:mi>H</m:mi></m:math>&#160;has the structure:

<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:mi>H</m:mi><m:mn>11</m:mn></m:msub></m:mtd>
   <m:mtd><m:msub><m:mi>H</m:mi><m:mn>12</m:mn></m:msub></m:mtd>
   <m:mtd><m:msub><m:mi>H</m:mi><m:mn>13</m:mn></m:msub></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd/>
   <m:mtd><m:msub><m:mi>H</m:mi><m:mn>22</m:mn></m:msub></m:mtd>
   <m:mtd><m:msub><m:mi>H</m:mi><m:mn>23</m:mn></m:msub></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd/>
   <m:mtd/>
   <m:mtd><m:msub><m:mi>H</m:mi><m:mn>33</m:mn></m:msub></m:mtd>
  </m:mtr>
 </m:mtable></m:mfenced>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:msub><m:mi>H</m:mi><m:mn>11</m:mn></m:msub></m:math>&#160;and <m:math><m:msub><m:mi>H</m:mi><m:mn>33</m:mn></m:msub></m:math>&#160;are upper triangular.  If so, only the central diagonal block <m:math><m:msub><m:mi>H</m:mi><m:mn>22</m:mn></m:msub></m:math>&#160;(in rows and columns <m:math><m:msub><m:mi>i</m:mi><m:mi mathvariant="normal">lo</m:mi></m:msub></m:math>&#160;to <m:math><m:msub><m:mi>i</m:mi><m:mi mathvariant="normal">hi</m:mi></m:msub></m:math>) needs to be further reduced to Schur form (the blocks <m:math><m:msub><m:mi>H</m:mi><m:mn>12</m:mn></m:msub></m:math>&#160;and <m:math><m:msub><m:mi>H</m:mi><m:mn>23</m:mn></m:msub></m:math>&#160;are also affected).  Therefore the values of <m:math><m:msub><m:mi>i</m:mi><m:mi mathvariant="normal">lo</m:mi></m:msub></m:math>&#160;and <m:math><m:msub><m:mi>i</m:mi><m:mi mathvariant="normal">hi</m:mi></m:msub></m:math>&#160;can be supplied to F08PEF (DHSEQR) directly.  Also, <a class="rout" href="../F08/f08njf.xml">F08NJF (DGEBAK)</a> must be called after this routine to permute the Schur vectors of the balanced matrix to those of the original matrix.  If <a class="rout" href="../F08/f08nhf.xml">F08NHF (DGEBAL)</a> has not been called however, then <m:math><m:msub><m:mi>i</m:mi><m:mi mathvariant="normal">lo</m:mi></m:msub></m:math>&#160;must be set to <m:math><m:mn>1</m:mn></m:math>&#160;and <m:math><m:msub><m:mi>i</m:mi><m:mi mathvariant="normal">hi</m:mi></m:msub></m:math>&#160;to <m:math><m:mi>n</m:mi></m:math>.  Note that if the Schur factorization of <m:math><m:mi>A</m:mi></m:math>&#160;is required, <a class="rout" href="../F08/f08nhf.xml">F08NHF (DGEBAL)</a> must <b>not</b> be called with <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>'S'</m:mtext></m:math>&#160;or <m:math><m:mtext>'B'</m:mtext></m:math>, because the balancing transformation is not orthogonal.</div><div class="paramtext">F08PEF (DHSEQR) uses a multishift form of the upper Hessenberg <m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;algorithm, due to <a class="ref" href="#ref455">Bai and Demmel (1989)</a>.  The Schur vectors are normalized so that <m:math><m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:msub><m:mi>z</m:mi><m:mi>i</m:mi></m:msub></m:mfenced><m:mn>2</m:mn></m:msub><m:mo>=</m:mo><m:mn>1</m:mn></m:math>, but are determined only to within a factor <m:math><m:mrow><m:mo>&#177;</m:mo><m:mn>1</m:mn></m:mrow></m:math>.</div><h2 class="standard"><a class="sec" name="references" id="references"/>4&#160;&#160;References</h2><div class="paramtext"><a name="ref455" id="ref455"/>Bai Z and Demmel J W (1989)  On a block implementation of Hessenberg multishift <m:math><m:mrow><m:mi>Q</m:mi><m:mi>R</m:mi></m:mrow></m:math>&#160;iteration <i>Internat. J. High Speed Comput.</i> <b>1</b> 97&#8211;112 </div>
<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 eigenvalues only or the Schur form <m:math><m:mi>T</m:mi></m:math>&#160;is required.

<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>'E'</m:mtext></m:math></dt>
<dd>Eigenvalues only 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>'S'</m:mtext></m:math></dt>
<dd>The Schur form <m:math><m:mi>T</m:mi></m:math>&#160;is required.</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>'E'</m:mtext></m:math>&#160;or <m:math><m:mtext>'S'</m:mtext></m:math>.
</div>
</dd><dt class="paramhead"><a name="COMPZ" id="COMPZ"/>2: &#160;&#160;&#8194; COMPZ &#8211; CHARACTER(1)<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: indicates whether the
Schur vectors
are to be computed.

<dl>
<dt class="paramval"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#COMPZ"><m:mi mathcolor="#EE0000" mathvariant="bold">COMPZ</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'N'</m:mtext></m:math></dt>
<dd>No Schur vectors
are computed (and the array <a class="arg" href="#Z">Z</a> is not referenced).</dd>
<dt class="paramval"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#COMPZ"><m:mi mathcolor="#EE0000" mathvariant="bold">COMPZ</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'I'</m:mtext></m:math></dt>
<dd>The
Schur vectors of <m:math><m:mi>H</m:mi></m:math>&#160;are computed (and the array <a class="arg" href="#Z">Z</a> is initialized by the routine).</dd>
<dt class="paramval"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#COMPZ"><m:mi mathcolor="#EE0000" mathvariant="bold">COMPZ</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'V'</m:mtext></m:math></dt>
<dd>The
Schur vectors
of <m:math><m:mi>A</m:mi></m:math>&#160;are computed (and the array <a class="arg" href="#Z">Z</a> must contain the matrix <m:math><m:mi>Q</m:mi></m:math>&#160;on entry).</dd></dl>
</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#COMPZ"><m:mi mathcolor="#EE0000" mathvariant="bold">COMPZ</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'N'</m:mtext></m:math>, <m:math><m:mtext>'V'</m:mtext></m:math>&#160;or <m:math><m:mtext>'I'</m:mtext></m:math>.
</div>
</dd><dt class="paramhead"><a name="N" id="N"/>3: &#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>H</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="ILO" id="ILO"/>4: &#160;&#160;&#8194; ILO &#8211; INTEGER<span class="pclass">Input</span></dt><dt class="multi-paramhead"><a name="IHI" id="IHI"/>5: &#160;&#160;&#8194; IHI &#8211; INTEGER<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: if the matrix <m:math><m:mi>A</m:mi></m:math>&#160;has been balanced by
<a class="rout" href="../F08/f08nhf.xml">F08NHF (DGEBAL)</a>, then <a class="arg" href="#ILO">ILO</a> and <a class="arg" href="#IHI">IHI</a> must contain the values returned by that routine. Otherwise, <a class="arg" href="#ILO">ILO</a> must be set to <m:math><m:mn>1</m:mn></m:math>&#160;and <a class="arg" href="#IHI">IHI</a> to <a class="arg" href="#N">N</a>.</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#ILO"><m:mi mathcolor="#EE0000" mathvariant="bold">ILO</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mn>1</m:mn></m:math>&#160;and <m:math><m:mrow><m:mi>min</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:maction actiontype="link" dsi:type="simple" dsi:href="#ILO"><m:mi mathcolor="#EE0000" mathvariant="bold">ILO</m:mi></m:maction><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:mo>&#8804;</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#IHI"><m:mi mathcolor="#EE0000" mathvariant="bold">IHI</m:mi></m:maction><m:mo>&#8804;</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction></m:math>.
</div>
</dd><dt class="paramhead"><a name="H" id="H"/>6: &#160;&#160;&#8194; H(<a class="arg" href="#LDH">LDH</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="#H">H</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 Hessenberg matrix <m:math><m:mi>H</m:mi></m:math>, as returned by
<a class="rout" href="../F08/f08nef.xml">F08NEF (DGEHRD)</a>.</div>
<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>, the array contains no useful information.
<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>'S'</m:mtext></m:math>, <a class="arg" href="#H">H</a> is overwritten by the upper
quasi-triangular
matrix <m:math><m:mi>T</m:mi></m:math>&#160;from the Schur decomposition (the Schur form) unless <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>&gt;</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>.</div>
</div>
</dd><dt class="paramhead"><a name="LDH" id="LDH"/>7: &#160;&#160;&#8194; LDH &#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="#H">H</a> as declared in the (sub)program from which F08PEF (DHSEQR) is called.</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#LDH"><m:mi mathcolor="#EE0000" mathvariant="bold">LDH</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="WR" id="WR"/>8: &#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"/>9: &#160;&#160;&#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 computed eigenvalues, unless <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>&gt;</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>&#160;(in which case see <a class="sec" href="#errors">Section 6</a>). Complex conjugate pairs of eigenvalues appear consecutively with the eigenvalue having positive imaginary part first. The eigenvalues are stored in the same order as on the diagonal of the Schur form <m:math><m:mi>T</m:mi></m:math>&#160;(if computed); see <a class="sec" href="#fcomments">Section 8</a> for details.</div>
</dd><dt class="paramhead"><a name="Z" id="Z"/>10: &#8194; Z(<a class="arg" href="#LDZ">LDZ</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="#Z">Z</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="#COMPZ"><m:mi mathcolor="#EE0000" mathvariant="bold">COMPZ</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'V'</m:mtext></m:math>&#160;or <m:math><m:mtext>'I'</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="#COMPZ"><m:mi mathcolor="#EE0000" mathvariant="bold">COMPZ</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="#COMPZ"><m:mi mathcolor="#EE0000" mathvariant="bold">COMPZ</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'V'</m:mtext></m:math>, <a class="arg" href="#Z">Z</a> must contain the orthogonal matrix <m:math><m:mi>Q</m:mi></m:math>&#160;from the reduction to Hessenberg form.
<div class="paramtext">If <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#COMPZ"><m:mi mathcolor="#EE0000" mathvariant="bold">COMPZ</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'I'</m:mtext></m:math>, <a class="arg" href="#Z">Z</a> need not be set.</div>
</div>
<div class="paramtext"><i>On exit</i>: if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#COMPZ"><m:mi mathcolor="#EE0000" mathvariant="bold">COMPZ</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'V'</m:mtext></m:math>&#160;or <m:math><m:mtext>'I'</m:mtext></m:math>, <a class="arg" href="#Z">Z</a> contains the orthogonal matrix of the required Schur vectors, unless <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>&gt;</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>.
<div class="paramtext">If <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#COMPZ"><m:mi mathcolor="#EE0000" mathvariant="bold">COMPZ</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'N'</m:mtext></m:math>, <a class="arg" href="#Z">Z</a> is not referenced.</div>
</div>
</dd><dt class="paramhead"><a name="LDZ" id="LDZ"/>11: &#8194; LDZ &#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="#Z">Z</a> as declared in the (sub)program from which F08PEF (DHSEQR) 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="#COMPZ"><m:mi mathcolor="#EE0000" mathvariant="bold">COMPZ</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'V'</m:mtext></m:math>&#160;or <m:math><m:mtext>'I'</m:mtext></m:math>, <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#LDZ"><m:mi mathcolor="#EE0000" mathvariant="bold">LDZ</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="#COMPZ"><m:mi mathcolor="#EE0000" mathvariant="bold">COMPZ</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="#LDZ"><m:mi mathcolor="#EE0000" mathvariant="bold">LDZ</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="WORK" id="WORK"/>12: &#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"/>13: &#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 F08PEF (DHSEQR) 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>Constraint</i>:
  <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>.
</div>
</dd><dt class="paramhead"><a name="INFO" id="INFO"/>14: &#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="INgt0" id="INgt0"/><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>&gt;</m:mo><m:mn>0</m:mn></m:math></dt>
<dd><div class="paramtext">The algorithm has failed to find all the eigenvalues after a total of <m:math><m:mn>30</m:mn><m:mo>&#215;</m:mo><m:mfenced separators=""><m:maction actiontype="link" dsi:type="simple" dsi:href="#IHI"><m:mi mathcolor="#EE0000" mathvariant="bold">IHI</m:mi></m:maction><m:mo>-</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#ILO"><m:mi mathcolor="#EE0000" mathvariant="bold">ILO</m:mi></m:maction><m:mo>+</m:mo><m:mn>1</m:mn></m:mfenced></m:math>&#160;iterations.  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:mi>i</m:mi></m:math>, elements <m:math><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:maction actiontype="link" dsi:type="simple" dsi:href="#ILO"><m:mi mathcolor="#EE0000" mathvariant="bold">ILO</m:mi></m:maction><m:mo>-</m:mo><m:mn>1</m:mn></m:math>&#160;and <m:math><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>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:mi>n</m:mi></m:math>&#160;of
<a class="arg" href="#WR">WR</a> and <a class="arg" href="#WI">WI</a> contain the real and imaginary parts of contain the eigenvalues which have been found.</div>
<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>'E'</m:mtext></m:math>, then on exit, the remaining unconverged eigenvalues are the eigenvalues of the upper Hessenberg matrix 
<m:math><m:mover><m:mi>H</m:mi><m:mo>^</m:mo></m:mover></m:math>, formed from <m:math>
 <m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#H"><m:mi mathcolor="#EE0000" mathvariant="bold">H</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#ILO"><m:mi mathcolor="#EE0000" mathvariant="bold">ILO</m:mi></m:maction><m:mo>:</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#INFO"><m:mi mathcolor="#EE0000" mathvariant="bold">INFO</m:mi></m:maction></m:mrow><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#ILO"><m:mi mathcolor="#EE0000" mathvariant="bold">ILO</m:mi></m:maction><m:mo>:</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#INFO"><m:mi mathcolor="#EE0000" mathvariant="bold">INFO</m:mi></m:maction></m:mrow></m:mfenced></m:mrow>
</m:math>, i.e., the <a class="arg" href="#ILO">ILO</a> through <a class="arg" href="#INFO">INFO</a> rows and columns of the final output matrix <m:math><m:mi>H</m:mi></m:math>.</div>
<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>'S'</m:mtext></m:math>, then on exit 

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mfenced separators=""><m:mo>*</m:mo></m:mfenced>
 <m:mtext>&#8195;</m:mtext>
 <m:msub><m:mi>H</m:mi><m:mi>i</m:mi></m:msub>
 <m:mi>U</m:mi>
 <m:mo>=</m:mo>
 <m:mi>U</m:mi>
 <m:mover><m:mi>H</m:mi><m:mo>~</m:mo></m:mover>
</m:math></td><td class="formula2"/></tr></table></div>

for some matrix <m:math><m:mi>U</m:mi></m:math>, where <m:math><m:msub><m:mi>H</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;is the input upper Hessenberg matrix and <m:math><m:mover><m:mi>H</m:mi><m:mo>~</m:mo></m:mover></m:math>&#160;is an upper Hessenberg matrix formed from <m:math>
 <m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#H"><m:mi mathcolor="#EE0000" mathvariant="bold">H</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mrow><m:mrow><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:mrow><m:mo>:</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#IHI"><m:mi mathcolor="#EE0000" mathvariant="bold">IHI</m:mi></m:maction></m:mrow><m:mrow><m:mrow><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:mrow><m:mo>:</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#IHI"><m:mi mathcolor="#EE0000" mathvariant="bold">IHI</m:mi></m:maction></m:mrow></m:mfenced></m:mrow>
</m:math>.</div>
<div class="paramtext">If <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#COMPZ"><m:mi mathcolor="#EE0000" mathvariant="bold">COMPZ</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'V'</m:mtext></m:math>, then on exit

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:msub><m:mi>Z</m:mi><m:mi mathvariant="normal">out</m:mi></m:msub>
 <m:mo>=</m:mo>
 <m:msub><m:mi>Z</m:mi><m:mi mathvariant="normal">in</m:mi></m:msub>
 <m:mi>U</m:mi>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:mi>U</m:mi></m:math>&#160;is defined in <m:math><m:mfenced separators=""><m:mo>*</m:mo></m:mfenced></m:math>&#160;(regardless of the value of <a class="arg" href="#JOB">JOB</a>).
</div>
<div class="paramtext">If <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#COMPZ"><m:mi mathcolor="#EE0000" mathvariant="bold">COMPZ</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'I'</m:mtext></m:math>, then on exit 

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:msub><m:mi>Z</m:mi><m:mi mathvariant="normal">out</m:mi></m:msub>
 <m:mo>=</m:mo>
 <m:mi>U</m:mi>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:mi>U</m:mi></m:math>&#160;is defined in <m:math><m:mfenced separators=""><m:mo>*</m:mo></m:mfenced></m:math>&#160;(regardless of the value of <a class="arg" href="#JOB">JOB</a>).</div>
<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>&gt;</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>&#160;and <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#COMPZ"><m:mi mathcolor="#EE0000" mathvariant="bold">COMPZ</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'N'</m:mtext></m:math>, then <a class="arg" href="#Z">Z</a> is not accessed.</div></dd>
</dl><h2 class="standard"><a class="sec" name="accuracy" id="accuracy"/>7&#160;&#160;Accuracy</h2>
<div class="paramtext">The computed Schur factorization is the exact factorization of a nearby matrix <m:math><m:mfenced separators=""><m:mi>H</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>H</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">If <m:math><m:msub><m:mi>&#955;</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;is an exact eigenvalue, and <m:math><m:msub><m:mover><m:mi>&#955;</m:mi><m:mo>~</m:mo></m:mover><m:mi>i</m:mi></m:msub></m:math>&#160;is the corresponding computed value, then

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mfenced open="|" close="|" separators="">
  <m:msub><m:mover><m:mi>&#955;</m:mi><m:mo>~</m:mo></m:mover><m:mi>i</m:mi></m:msub>
  <m:mo>-</m:mo>
  <m:msub><m:mi>&#955;</m:mi><m:mi>i</m:mi></m:msub>
 </m:mfenced>
 <m:mo>&#8804;</m:mo>
 <m:mfrac>
  <m:mrow>
   <m:mi>c</m:mi>
   <m:mfenced separators=""><m:mi>n</m:mi></m:mfenced>
   <m:mi>&#949;</m:mi>
   <m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>H</m:mi></m:mfenced><m:mn>2</m:mn></m:msub>
  </m:mrow>
  <m:msub><m:mi>s</m:mi><m:mi>i</m:mi></m:msub>
 </m:mfrac>
 <m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:mi>c</m:mi><m:mfenced separators=""><m:mi>n</m:mi></m:mfenced></m:math>&#160;is a modestly increasing function of <m:math><m:mi>n</m:mi></m:math>, and <m:math><m:msub><m:mi>s</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;is the reciprocal condition number of <m:math><m:msub><m:mi>&#955;</m:mi><m:mi>i</m:mi></m:msub></m:math>.  The condition numbers <m:math><m:msub><m:mi>s</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;may be computed by calling <a class="rout" href="../F08/f08qlf.xml">F08QLF (DTRSNA)</a>.</div><h2 class="standard"><a class="sec" name="fcomments" id="fcomments"/>8&#160;&#160;Further Comments</h2>
<div class="paramtext">The total number of floating point operations depends on how rapidly the algorithm converges, but is typically about:
<ul class="listind"><li class="listind"><m:math><m:mn>7</m:mn><m:msup><m:mi>n</m:mi><m:mn>3</m:mn></m:msup></m:math>&#160;if only eigenvalues are computed;</li><li class="listind"><m:math><m:mn>10</m:mn><m:msup><m:mi>n</m:mi><m:mn>3</m:mn></m:msup></m:math>&#160;if the Schur form is computed;</li><li class="listind"><m:math><m:mn>20</m:mn><m:msup><m:mi>n</m:mi><m:mn>3</m:mn></m:msup></m:math>&#160;if the full Schur factorization is computed.</li></ul>
</div><div class="paramtext">The Schur form <m:math><m:mi>T</m:mi></m:math>&#160;has the following structure (referred to as <b>canonical</b> Schur form).</div><div class="paramtext">If all the computed eigenvalues are real, <m:math><m:mi>T</m:mi></m:math>&#160;is upper triangular, and the diagonal elements of <m:math><m:mi>T</m:mi></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:mi>t</m:mi><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>, 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:mi>T</m:mi></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:mi>t</m:mi><m:mrow><m:mi>i</m:mi><m:mi>i</m:mi></m:mrow></m:msub></m:mtd>
   <m:mtd><m:msub><m:mi>t</m:mi><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:mi>t</m:mi><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:mi>t</m:mi><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: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: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/f08psf.xml">F08PSF (ZHSEQR)</a>.</div><h2 class="standard"><a class="sec" name="example" id="example"/>9&#160;&#160;Example</h2>
<div class="paramtext">This example computes all the eigenvalues and the Schur factorization of the upper Hessenberg matrix <m:math><m:mi>H</m:mi></m:math>, where

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>H</m:mi>
 <m:mo>=</m:mo>
 <m:mfenced><m:mtable columnalign="right">
<m:mtr>
   <m:mtd><m:mn>0.3500</m:mn></m:mtd>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>0.1160</m:mn></m:mrow></m:mtd>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>0.3886</m:mn></m:mrow></m:mtd>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>0.2942</m:mn></m:mrow></m:mtd>
</m:mtr><m:mtr>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>0.5140</m:mn></m:mrow></m:mtd>
   <m:mtd><m:mn>0.1225</m:mn></m:mtd>
   <m:mtd><m:mn>0.1004</m:mn></m:mtd>
   <m:mtd><m:mn>0.1126</m:mn></m:mtd>
</m:mtr><m:mtr>
   <m:mtd><m:mn>0.0000</m:mn></m:mtd>
   <m:mtd><m:mn>0.6443</m:mn></m:mtd>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>0.1357</m:mn></m:mrow></m:mtd>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>0.0977</m:mn></m:mrow></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.4262</m:mn></m:mtd>
   <m:mtd><m:mn>0.1632</m:mn></m:mtd>
</m:mtr>
</m:mtable></m:mfenced>
<m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

See also <a class="sec" href="../F08/f08nff.xml#example">Section 9</a> in F08NFF (DORGHR), which illustrates the use of this routine to compute the Schur factorization of a general matrix.</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/f08pefe.f90">Program Text (f08pefe.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/f08pefe.d">Program&#160;Data (f08pefe.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/f08pefe.r">Program Results (f08pefe.r)</a></p>
<hr/><div><a class="rout" href="../../pdf/F08/f08pef.pdf">F08PEF (DHSEQR) (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>