<?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>F02GCF : NAG Library, Mark 22</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/F02/f02gcf.pdf">F02GCF (PDF version)</a></div><div><a class="chap" href="f02conts.xml">F02 Chapter Contents</a></div><div><a class="chapint" href="f02intro.xml">F02 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/>F02GCF</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">F02GCF computes selected eigenvalues and eigenvectors of a complex general matrix.</div><h2 class="standard"><a class="sec" name="specification" id="specification"/>2&#160;&#160;Specification</h2>
<table class="fspec"><tr><td class="tdfspec1">SUBROUTINE&#160;F02GCF&#160;(</td><td class="tdfspec2"><a class="arg" href="#CRIT">CRIT</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="#WL">WL</a>, <a class="arg" href="#WU">WU</a>, <a class="arg" href="#MEST">MEST</a>, <a class="arg" href="#M">M</a>, <a class="arg" href="#W">W</a>, <a class="arg" href="#V">V</a>, <a class="arg" href="#LDV">LDV</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="#IWORK">IWORK</a>, <a class="arg" href="#BWORK">BWORK</a>, <a class="arg" href="#IFAIL">IFAIL</a>)</td></tr><tr><td class="tdfspec1">INTEGER</td><td class="tdfspec2">N, LDA, MEST, M, LDV, LWORK, IWORK(N), IFAIL</td></tr><tr><td class="tdfspec1"><b><i>double&#160;precision</i></b></td><td class="tdfspec2">WL, WU, RWORK(2*N)</td></tr><tr><td class="tdfspec1"><b><i>complex*16</i></b></td><td class="tdfspec2">A(LDA,*), W(N), V(LDV,MEST), WORK(LWORK)</td></tr><tr><td class="tdfspec1">LOGICAL</td><td class="tdfspec2">BWORK(N)</td></tr><tr><td class="tdfspec1">CHARACTER*1</td><td class="tdfspec2">CRIT</td></tr></table><h2 class="standard"><a class="sec" name="description" id="description"/>3&#160;&#160;Description</h2>
<div class="paramtext">F02GCF computes selected eigenvalues and the corresponding right eigenvectors of a complex general matrix <m:math><m:mi>A</m:mi></m:math>:

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:mi>A</m:mi><m:msub><m:mi>x</m:mi><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:msub><m:mi>x</m:mi><m:mi>i</m:mi></m:msub><m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

Eigenvalues <m:math><m:msub><m:mi>&#955;</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;may be selected either by  <span class="italic">modulus</span>, satisfying

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:msub><m:mi>w</m:mi><m:mi>l</m:mi></m:msub><m:mo>&#8804;</m:mo><m:mfenced open="|" close="|" separators=""><m:msub><m:mi>&#955;</m:mi><m:mi>i</m:mi></m:msub></m:mfenced><m:mo>&#8804;</m:mo><m:msub><m:mi>w</m:mi><m:mi>u</m:mi></m:msub><m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

or by <span class="italic">real part</span>, satisfying

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:msub><m:mi>w</m:mi><m:mi>l</m:mi></m:msub><m:mo>&#8804;</m:mo><m:mrow><m:mi>Re</m:mi><m:mfenced separators=""><m:msub><m:mi>&#955;</m:mi><m:mi>i</m:mi></m:msub></m:mfenced></m:mrow><m:mo>&#8804;</m:mo><m:msub><m:mi>w</m:mi><m:mi>u</m:mi></m:msub><m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div></div><h2 class="standard"><a class="sec" name="references" id="references"/>4&#160;&#160;References</h2><div class="paramtext"><a name="ref105" id="ref105"/>Golub G H and Van Loan C F (1996)  <i>Matrix Computations</i> (3rd Edition) Johns Hopkins University Press, Baltimore </div><h2 class="standard"><a class="sec" name="parameters" id="parameters"/>5&#160;&#160;Parameters</h2>
<dl><dt class="paramhead"><a name="CRIT" id="CRIT"/>1: &#160;&#160;&#8194; CRIT &#8211; CHARACTER*1<span class="pclass">Input</span></dt><dd><div class="paramtext"><i>On entry</i>: indicates the criterion for selecting eigenvalues.

