<?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>F08NPF (ZGEEVX) : 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/f08npf.pdf">F08NPF (ZGEEVX) (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/>F08NPF (ZGEEVX)</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">F08NPF (ZGEEVX) computes the eigenvalues and, optionally, the left and/or right eigenvectors for an <m:math><m:mi>n</m:mi></m:math>&#160;by <m:math><m:mi>n</m:mi></m:math>&#160;complex nonsymmetric matrix <m:math><m:mi>A</m:mi></m:math>.</div><div class="paramtext">Optionally, it also computes a balancing transformation to improve the conditioning of the eigenvalues and eigenvectors, reciprocal condition numbers for the eigenvalues, and reciprocal condition numbers for the right eigenvectors.</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;F08NPF&#160;(</td>
<td class="tdfspec2" valign="top" align="left"><a class="arg" href="#BALANC">BALANC</a>, <a class="arg" href="#JOBVL">JOBVL</a>, <a class="arg" href="#JOBVR">JOBVR</a>, <a class="arg" href="#SENSE">SENSE</a>, <a class="arg" href="#N">N</a>, <a class="arg" href="#A">A</a>, <a class="arg" href="#LDA">LDA</a>, <a class="arg" href="#W">W</a>, <a class="arg" href="#VL">VL</a>, <a class="arg" href="#LDVL">LDVL</a>, <a class="arg" href="#VR">VR</a>, <a class="arg" href="#LDVR">LDVR</a>, <a class="arg" href="#ILO">ILO</a>, <a class="arg" href="#IHI">IHI</a>, <a class="arg" href="#SCALE">SCALE</a>, <a class="arg" href="#ABNRM">ABNRM</a>, <a class="arg" href="#RCONDE">RCONDE</a>, <a class="arg" href="#RCONDV">RCONDV</a>, <a class="arg" href="#WORK">WORK</a>, <a class="arg" href="#LWORK">LWORK</a>, <a class="arg" href="#RWORK">RWORK</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, LDA, LDVL, LDVR, ILO, IHI, 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">SCALE(*), ABNRM, RCONDE(*), RCONDV(*), RWORK(*)</td>
</tr>
<tr>
<td class="tdfspec1" valign="top" align="left">COMPLEX&#160;(KIND=nag_wp)&#160;</td>
<td class="tdfspec2" valign="top" align="left">A(LDA,*), W(*), VL(LDVL,*), VR(LDVR,*), 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">BALANC, JOBVL, JOBVR, SENSE</td></tr></tbody>
</table></div>
</td></tr></table>
<div class="paramtext">The routine may be called by its 
    LAPACK
    name <span class="bitalic">zgeevx</span>.</div><h2 class="standard"><a class="sec" name="description" id="description"/>3&#160;&#160;Description</h2>
<div class="paramtext">The right eigenvector <m:math><m:msub><m:mi>v</m:mi><m:mi>j</m:mi></m:msub></m:math>&#160;of <m:math><m:mi>A</m:mi></m:math>&#160;satisfies

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>A</m:mi>
 <m:msub><m:mi>v</m:mi><m:mi>j</m:mi></m:msub>
 <m:mo>=</m:mo>
 <m:msub><m:mo>&#955;</m:mo><m:mi>j</m:mi></m:msub>
 <m:msub><m:mi>v</m:mi><m:mi>j</m:mi></m:msub>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:msub><m:mo>&#955;</m:mo><m:mi>j</m:mi></m:msub></m:math>&#160;is the <m:math><m:mi>j</m:mi></m:math>th eigenvalue of <m:math><m:mi>A</m:mi></m:math>. The left eigenvector <m:math><m:msub><m:mi>u</m:mi><m:mi>j</m:mi></m:msub></m:math>&#160;of <m:math><m:mi>A</m:mi></m:math>&#160;satisfies

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:msubsup><m:mi>u</m:mi><m:mi>j</m:mi><m:mi mathvariant="normal">H</m:mi></m:msubsup>
 <m:mi>A</m:mi>
 <m:mo>=</m:mo>
 <m:msub><m:mo>&#955;</m:mo><m:mi>j</m:mi></m:msub>
 <m:msubsup><m:mi>u</m:mi><m:mi>j</m:mi><m:mi mathvariant="normal">H</m:mi></m:msubsup>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:msubsup><m:mi>u</m:mi><m:mi>j</m:mi><m:mi mathvariant="normal">H</m:mi></m:msubsup></m:math>&#160;denotes the conjugate transpose of <m:math><m:msub><m:mi>u</m:mi><m:mi>j</m:mi></m:msub></m:math>.</div><div class="paramtext">Balancing a matrix means permuting the rows and columns to make it more nearly upper triangular, and applying a diagonal similarity transformation <m:math><m:mi>D</m:mi><m:mi>A</m:mi><m:msup><m:mi>D</m:mi><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msup></m:math>, where <m:math><m:mi>D</m:mi></m:math>&#160;is a diagonal matrix, with the aim of making its rows and columns closer in norm and the condition numbers of its eigenvalues and eigenvectors smaller.  The computed reciprocal condition numbers correspond to the balanced matrix. Permuting rows and columns will not change the condition numbers (in exact arithmetic) but diagonal scaling will.  For further explanation of balancing, see Section 4.8.1.2 of <a class="ref" href="#ref252">Anderson <span class="italic">et al.</span> (1999)</a>.</div><div class="paramtext">Following the optional balancing, the matrix <m:math><m:mi>A</m:mi></m:math>&#160;is first reduced to upper Hessenberg form by means of unitary similarity transformations, and the <m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;algorithm is then used to further reduce the matrix to upper triangular Schur form, <m:math><m:mi>T</m:mi></m:math>, from which the eigenvalues are computed.  Optionally, the eigenvectors of <m:math><m:mi>T</m:mi></m:math>&#160;are also computed and backtransformed to those of <m:math><m:mi>A</m:mi></m:math>.</div><h2 class="standard"><a class="sec" name="references" id="references"/>4&#160;&#160;References</h2><div class="paramtext"><a name="ref252" id="ref252"/>Anderson E, Bai Z, Bischof C, Blackford S, Demmel J, Dongarra J J, Du Croz J J, Greenbaum A, Hammarling S, McKenney A and Sorensen D (1999)  <i>LAPACK Users' Guide</i> (3rd Edition) SIAM, Philadelphia <a class="url" href="http://www.netlib.org/lapack/lug">http://www.netlib.org/lapack/lug</a></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="BALANC" id="BALANC"/>1: &#160;&#160;&#8194; BALANC &#8211; CHARACTER(1)<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: indicates how the input matrix should be diagonally scaled and/or permuted to improve the conditioning of its eigenvalues.