<dl>
<dt class="paramval"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#CRIT"><m:mi mathcolor="#EE0000" mathvariant="bold">CRIT</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'M'</m:mtext></m:math></dt>
<dd>Eigenvalues are selected according to their moduli: <m:math><m:msub><m:mi>w</m:mi><m:mi>l</m:mi></m:msub><m:mo>&#8804;</m:mo><m:mfenced open="|" close="|" separators=""><m:msub><m:mi>&#955;</m:mi><m:mi>i</m:mi></m:msub></m:mfenced><m:mo>&#8804;</m:mo><m:msub><m:mi>w</m:mi><m:mi>u</m:mi></m:msub></m:math>.</dd>
<dt class="paramval"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#CRIT"><m:mi mathcolor="#EE0000" mathvariant="bold">CRIT</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'R'</m:mtext></m:math></dt>
<dd>Eigenvalues are selected according to their real parts: <m:math><m:msub><m:mi>w</m:mi><m:mi>l</m:mi></m:msub><m:mo>&#8804;</m:mo><m:mrow><m:mi>Re</m:mi><m:mfenced separators=""><m:msub><m:mi>&#955;</m:mi><m:mi>i</m:mi></m:msub></m:mfenced></m:mrow><m:mo>&#8804;</m:mo><m:msub><m:mi>w</m:mi><m:mi>u</m:mi></m:msub></m:math>.</dd></dl>
</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#CRIT"><m:mi mathcolor="#EE0000" mathvariant="bold">CRIT</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'M'</m:mtext></m:math>&#160;or <m:math><m:mtext>'R'</m:mtext></m:math>.
</div></dd><dt class="paramhead"><a name="N" id="N"/>2: &#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"/>3: &#160;&#160;&#8194; A(<a class="arg" href="#LDA">LDA</a>,<m:math><m:mo>*</m:mo></m:math>) &#8211; <span class="bitalic">complex*16</span> 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;general matrix <m:math><m:mi>A</m:mi></m:math>.</div>
<div class="paramtext"><i>On exit</i>: contains the Hessenberg form of the balanced input matrix <m:math><m:msup><m:mi>A</m:mi><m:mo>&#8242;</m:mo></m:msup></m:math>&#160;(see <a class="sec" href="#fcomments">Section 8</a>).</div></dd><dt class="paramhead"><a name="LDA" id="LDA"/>4: &#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 F02GCF 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="WL" id="WL"/>5: &#160;&#160;&#8194; WL &#8211; <span class="bitalic">double precision</span><span class="pclass">Input</span></dt><dt class="multi-paramhead"><a name="WU" id="WU"/>6: &#160;&#160;&#8194; WU &#8211; <span class="bitalic">double precision</span><span class="pclass">Input</span></dt><dd><div class="paramtext"><i>On entry</i>: <m:math><m:msub><m:mi>w</m:mi><m:mi>l</m:mi></m:msub></m:math>&#160;and <m:math><m:msub><m:mi>w</m:mi><m:mi>u</m:mi></m:msub></m:math>, the lower and upper bounds on the criterion for the selected eigenvalues (see <a class="arg" href="#CRIT">CRIT</a>).</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#WU"><m:mi mathcolor="#EE0000" mathvariant="bold">WU</m:mi></m:maction><m:mo>&gt;</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#WL"><m:mi mathcolor="#EE0000" mathvariant="bold">WL</m:mi></m:maction></m:math>.
</div></dd><dt class="paramhead"><a name="MEST" id="MEST"/>7: &#160;&#160;&#8194; MEST &#8211; INTEGER<span class="pclass">Input</span></dt><dd><div class="paramtext"><i>On entry</i>: the second dimension of the array <a class="arg" href="#V">V</a> as declared in the (sub)program from which F02GCF is called. <a class="arg" href="#MEST">MEST</a> must be an upper bound on <m:math><m:mi>m</m:mi></m:math>, the number of eigenvalues and eigenvectors selected. No eigenvectors are computed if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#MEST"><m:mi mathcolor="#EE0000" mathvariant="bold">MEST</m:mi></m:maction><m:mo>&lt;</m:mo><m:mi>m</m:mi></m:math>.</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#MEST"><m:mi mathcolor="#EE0000" mathvariant="bold">MEST</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:mi>m</m:mi></m:mfenced></m:mrow></m:math>.
</div></dd><dt class="paramhead"><a name="M" id="M"/>8: &#160;&#160;&#8194; M &#8211; INTEGER<span class="pclass">Output</span></dt><dd><div class="paramtext"><i>On exit</i>: <m:math><m:mi>m</m:mi></m:math>, the number of eigenvalues actually selected.</div></dd><dt class="paramhead"><a name="W" id="W"/>9: &#160;&#160;&#8194; W(<a class="arg" href="#N">N</a>) &#8211; <span class="bitalic">complex*16</span> array<span class="pclass">Output</span></dt><dd><div class="paramtext"><i>On exit</i>: the first <a class="arg" href="#M">M</a> elements of <a class="arg" href="#W">W</a> hold the selected eigenvalues; elements <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#M"><m:mi mathcolor="#EE0000" mathvariant="bold">M</m:mi></m:maction><m:mo>+</m:mo><m:mn>1</m:mn></m:math>&#160;to <a class="arg" href="#N">N</a> contain the other eigenvalues.</div></dd><dt class="paramhead"><a name="V" id="V"/>10: &#8194; V(<a class="arg" href="#LDV">LDV</a>,<a class="arg" href="#MEST">MEST</a>) &#8211; <span class="bitalic">complex*16</span> array<span class="pclass">Output</span></dt><dd><div class="paramtext"><i>On exit</i>: contains the selected eigenvectors, with the <m:math><m:mi>i</m:mi></m:math>th column holding the eigenvector associated with the eigenvalue <m:math><m:msub><m:mi>&#955;</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;(stored in <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#W"><m:mi mathcolor="#EE0000" mathvariant="bold">W</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi></m:mfenced></m:mrow></m:math>).</div></dd><dt class="paramhead"><a name="LDV" id="LDV"/>11: &#8194; LDV &#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="#V">V</a> as declared in the (sub)program from which F02GCF is called.</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#LDV"><m:mi mathcolor="#EE0000" mathvariant="bold">LDV</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="WORK" id="WORK"/>12: &#8194; WORK(<a class="arg" href="#LWORK">LWORK</a>) &#8211; <span class="bitalic">complex*16</span> array<span class="pclass">Workspace</span></dt><dt class="multi-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 F02GCF is called.</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: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:mfenced separators=""><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction><m:mo>+</m:mo><m:mn>2</m:mn></m:mfenced></m:mrow></m:mfenced></m:mrow></m:math>.
</div></dd><dt class="paramhead"><a name="RWORK" id="RWORK"/>14: &#8194; RWORK(<m:math><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:math>) &#8211; <span class="bitalic">double precision</span> array<span class="pclass">Workspace</span></dt><dt class="paramhead"><a name="IWORK" id="IWORK"/>15: &#8194; IWORK(<a class="arg" href="#N">N</a>) &#8211; INTEGER array<span class="pclass">Workspace</span></dt><dt class="paramhead"><a name="BWORK" id="BWORK"/>16: &#8194; BWORK(<a class="arg" href="#N">N</a>) &#8211; LOGICAL array<span class="pclass">Workspace</span></dt><dd/><dt class="paramhead"><a name="IFAIL" id="IFAIL"/>17: &#8194; IFAIL &#8211; INTEGER<span class="pclass">Input/Output</span></dt><dd>
<div class="paramtext"><i>On entry</i>: <a class="arg" href="#IFAIL">IFAIL</a> must be set to <m:math><m:mn>0</m:mn></m:math>, <m:math><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow><m:mtext>&#8203; or &#8203;</m:mtext><m:mn>1</m:mn></m:math>. If you are unfamiliar with this parameter you should refer to <a class="sec" href="../GENINT/essint.xml#library3">Section 3.3</a> in  the Essential Introduction for details.</div>
<div class="paramtext"><i>On exit</i>: <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IFAIL"><m:mi mathcolor="#EE0000" mathvariant="bold">IFAIL</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>&#160;unless the routine detects an error (see <a class="sec" href="#errors">Section 6</a>). <div class="paramtext">For environments where it might be inappropriate to halt program execution when an error is detected, the value <m:math><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow><m:mtext>&#8203; or &#8203;</m:mtext><m:mn>1</m:mn></m:math>&#160;is recommended.  If the output of error messages is undesirable, then the value <m:math><m:mn>1</m:mn></m:math>&#160;is recommended.  Otherwise, if you are not familiar with this parameter, the recommended value is <m:math><m:mn>0</m:mn></m:math>.  <b>When the value <m:math><m:mrow><m:mo>-</m:mo><m:mn mathvariant="bold">1</m:mn></m:mrow><m:mtext>&#8203; or &#8203;</m:mtext><m:mn mathvariant="bold">1</m:mn></m:math>&#160;is used it is essential to test the value of <a class="arg" href="#IFAIL">IFAIL</a> on exit.</b></div></div></dd></dl><h2 class="standard"><a class="sec" name="errors" id="errors"/>6&#160;&#160;Error Indicators and Warnings</h2>
<div class="paramtext">If on entry <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IFAIL"><m:mi mathcolor="#EE0000" mathvariant="bold">IFAIL</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>&#160;or <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#errors"><m:mn mathcolor="#003399" mathvariant="bold">-1</m:mn></m:maction></m:math>, explanatory error messages are output on the current error message unit (as defined by <a class="rout" href="../X04/x04aaf.xml">X04AAF</a>).</div><div class="paramtext">Errors or warnings detected by the routine:</div>
<dl class="ifail">
<dt class="errorhead"><a name="IFeq1" id="IFeq1"/><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IFAIL"><m:mi mathcolor="#EE0000" mathvariant="bold">IFAIL</m:mi></m:maction><m:mo>=</m:mo><m:mn>1</m:mn></m:math></dt>
<dd>
<table class="ifail"><tr><td class="ifail1">On&#160;entry,</td><td class="ifail2-90"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#CRIT"><m:mi mathcolor="#EE0000" mathvariant="bold">CRIT</m:mi></m:maction><m:mo>&#8800;</m:mo><m:mtext>'M'</m:mtext></m:math>&#160;or <m:math><m:mtext>'R'</m:mtext></m:math>,</td></tr><tr><td class="ifail1">or</td><td class="ifail2-90"><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>&lt;</m:mo><m:mn>0</m:mn></m:math>,</td></tr><tr><td class="ifail1">or</td><td class="ifail2-90"><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>&lt;</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>,</td></tr><tr><td class="ifail1">or</td><td class="ifail2-90"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#WU"><m:mi mathcolor="#EE0000" mathvariant="bold">WU</m:mi></m:maction><m:mo>&#8804;</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#WL"><m:mi mathcolor="#EE0000" mathvariant="bold">WL</m:mi></m:maction></m:math>,</td></tr><tr><td class="ifail1">or</td><td class="ifail2-90"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#MEST"><m:mi mathcolor="#EE0000" mathvariant="bold">MEST</m:mi></m:maction><m:mo>&lt;</m:mo><m:mn>1</m:mn></m:math>,</td></tr><tr><td class="ifail1">or</td><td class="ifail2-90"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#LDV"><m:mi mathcolor="#EE0000" mathvariant="bold">LDV</m:mi></m:maction><m:mo>&lt;</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>,</td></tr><tr><td class="ifail1">or</td><td class="ifail2-90"><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>&lt;</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:mfenced separators=""><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction><m:mo>+</m:mo><m:mn>2</m:mn></m:mfenced></m:mrow></m:mfenced></m:mrow></m:math>.</td></tr></table>
</dd>
</dl><dl class="ifail">
<dt class="errorhead"><a name="IFeq2" id="IFeq2"/><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IFAIL"><m:mi mathcolor="#EE0000" mathvariant="bold">IFAIL</m:mi></m:maction><m:mo>=</m:mo><m:mn>2</m:mn></m:math></dt>
<dd>
<div class="paramtext">The <m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;algorithm failed to compute all the eigenvalues.  No eigenvectors have been computed.</div>
</dd>
</dl><dl class="ifail">
<dt class="errorhead"><a name="IFeq3" id="IFeq3"/><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IFAIL"><m:mi mathcolor="#EE0000" mathvariant="bold">IFAIL</m:mi></m:maction><m:mo>=</m:mo><m:mn>3</m:mn></m:math></dt>
<dd>
<div class="paramtext">There are more than <a class="arg" href="#MEST">MEST</a> eigenvalues in the specified range.  The actual number of eigenvalues in the range is returned in <a class="arg" href="#M">M</a>.  No eigenvectors have been computed.  Rerun with the second dimension of  <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#V"><m:mi mathcolor="#EE0000" mathvariant="bold">V</m:mi></m:maction><m:mo>=</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#MEST"><m:mi mathcolor="#EE0000" mathvariant="bold">MEST</m:mi></m:maction><m:mo>&#8805;</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#M"><m:mi mathcolor="#EE0000" mathvariant="bold">M</m:mi></m:maction></m:math>.</div>
</dd>
</dl><dl class="ifail">
<dt class="errorhead"><a name="IFeq4" id="IFeq4"/><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IFAIL"><m:mi mathcolor="#EE0000" mathvariant="bold">IFAIL</m:mi></m:maction><m:mo>=</m:mo><m:mn>4</m:mn></m:math></dt>
<dd>
<div class="paramtext">Inverse iteration failed to compute all the specified eigenvectors.  If an eigenvector failed to converge, the corresponding column of <a class="arg" href="#V">V</a> is set to zero.</div>
</dd>
</dl><h2 class="standard"><a class="sec" name="accuracy" id="accuracy"/>7&#160;&#160;Accuracy</h2>
<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:msup><m:mi>A</m:mi><m:mo>&#8242;</m:mo></m:msup></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>, <m:math><m:mi>&#949;</m:mi></m:math>&#160;is the <span class="bitalic">machine precision</span>, 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>; <m:math><m:msup><m:mi>A</m:mi><m:mo>&#8242;</m:mo></m:msup></m:math>&#160;is the balanced form of the original matrix <m:math><m:mi>A</m:mi></m:math>&#160;(see  <a class="sec" href="#fcomments">Section 8</a>), and  <m:math><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:msup><m:mi>A</m:mi><m:mo>&#8242;</m:mo></m:msup></m:mfenced><m:mo>&#8804;</m:mo><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>A</m:mi></m:mfenced></m:math>.</div><div class="paramtext">If <m:math><m:msub><m:mi>x</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;is the corresponding exact eigenvector, and <m:math><m:msub><m:mover><m:mi>x</m:mi><m:mo>~</m:mo></m:mover><m:mi>i</m:mi></m:msub></m:math>&#160;is the corresponding computed eigenvector, then the angle <m:math><m:mi>&#952;</m:mi><m:mfenced separators=""><m:msub><m:mover><m:mi>x</m:mi><m:mo>~</m:mo></m:mover><m:mi>i</m:mi></m:msub><m:mo>,</m:mo><m:msub><m:mi>x</m:mi><m:mi>i</m:mi></m:msub></m:mfenced></m:math>&#160;between them is bounded as follows:

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:mi>&#952;</m:mi><m:mfenced separators=""><m:msub><m:mover><m:mi>x</m:mi><m:mo>~</m:mo></m:mover><m:mi>i</m:mi></m:msub><m:mo>,</m:mo><m:msub><m:mi>x</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:msup><m:mi>A</m:mi><m:mo>&#8242;</m:mo></m:msup></m:mfenced><m:mn>2</m:mn></m:msub></m:mrow><m:msub><m:mi mathvariant="italic">sep</m:mi><m:mi>i</m:mi></m:msub></m:mfrac>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:msub><m:mi mathvariant="italic">sep</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;is the reciprocal condition number of  <m:math><m:msub><m:mi>x</m:mi><m:mi>i</m:mi></m:msub></m:math>.</div><div class="paramtext">The condition numbers <m:math><m:msub><m:mi>s</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;and <m:math><m:msub><m:mi mathvariant="italic">sep</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;may be computed from the Hessenberg form of the balanced matrix <m:math><m:msup><m:mi>A</m:mi><m:mo>&#8242;</m:mo></m:msup></m:math>&#160;which is returned in the array <a class="arg" href="#A">A</a>.  This requires calling <a class="rout" href="../F08/f08psf.xml">F08PSF (ZHSEQR)</a> with  <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="../F08/f08psf.xml#JOB"><m:mi mathcolor="#EE0000" mathvariant="bold">JOB</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'S'</m:mtext></m:math>&#160;to compute the Schur form of <m:math><m:msup><m:mi>A</m:mi><m:mo>&#8242;</m:mo></m:msup></m:math>, followed by <a class="rout" href="../F08/f08qyf.xml">F08QYF (ZTRSNA)</a>.</div><h2 class="standard"><a class="sec" name="fcomments" id="fcomments"/>8&#160;&#160;Further Comments</h2>
<div class="paramtext">F02GCF calls routines from LAPACK in <a class="chap" href="../F08/f08conts.xml">Chapter F08</a>.  It first balances the matrix, using a diagonal similarity transformation to reduce its norm; and then reduces the balanced matrix <m:math><m:msup><m:mi>A</m:mi><m:mo>&#8242;</m:mo></m:msup></m:math>&#160;to upper Hessenberg form <m:math><m:mi>H</m:mi></m:math>, using a unitary similarity transformation: <m:math><m:msup><m:mi>A</m:mi><m:mo>&#8242;</m:mo></m:msup><m:mo>=</m:mo><m:mi>Q</m:mi><m:mi>H</m:mi><m:msup><m:mi>Q</m:mi><m:mi mathvariant="normal">H</m:mi></m:msup></m:math>.  The routine uses the Hessenberg <m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;algorithm to compute all the eigenvalues of <m:math><m:mi>H</m:mi></m:math>, which are the same as the eigenvalues of <m:math><m:mi>A</m:mi></m:math>.  It computes the eigenvectors of <m:math><m:mi>H</m:mi></m:math>&#160;which correspond to the selected eigenvalues, using inverse iteration.  It premultiplies the eigenvectors by <m:math><m:mi>Q</m:mi></m:math>&#160;to form the eigenvectors of <m:math><m:msup><m:mi>A</m:mi><m:mo>&#8242;</m:mo></m:msup></m:math>; and finally transforms the eigenvectors to those of the original matrix <m:math><m:mi>A</m:mi></m:math>.</div><div class="paramtext">Each eigenvector <m:math><m:mi>x</m:mi></m:math>&#160;is normalized so that <m:math><m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>x</m:mi></m:mfenced><m:mn>2</m:mn></m:msub><m:mo>=</m:mo><m:mn>1</m:mn></m:math>, and the element of largest absolute value is real and positive.</div><div class="paramtext">The inverse iteration routine may make a small perturbation to the real parts of close eigenvalues, and this may shift their moduli just outside the specified bounds.  If you are relying on eigenvalues being within the bounds, you should test them on return from  F02GCF.</div><div class="paramtext">The time taken by the routine is approximately 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 routine can be used to compute <span class="italic">all</span> eigenvalues and eigenvectors,  by setting <a class="arg" href="#WL">WL</a> large and negative, and <a class="arg" href="#WU">WU</a> large and positive.</div><h2 class="standard"><a class="sec" name="example" id="example"/>9&#160;&#160;Example</h2>
<div class="paramtext">This example computes those eigenvalues of the matrix <m:math><m:mi>A</m:mi></m:math>&#160;which lie in the range <m:math>
 <m:mfenced separators="" open="[" close="]"><m:mrow><m:mo>-</m:mo><m:mn>5.5</m:mn></m:mrow><m:mo>,</m:mo><m:mrow><m:mo>+</m:mo><m:mn>5.5</m:mn></m:mrow></m:mfenced>
</m:math>,  and their corresponding eigenvectors, where

<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></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/f02gcfe.f">Program Text (f02gcfe.f)</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/f02gcfe.d">Program&#160;Data (f02gcfe.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/f02gcfe.r">Program Results (f02gcfe.r)</a></p>
<hr/><div><a class="rout" href="../../pdf/F02/f02gcf.pdf">F02GCF (PDF version)</a></div><div><a class="chap" href="f02conts.xml">F02 Chapter Contents</a></div><div><a class="chapint" href="f02intro.xml">F02 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. 2009</a></div></body></html>