<dl>
<dt class="paramval"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#BALANC"><m:mi mathcolor="#EE0000" mathvariant="bold">BALANC</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'N'</m:mtext></m:math></dt>
<dd>Do not diagonally scale or permute.</dd>
<dt class="paramval"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#BALANC"><m:mi mathcolor="#EE0000" mathvariant="bold">BALANC</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'P'</m:mtext></m:math></dt>
<dd>Perform permutations to make the matrix more nearly upper triangular. Do not diagonally scale.</dd>
<dt class="paramval"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#BALANC"><m:mi mathcolor="#EE0000" mathvariant="bold">BALANC</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'S'</m:mtext></m:math></dt>
<dd>Diagonally scale the matrix, i.e., replace <m:math><m:mi>A</m:mi></m:math>&#160;by <m:math><m:mi>D</m:mi><m:mi>A</m:mi><m:msup><m:mi>D</m:mi><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msup></m:math>, where <m:math><m:mi>D</m:mi></m:math>&#160;is a diagonal matrix chosen to make the rows and columns of <m:math><m:mi>A</m:mi></m:math>&#160;more equal in norm. Do not permute.</dd>
<dt class="paramval"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#BALANC"><m:mi mathcolor="#EE0000" mathvariant="bold">BALANC</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'B'</m:mtext></m:math></dt>
<dd>Both diagonally scale and permute <m:math><m:mi>A</m:mi></m:math>.</dd></dl>
<div class="paramtext">Computed reciprocal condition numbers will be for the matrix after balancing and/or permuting. Permuting does not change condition numbers (in exact arithmetic), but balancing does.</div>
</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#BALANC"><m:mi mathcolor="#EE0000" mathvariant="bold">BALANC</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'N'</m:mtext></m:math>, <m:math><m:mtext>'P'</m:mtext></m:math>, <m:math><m:mtext>'S'</m:mtext></m:math>&#160;or <m:math><m:mtext>'B'</m:mtext></m:math>.
</div>
</dd><dt class="paramhead"><a name="JOBVL" id="JOBVL"/>2: &#160;&#160;&#8194; JOBVL &#8211; CHARACTER(1)<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#JOBVL"><m:mi mathcolor="#EE0000" mathvariant="bold">JOBVL</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'N'</m:mtext></m:math>, the left eigenvectors of <m:math><m:mi>A</m:mi></m:math>&#160;are not computed.
<div class="paramtext">If <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#JOBVL"><m:mi mathcolor="#EE0000" mathvariant="bold">JOBVL</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'V'</m:mtext></m:math>, the left eigenvectors of <m:math><m:mi>A</m:mi></m:math>&#160;are computed.</div>
<div class="paramtext">If <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#SENSE"><m:mi mathcolor="#EE0000" mathvariant="bold">SENSE</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="#JOBVL">JOBVL</a> must be set to <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#JOBVL"><m:mi mathcolor="#EE0000" mathvariant="bold">JOBVL</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'V'</m:mtext></m:math>.</div>
</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#JOBVL"><m:mi mathcolor="#EE0000" mathvariant="bold">JOBVL</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>.
</div>
</dd><dt class="paramhead"><a name="JOBVR" id="JOBVR"/>3: &#160;&#160;&#8194; JOBVR &#8211; CHARACTER(1)<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#JOBVR"><m:mi mathcolor="#EE0000" mathvariant="bold">JOBVR</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'N'</m:mtext></m:math>, the right eigenvectors of <m:math><m:mi>A</m:mi></m:math>&#160;are not computed.
<div class="paramtext">If <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#JOBVR"><m:mi mathcolor="#EE0000" mathvariant="bold">JOBVR</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'V'</m:mtext></m:math>, the right eigenvectors of <m:math><m:mi>A</m:mi></m:math>&#160;are computed.</div>
<div class="paramtext">If <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#SENSE"><m:mi mathcolor="#EE0000" mathvariant="bold">SENSE</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="#JOBVR">JOBVR</a> must be set to <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#JOBVR"><m:mi mathcolor="#EE0000" mathvariant="bold">JOBVR</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'V'</m:mtext></m:math>.</div>
</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#JOBVR"><m:mi mathcolor="#EE0000" mathvariant="bold">JOBVR</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>.
</div>
</dd><dt class="paramhead"><a name="SENSE" id="SENSE"/>4: &#160;&#160;&#8194; SENSE &#8211; CHARACTER(1)<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: determines which reciprocal condition numbers are computed.

<dl>
<dt class="paramval"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#SENSE"><m:mi mathcolor="#EE0000" mathvariant="bold">SENSE</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'N'</m:mtext></m:math></dt>
<dd>None are computed.</dd>
<dt class="paramval"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#SENSE"><m:mi mathcolor="#EE0000" mathvariant="bold">SENSE</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'E'</m:mtext></m:math></dt>
<dd>Computed for eigenvalues only.</dd>
<dt class="paramval"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#SENSE"><m:mi mathcolor="#EE0000" mathvariant="bold">SENSE</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'V'</m:mtext></m:math></dt>
<dd>Computed for right eigenvectors only.</dd>
<dt class="paramval"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#SENSE"><m:mi mathcolor="#EE0000" mathvariant="bold">SENSE</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'B'</m:mtext></m:math></dt>
<dd>Computed for eigenvalues and right eigenvectors.</dd></dl>
<div class="paramtext">If <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#SENSE"><m:mi mathcolor="#EE0000" mathvariant="bold">SENSE</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>, both left and right eigenvectors must also be computed (<m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#JOBVL"><m:mi mathcolor="#EE0000" mathvariant="bold">JOBVL</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'V'</m:mtext></m:math>&#160;and <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#JOBVR"><m:mi mathcolor="#EE0000" mathvariant="bold">JOBVR</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'V'</m:mtext></m:math>).</div>
</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#SENSE"><m:mi mathcolor="#EE0000" mathvariant="bold">SENSE</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="N" id="N"/>5: &#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>A</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="A" id="A"/>6: &#160;&#160;&#8194; A(<a class="arg" href="#LDA">LDA</a>,<m:math><m:mo>*</m:mo></m:math>) &#8211; COMPLEX&#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="#A">A</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;matrix <m:math><m:mi>A</m:mi></m:math>.</div>
<div class="paramtext"><i>On exit</i>: <a class="arg" href="#A">A</a> has been overwritten. If <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#JOBVL"><m:mi mathcolor="#EE0000" mathvariant="bold">JOBVL</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'V'</m:mtext></m:math>&#160;or <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#JOBVR"><m:mi mathcolor="#EE0000" mathvariant="bold">JOBVR</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'V'</m:mtext></m:math>, <m:math><m:mi>A</m:mi></m:math>&#160;contains the
Schur
form of the balanced version of the
matrix
<m:math><m:mi>A</m:mi></m:math>.</div></dd><dt class="paramhead"><a name="LDA" id="LDA"/>7: &#160;&#160;&#8194; LDA &#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="#A">A</a> as declared in the (sub)program from which F08NPF (ZGEEVX) is called.</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#LDA"><m:mi mathcolor="#EE0000" mathvariant="bold">LDA</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="W" id="W"/>8: &#160;&#160;&#8194; W(<m:math><m:mo>*</m:mo></m:math>) &#8211; COMPLEX&#160;(KIND=nag_wp)&#160;array<span class="pclass">Output</span></dt><dd>
<div class="paramtext"><b>Note:</b> the dimension of the array <a class="arg" href="#W">W</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>: contains the computed eigenvalues.</div>
</dd><dt class="paramhead"><a name="VL" id="VL"/>9: &#160;&#160;&#8194; VL(<a class="arg" href="#LDVL">LDVL</a>,<m:math><m:mo>*</m:mo></m:math>) &#8211; COMPLEX&#160;(KIND=nag_wp)&#160;array<span class="pclass">Output</span></dt><dd>
<div class="paramtext"><b>Note:</b> the second dimension of the array <a class="arg" href="#VL">VL</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>: if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#JOBVL"><m:mi mathcolor="#EE0000" mathvariant="bold">JOBVL</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'V'</m:mtext></m:math>, the left eigenvectors <m:math><m:msub><m:mi>u</m:mi><m:mi>j</m:mi></m:msub></m:math>&#160;are stored one after another in the columns of <a class="arg" href="#VL">VL</a>, in the same order as their corresponding eigenvalues.
<div class="paramtext">If <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#JOBVL"><m:mi mathcolor="#EE0000" mathvariant="bold">JOBVL</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'N'</m:mtext></m:math>, <a class="arg" href="#VL">VL</a> is not referenced.</div>
<div class="paramtext"><m:math><m:msub><m:mi>u</m:mi><m:mi>j</m:mi></m:msub><m:mo>=</m:mo><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#VL"><m:mi mathcolor="#EE0000" mathvariant="bold">VL</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mrow><m:mo>:</m:mo><m:mo>,</m:mo><m:mi>j</m:mi></m:mrow></m:mfenced></m:mrow></m:math>, the <m:math><m:mi>j</m:mi></m:math>th column of <a class="arg" href="#VL">VL</a>.</div>
</div>
</dd><dt class="paramhead"><a name="LDVL" id="LDVL"/>10: &#8194; LDVL &#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="#VL">VL</a> as declared in the (sub)program from which F08NPF (ZGEEVX) 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="#JOBVL"><m:mi mathcolor="#EE0000" mathvariant="bold">JOBVL</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="#LDVL"><m:mi mathcolor="#EE0000" mathvariant="bold">LDVL</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">otherwise <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#LDVL"><m:mi mathcolor="#EE0000" mathvariant="bold">LDVL</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="VR" id="VR"/>11: &#8194; VR(<a class="arg" href="#LDVR">LDVR</a>,<m:math><m:mo>*</m:mo></m:math>) &#8211; COMPLEX&#160;(KIND=nag_wp)&#160;array<span class="pclass">Output</span></dt><dd>
<div class="paramtext"><b>Note:</b> the second dimension of the array <a class="arg" href="#VR">VR</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>: if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#JOBVR"><m:mi mathcolor="#EE0000" mathvariant="bold">JOBVR</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'V'</m:mtext></m:math>, the right eigenvectors <m:math><m:msub><m:mi>v</m:mi><m:mi>j</m:mi></m:msub></m:math>&#160;are stored one after another in the columns of <a class="arg" href="#VR">VR</a>, in the same order as their corresponding eigenvalues.
<div class="paramtext">If <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#JOBVR"><m:mi mathcolor="#EE0000" mathvariant="bold">JOBVR</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'N'</m:mtext></m:math>, <a class="arg" href="#VR">VR</a> is not referenced.</div>
<div class="paramtext"><m:math><m:msub><m:mi>v</m:mi><m:mi>j</m:mi></m:msub><m:mo>=</m:mo><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#VR"><m:mi mathcolor="#EE0000" mathvariant="bold">VR</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mrow><m:mo>:</m:mo><m:mo>,</m:mo><m:mi>j</m:mi></m:mrow></m:mfenced></m:mrow></m:math>, the <m:math><m:mi>j</m:mi></m:math>th column of <a class="arg" href="#VR">VR</a>.</div>
</div>
</dd><dt class="paramhead"><a name="LDVR" id="LDVR"/>12: &#8194; LDVR &#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="#VR">VR</a> as declared in the (sub)program from which F08NPF (ZGEEVX) 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="#JOBVR"><m:mi mathcolor="#EE0000" mathvariant="bold">JOBVR</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="#LDVR"><m:mi mathcolor="#EE0000" mathvariant="bold">LDVR</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">otherwise <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#LDVR"><m:mi mathcolor="#EE0000" mathvariant="bold">LDVR</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="ILO" id="ILO"/>13: &#8194; ILO &#8211; INTEGER<span class="pclass">Output</span></dt><dt class="multi-paramhead"><a name="IHI" id="IHI"/>14: &#8194; IHI &#8211; INTEGER<span class="pclass">Output</span></dt><dd>
<div class="paramtext"><i>On exit</i>: <a class="arg" href="#ILO">ILO</a> and <a class="arg" href="#IHI">IHI</a> are integer values determined when <m:math><m:mi>A</m:mi></m:math>&#160;was balanced. The balanced <m:math><m:mi>A</m:mi></m:math>&#160;has <m:math><m:msub><m:mi>a</m:mi><m:mrow><m:mi>i</m:mi><m:mi>j</m:mi></m:mrow></m:msub><m:mo>=</m:mo><m:mn>0</m:mn></m:math>&#160;if <m:math><m:mi>i</m:mi><m:mo>&gt;</m:mo><m:mi>j</m:mi></m:math>&#160;and <m:math><m:mi>j</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: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;or <m:math><m:mi>i</m:mi><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:mo>+</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><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:math>.</div>
</dd><dt class="paramhead"><a name="SCALE" id="SCALE"/>15: &#8194; SCALE(<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 array <a class="arg" href="#SCALE">SCALE</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>: details of the permutations and scaling factors applied when balancing <m:math><m:mi>A</m:mi></m:math>.
<div class="paramtext">If <m:math><m:msub><m:mi>p</m:mi><m:mi>j</m:mi></m:msub></m:math>&#160;is the index of the row and column interchanged with row and column <m:math><m:mi>j</m:mi></m:math>, and <m:math><m:msub><m:mi>d</m:mi><m:mi>j</m:mi></m:msub></m:math>&#160;is the scaling factor applied to row and column <m:math><m:mi>j</m:mi></m:math>, then 
<ul class="listind"><li class="listind"><m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#SCALE"><m:mi mathcolor="#EE0000" mathvariant="bold">SCALE</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi mathvariant="italic">j</m:mi></m:mfenced></m:mrow><m:mo>=</m:mo><m:msub><m:mi>p</m:mi><m:mi mathvariant="italic">j</m:mi></m:msub></m:math>, for <m:math><m:mi mathvariant="italic">j</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: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>;</li><li class="listind"><m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#SCALE"><m:mi mathcolor="#EE0000" mathvariant="bold">SCALE</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi mathvariant="italic">j</m:mi></m:mfenced></m:mrow><m:mo>=</m:mo><m:msub><m:mi>d</m:mi><m:mi mathvariant="italic">j</m:mi></m:msub></m:math>, for <m:math><m:mi mathvariant="italic">j</m:mi><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:mo>&#8230;</m:mo><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:math>;</li><li class="listind"><m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#SCALE"><m:mi mathcolor="#EE0000" mathvariant="bold">SCALE</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi mathvariant="italic">j</m:mi></m:mfenced></m:mrow><m:mo>=</m:mo><m:msub><m:mi>p</m:mi><m:mi mathvariant="italic">j</m:mi></m:msub></m:math>, for <m:math><m:mi mathvariant="italic">j</m:mi><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:mo>+</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><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:math>.</li></ul>
</div>
<div class="paramtext">The order in which the interchanges are made is <a class="arg" href="#N">N</a> to <m:math><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:mn>1</m:mn></m:math>, then <m:math><m:mn>1</m:mn></m:math>&#160;to <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>-</m:mo><m:mn>1</m:mn></m:math>.</div>
</div>
</dd><dt class="paramhead"><a name="ABNRM" id="ABNRM"/>16: &#8194; ABNRM &#8211; REAL&#160;(KIND=nag_wp)<span class="pclass">Output</span></dt><dd>
<div class="paramtext"><i>On exit</i>: the <m:math><m:mn>1</m:mn></m:math>-norm of the balanced matrix (the maximum of the sum of absolute values of elements of any column).</div>
</dd><dt class="paramhead"><a name="RCONDE" id="RCONDE"/>17: &#8194; RCONDE(<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 array <a class="arg" href="#RCONDE">RCONDE</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>: <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#RCONDE"><m:mi mathcolor="#EE0000" mathvariant="bold">RCONDE</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>j</m:mi></m:mfenced></m:mrow></m:math>&#160;is the reciprocal condition number of the <m:math><m:mi>j</m:mi></m:math>th eigenvalue.</div>
</dd><dt class="paramhead"><a name="RCONDV" id="RCONDV"/>18: &#8194; RCONDV(<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 array <a class="arg" href="#RCONDV">RCONDV</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>: <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#RCONDV"><m:mi mathcolor="#EE0000" mathvariant="bold">RCONDV</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>j</m:mi></m:mfenced></m:mrow></m:math>&#160;is the reciprocal condition number of the <m:math><m:mi>j</m:mi></m:math>th right eigenvector.</div>
</dd><dt class="paramhead"><a name="WORK" id="WORK"/>19: &#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; COMPLEX&#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>, the real part of <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"/>20: &#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 F08NPF (ZGEEVX) is called.

<div class="paramtext">If <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>, a workspace query is assumed; the routine only calculates the optimal size of the <a class="arg" href="#WORK">WORK</a> array, returns this value as the first entry of the <a class="arg" href="#WORK">WORK</a> array, and no error message related to <a class="arg" href="#LWORK">LWORK</a> is issued.</div></div>
<div class="paramtext"><i>Suggested value</i>:
  for optimal performance, <a class="arg" href="#LWORK">LWORK</a> must generally be larger than the minimum, increase <a class="arg" href="#LWORK">LWORK</a> by, say, <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>&#215;</m:mo><m:mi mathvariant="italic">nb</m:mi>
</m:math>, where <m:math>
 <m:mi mathvariant="italic">nb</m:mi>
</m:math>&#160;is the optimal <span class="bitalic">block size</span> for <a class="rout" href="../F08/f08nef.xml">F08NEF (DGEHRD)</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="#SENSE"><m:mi mathcolor="#EE0000" mathvariant="bold">SENSE</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="#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:mo>&#215;</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction></m:mrow></m:mfenced></m:mrow></m:math>;</li>
<li class="listcons">if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#SENSE"><m:mi mathcolor="#EE0000" mathvariant="bold">SENSE</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:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction><m:mo>&#215;</m:mo><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:mn>2</m:mn><m:mo>&#215;</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction></m:mrow></m:mfenced></m:mrow></m:math>.</li>
</ul></div>
</dd><dt class="paramhead"><a name="RWORK" id="RWORK"/>21: &#8194; RWORK(<m:math><m:mo>*</m:mo></m:math>) &#8211; REAL&#160;(KIND=nag_wp)&#160;array<span class="pclass">Workspace</span></dt><dd>
<div class="paramtext"><b>Note:</b> the dimension of the array <a class="arg" href="#RWORK">RWORK</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:mrow><m:mn>2</m:mn><m:mo>&#215;</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction></m:mrow></m:mfenced></m:mrow></m:math>.</div>
</dd><dt class="paramhead"><a name="INFO" id="INFO"/>22: &#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">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>, the <m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;algorithm failed to compute all the eigenvalues, and no eigenvectors or condition numbers have been computed; elements <m:math><m:mn>1</m:mn><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:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction></m:math>&#160;of 
<a class="arg" href="#W">W</a>  contain eigenvalues which have converged.</div></dd>
</dl><h2 class="standard"><a class="sec" name="accuracy" id="accuracy"/>7&#160;&#160;Accuracy</h2>
<div class="paramtext">The computed eigenvalues and eigenvectors are exact for a nearby matrix <m:math><m:mfenced separators=""><m:mi>A</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>A</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>. See Section 4.8 of <a class="ref" href="#ref252">Anderson <span class="italic">et al.</span> (1999)</a> for further details.</div><h2 class="standard"><a class="sec" name="fcomments" id="fcomments"/>8&#160;&#160;Further Comments</h2>
<div class="paramtext">Each eigenvector is normalized to have Euclidean norm equal to unity and the element of largest absolute value real and positive.</div><div class="paramtext">The total number of floating point operations is proportional to <m:math><m:msup><m:mi>n</m:mi><m:mn>3</m:mn></m:msup></m:math>.</div><div class="paramtext">The real analogue of this routine is <a class="rout" href="../F08/f08nbf.xml">F08NBF (DGEEVX)</a>.</div><h2 class="standard"><a class="sec" name="example" id="example"/>9&#160;&#160;Example</h2>
<div class="paramtext">This example finds all the eigenvalues and right eigenvectors of the matrix

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>A</m:mi>
 <m:mo>=</m:mo>
 <m:mfenced><m:mtable columnalign="right">
<m:mtr>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>3.97</m:mn></m:mrow><m:mo>-</m:mo><m:mn>5.04</m:mn><m:mi>i</m:mi></m:mtd>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>4.11</m:mn></m:mrow><m:mo>+</m:mo><m:mn>3.70</m:mn><m:mi>i</m:mi></m:mtd>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>0.34</m:mn></m:mrow><m:mo>+</m:mo><m:mn>1.01</m:mn><m:mi>i</m:mi></m:mtd>
   <m:mtd><m:mn>1.29</m:mn><m:mo>-</m:mo><m:mn>0.86</m:mn><m:mi>i</m:mi></m:mtd>
</m:mtr><m:mtr>
   <m:mtd><m:mn>0.34</m:mn><m:mo>-</m:mo><m:mn>1.50</m:mn><m:mi>i</m:mi></m:mtd>
   <m:mtd><m:mn>1.52</m:mn><m:mo>-</m:mo><m:mn>0.43</m:mn><m:mi>i</m:mi></m:mtd>
   <m:mtd><m:mn>1.88</m:mn><m:mo>-</m:mo><m:mn>5.38</m:mn><m:mi>i</m:mi></m:mtd>
   <m:mtd><m:mn>3.36</m:mn><m:mo>+</m:mo><m:mn>0.65</m:mn><m:mi>i</m:mi></m:mtd>
</m:mtr><m:mtr>
   <m:mtd><m:mn>3.31</m:mn><m:mo>-</m:mo><m:mn>3.85</m:mn><m:mi>i</m:mi></m:mtd>
   <m:mtd><m:mn>2.50</m:mn><m:mo>+</m:mo><m:mn>3.45</m:mn><m:mi>i</m:mi></m:mtd>
   <m:mtd><m:mn>0.88</m:mn><m:mo>-</m:mo><m:mn>1.08</m:mn><m:mi>i</m:mi></m:mtd>
   <m:mtd><m:mn>0.64</m:mn><m:mo>-</m:mo><m:mn>1.48</m:mn><m:mi>i</m:mi></m:mtd>
</m:mtr><m:mtr>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>1.10</m:mn></m:mrow><m:mo>+</m:mo><m:mn>0.82</m:mn><m:mi>i</m:mi></m:mtd>
   <m:mtd><m:mn>1.81</m:mn><m:mo>-</m:mo><m:mn>1.59</m:mn><m:mi>i</m:mi></m:mtd>
   <m:mtd><m:mn>3.25</m:mn><m:mo>+</m:mo><m:mn>1.33</m:mn><m:mi>i</m:mi></m:mtd>
   <m:mtd><m:mn>1.57</m:mn><m:mo>-</m:mo><m:mn>3.44</m:mn><m:mi>i</m:mi></m:mtd>
</m:mtr>
</m:mtable></m:mfenced>
 <m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

together with estimates of the condition number and forward error bounds for each eigenvalue and eigenvector.  The option to balance the matrix is used. In order to compute the condition numbers of the eigenvalues, the left eigenvectors also have to be computed, but they are not printed out in this example.</div><div class="paramtext">Note that the block size (NB) of <m:math><m:mn>64</m:mn></m:math>&#160;assumed in this example is not realistic for such a small problem, but should be suitable for large problems.</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/f08npfe.f90">Program Text (f08npfe.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/f08npfe.d">Program&#160;Data (f08npfe.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/f08npfe.r">Program Results (f08npfe.r)</a></p>
<hr/><div><a class="rout" href="../../pdf/F08/f08npf.pdf">F08NPF (ZGEEVX) (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>