<?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>F08 Chapter Introduction : 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="chap" href="f08conts.xml">F08 Chapter Contents</a></div><div><a class="chapint" href="../../pdf/F08/f08intro.pdf">F08 Chapter Introduction (PDF version)</a></div>
<div><a class="htmltoc" href="../FRONTMATTER/manconts.xml">NAG Library Manual</a></div><hr/><h1 class="libdoc">NAG Library Chapter Introduction<br/><br/>F08 &#8211; Least Squares and Eigenvalue Problems (LAPACK)</h1><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="#scope">1&#160;&#160;<b>Scope of the Chapter</b></a>
</div><div class="htmltoc">
<span class="htmltoc" onclick="showLevel('tocbackground');"><span class="htmltocplus" id="tocbackgroundplus">+</span><span class="htmltocminus" id="tocbackgroundminus">&#8722;</span></span>
<a class="htmltoc" href="#background">2&#160;&#160;<b>Background to the Problems</b></a>
<div class="htmltocitem" id="tocbackground">
<div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background1">2.1&#160;&#160;<b>Linear Least Squares Problems</b></a>
</div><div class="htmltoc">
<span class="htmltoc" onclick="showLevel('tocbackground2');"><span class="htmltocplus" id="tocbackground2plus">+</span><span class="htmltocminus" id="tocbackground2minus">&#8722;</span></span>
<a class="htmltoc" href="#background2">2.2&#160;&#160;<b>Orthogonal Factorizations and Least Squares Problems</b></a>
<div class="htmltocitem" id="tocbackground2">
<div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background21">2.2.1&#160;&#160;<b>QR factorization</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background22">2.2.2&#160;&#160;<b>LQ factorization</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background23">2.2.3&#160;&#160;<b>QR factorization with column pivoting</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background224">2.2.4&#160;&#160;<b>Complete orthogonal factorization</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background225">2.2.5&#160;&#160;<b>Other factorizations</b></a>
</div>
</div>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background3">2.3&#160;&#160;<b>The Singular Value Decomposition</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background4">2.4&#160;&#160;<b>The Singular Value Decomposition and Least Squares Problems</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background5a">2.5&#160;&#160;<b>Generalized Linear Least Squares Problems</b></a>
</div><div class="htmltoc">
<span class="htmltoc" onclick="showLevel('tocbackground6a');"><span class="htmltocplus" id="tocbackground6aplus">+</span><span class="htmltocminus" id="tocbackground6aminus">&#8722;</span></span>
<a class="htmltoc" href="#background6a">2.6&#160;&#160;<b>Generalized Orthogonal Factorization and Generalized Linear Least Squares Problems</b></a>
<div class="htmltocitem" id="tocbackground6a">
<div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background6a1">2.6.1&#160;&#160;<b>Generalized QR Factorization</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background6a2">2.6.2&#160;&#160;<b>Generalized RQ Factorization</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background6a3">2.6.3&#160;&#160;<b>Generalized Singular Value Decomposition (GSVD)</b></a>
</div>
</div>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background5">2.7&#160;&#160;<b>Symmetric Eigenvalue Problems</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background6">2.8&#160;&#160;<b>Generalized Symmetric-definite Eigenvalue Problems</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background7">2.9&#160;&#160;<b>Packed Storage for Symmetric Matrices</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background8">2.10&#160;&#160;<b>Band Matrices</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background9">2.11&#160;&#160;<b>Nonsymmetric Eigenvalue Problems</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background9a">2.12&#160;&#160;<b>Generalized Nonsymmetric Eigenvalue Problem</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background10">2.13&#160;&#160;<b>The Sylvester Equation and the Generalized Sylvester Equation</b></a>
</div><div class="htmltoc">
<span class="htmltoc" onclick="showLevel('tocbackground11');"><span class="htmltocplus" id="tocbackground11plus">+</span><span class="htmltocminus" id="tocbackground11minus">&#8722;</span></span>
<a class="htmltoc" href="#background11">2.14&#160;&#160;<b>Error and Perturbation Bounds and Condition Numbers</b></a>
<div class="htmltocitem" id="tocbackground11">
<div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background111">2.14.1&#160;&#160;<b>Least squares problems</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background112">2.14.2&#160;&#160;<b>The singular value decomposition</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background113">2.14.3&#160;&#160;<b>The symmetric eigenproblem</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background114">2.14.4&#160;&#160;<b>The generalized symmetric-definite eigenproblem</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background115">2.14.5&#160;&#160;<b>The nonsymmetric eigenproblem</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background116">2.14.6&#160;&#160;<b>Balancing and condition for the nonsymmetric eigenproblem</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background9b1">2.14.7&#160;&#160;<b>The generalized nonsymmetric eigenvalue problem</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background9b2">2.14.8&#160;&#160;<b>Balancing the generalized eigenvalue problem</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background9b3">2.14.9&#160;&#160;<b>Other problems</b></a>
</div>
</div>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background12">2.15&#160;&#160;<b>Block Partitioned Algorithms</b></a>
</div>
</div>
</div><div class="htmltoc">
<span class="htmltoc" onclick="showLevel('tocavailable');"><span class="htmltocplus" id="tocavailableplus">+</span><span class="htmltocminus" id="tocavailableminus">&#8722;</span></span>
<a class="htmltoc" href="#available">3&#160;&#160;<b>Recommendations on Choice and Use of Available Routines</b></a>
<div class="htmltocitem" id="tocavailable">
<div class="htmltoc">
<span class="htmltoc" onclick="showLevel('tocrecomm_1');"><span class="htmltocplus" id="tocrecomm_1plus">+</span><span class="htmltocminus" id="tocrecomm_1minus">&#8722;</span></span>
<a class="htmltoc" href="#recomm_1">3.1&#160;&#160;<b>Available Routines</b></a>
<div class="htmltocitem" id="tocrecomm_1">
<div class="htmltoc">
<span class="htmltoc" onclick="showLevel('tocrecomm_11a');"><span class="htmltocplus" id="tocrecomm_11aplus">+</span><span class="htmltocminus" id="tocrecomm_11aminus">&#8722;</span></span>
<a class="htmltoc" href="#recomm_11a">3.1.1&#160;&#160;<b>Driver routines</b></a>
<div class="htmltocitem" id="tocrecomm_11a">
<div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#recomm_111a">3.1.1.1&#160;&#160;<b>Linear least squares problems (LLS)</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#recomm_112a">3.1.1.2&#160;&#160;<b>Generalized linear least squares problems (LSE and GLM)</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#recomm_113a">3.1.1.3&#160;&#160;<b>Symmetric eigenvalue problems (SEP)</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#recomm_114a">3.1.1.4&#160;&#160;<b>Nonsymmetric eigenvalue problem (NEP)</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#recomm_115a">3.1.1.5&#160;&#160;<b>Singular value decomposition (SVD)</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#recomm_116a">3.1.1.6&#160;&#160;<b>Generalized symmetric definite eigenvalue problems (GSEP)</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#recomm_117a">3.1.1.7&#160;&#160;<b>Generalized nonsymmetric eigenvalue problem (GNEP)</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#recomm_118a">3.1.1.8&#160;&#160;<b>Generalized singular value decomposition (GSVD)</b></a>
</div>
</div>
</div><div class="htmltoc">
<span class="htmltoc" onclick="showLevel('tocrecomm_2a');"><span class="htmltocplus" id="tocrecomm_2aplus">+</span><span class="htmltocminus" id="tocrecomm_2aminus">&#8722;</span></span>
<a class="htmltoc" href="#recomm_2a">3.1.2&#160;&#160;<b>Computational routines</b></a>
<div class="htmltocitem" id="tocrecomm_2a">
<div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#recomm_11">3.1.2.1&#160;&#160;<b>Orthogonal factorizations</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#recomm_genorthfact">3.1.2.2&#160;&#160;<b>Generalized orthogonal factorizations</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#recomm_12">3.1.2.3&#160;&#160;<b>Singular value problems</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#recomm_gensingdecomp">3.1.2.4&#160;&#160;<b>Generalized singular value decomposition</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#recomm_13">3.1.2.5&#160;&#160;<b>Symmetric eigenvalue problems</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#recomm_14">3.1.2.6&#160;&#160;<b>Generalized symmetric-definite eigenvalue problems</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#recomm_15">3.1.2.7&#160;&#160;<b>Nonsymmetric eigenvalue problems</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#recomm_15a">3.1.2.8&#160;&#160;<b>Generalized nonsymmetric eigenvalue problems</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#recomm_16">3.1.2.9&#160;&#160;<b>The Sylvester equation and the generalized Sylvester equation</b></a>
</div>
</div>
</div>
</div>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#recomm_2">3.2&#160;&#160;<b>NAG Names and LAPACK Names</b></a>
</div><div class="htmltoc">
<span class="htmltoc" onclick="showLevel('tocrecomm_3');"><span class="htmltocplus" id="tocrecomm_3plus">+</span><span class="htmltocminus" id="tocrecomm_3minus">&#8722;</span></span>
<a class="htmltoc" href="#recomm_3">3.3&#160;&#160;<b>Matrix Storage Schemes</b></a>
<div class="htmltocitem" id="tocrecomm_3">
<div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#recomm_31">3.3.1&#160;&#160;<b>Conventional storage</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#recomm_32">3.3.2&#160;&#160;<b>Packed storage</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#recomm_33">3.3.3&#160;&#160;<b>Band storage</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#recomm_34">3.3.4&#160;&#160;<b>Tridiagonal and bidiagonal matrices</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#recomm_35">3.3.5&#160;&#160;<b>Real diagonal elements of complex matrices</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#recomm_36">3.3.6&#160;&#160;<b>Representation of orthogonal or unitary matrices</b></a>
</div>
</div>
</div><div class="htmltoc">
<span class="htmltoc" onclick="showLevel('tocrecomm_4');"><span class="htmltocplus" id="tocrecomm_4plus">+</span><span class="htmltocminus" id="tocrecomm_4minus">&#8722;</span></span>
<a class="htmltoc" href="#recomm_4">3.4&#160;&#160;<b>Parameter Conventions</b></a>
<div class="htmltocitem" id="tocrecomm_4">
<div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#recomm_41">3.4.1&#160;&#160;<b>Option parameters</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#recomm_42">3.4.2&#160;&#160;<b>Problem dimensions</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#recomm_43">3.4.3&#160;&#160;<b>Length of work arrays</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#recomm_44">3.4.4&#160;&#160;<b>Error-handling and the diagnostic parameter INFO</b></a>
</div>
</div>
</div>
</div>
</div><div class="htmltoc">
<span class="htmltoc" onclick="showLevel('tocdtree');"><span class="htmltocplus" id="tocdtreeplus">+</span><span class="htmltocminus" id="tocdtreeminus">&#8722;</span></span>
<a class="htmltoc" href="#dtree">4&#160;&#160;<b>Decision Trees</b></a>
<div class="htmltocitem" id="tocdtree">
<div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#dtree1">4.1&#160;&#160;<b>General Purpose Routines (eigenvalues and eigenvectors)</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#dtree2">4.2&#160;&#160;<b>General Purpose Routines (singular value decomposition)</b></a>
</div>
</div>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#index">5&#160;&#160;<b>Functionality Index</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#auxindex">6&#160;&#160;<b>Auxiliary Routines Associated with Library Routine Parameters</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#withdrawn">7&#160;&#160;<b>Routines Withdrawn or Scheduled for Withdrawal</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#references">8&#160;&#160;<b>References</b></a>
</div>
</div>
</div><h2 class="standard"><a class="sec" name="scope" id="scope"/>1&#160;&#160;Scope of the Chapter</h2>
<div class="paramtext">This chapter provides routines for the solution of linear least squares problems, eigenvalue problems and singular value problems, as well as associated computations.  It provides routines for:
<ul class="listind"><li class="listind">&#8211; solution of linear least squares problems</li><li class="listind">&#8211; solution of symmetric eigenvalue problems</li><li class="listind">&#8211; solution of nonsymmetric eigenvalue problems</li><li class="listind">&#8211; solution of singular value problems</li><li class="listind">&#8211; solution of generalized symmetric-definite eigenvalue problems</li><li class="listind">&#8211; solution of generalized nonsymmetric eigenvalue problems</li><li class="listind">&#8211; solution of generalized singular value problems</li><li class="listind">&#8211; solution of generalized linear least squares problems</li><li class="listind">&#8211; matrix factorizations associated with the above problems</li><li class="listind">&#8211; estimating condition numbers of eigenvalue and eigenvector problems</li><li class="listind">&#8211; estimating the numerical rank of a matrix</li><li class="listind">&#8211; solution of the Sylvester matrix equation</li></ul>
Routines are provided for both <span class="italic">real</span> and <span class="italic">complex</span> data.</div><div class="paramtext">For a general introduction to the solution of linear least squares problems, you should turn first to <a class="chap" href="../F04/f04conts.xml">Chapter F04</a>.  The decision trees, at the end of <a class="chap" href="../F04/f04conts.xml">Chapter F04</a>, direct you to the most appropriate routines in <a class="chap" href="../F04/f04conts.xml">Chapters F04</a> or <a class="chap" href="../F08/f08conts.xml">F08</a>.  <a class="chap" href="../F04/f04conts.xml">Chapters F04</a> and <a class="chap" href="../F08/f08conts.xml">F08</a> contain <span class="italic">Black Box</span> (or <span class="italic">driver</span>) routines which enable standard linear least squares problems to be solved by a call to a single routine.</div><div class="paramtext">For a general introduction to eigenvalue and singular value problems, you should turn first to <a class="chap" href="../F02/f02conts.xml">Chapter F02</a>.  The decision trees, at the end of <a class="chap" href="../F02/f02conts.xml">Chapter F02</a>, direct you to the most appropriate routines in <a class="chap" href="../F02/f02conts.xml">Chapters F02</a> or <a class="chap" href="../F08/f08conts.xml">F08</a>.  <a class="chap" href="../F02/f02conts.xml">Chapters F02</a> and <a class="chap" href="../F08/f08conts.xml">F08</a> contain <span class="italic">Black Box</span> (or <span class="italic">driver</span>) routines which enable standard types of problem to be solved by a call to a single routine.  Often routines in <a class="chap" href="../F02/f02conts.xml">Chapter F02</a> call <a class="chap" href="../F08/f08conts.xml">Chapter F08</a> routines to perform the necessary computational tasks.</div><div class="paramtext">The routines in this chapter (<a class="chap" href="../F08/f08conts.xml">Chapter F08</a>) handle only <span class="italic">dense</span>, <span class="italic">band</span>, <span class="italic">tridiagonal</span> and <span class="italic">Hessenberg</span> matrices (not matrices with more specialized structures, or general sparse matrices).  The tables in <a class="sec" href="#available">Section 3</a> and the decision trees in <a class="sec" href="#dtree">Section 4</a> direct you to the most appropriate routines in <a class="chap" href="../F08/f08conts.xml">Chapter F08</a>.</div><div class="paramtext">The routines in this chapter have all been derived from the LAPACK project (see <a class="ref" href="#ref562">Anderson <span class="italic">et al.</span> (1999)</a>).  They have been designed to be efficient on a wide range of high-performance computers, without compromising efficiency on conventional serial machines.</div><div class="paramtext">It is not expected that you will need to read all of the following sections, but rather you will pick out those sections relevant to your particular problem.</div><h2 class="standard"><a class="sec" name="background" id="background"/>2&#160;&#160;Background to the Problems</h2>
<div class="paramtext">This section is only a brief introduction to the numerical solution of linear least squares problems, eigenvalue and singular value problems.  Consult a standard textbook for a more thorough discussion, for example <a class="ref" href="#ref105">Golub and Van Loan (1996)</a>.</div><h3 class="standard"><a class="sec" name="background1" id="background1"/>2.1&#160;&#160;Linear Least Squares Problems</h3>
<div class="paramtext">The <span class="italic">linear least squares problem</span> is

<div class="formula-eqn"><a name="eqn1" id="eqn1"/><table class="formula-eqn"><tr><td class="formula-eqn"><m:math display="block">
<m:munder>
 <m:mi mathvariant="normal">minimize</m:mi>
 <m:mi>x</m:mi>
</m:munder><m:mspace width="0.25em"/>
<m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>b</m:mi><m:mo>-</m:mo><m:mi>A</m:mi><m:mi>x</m:mi></m:mfenced><m:mn>2</m:mn></m:msub><m:mtext>,</m:mtext>
</m:math></td><td class="formula-eqn2">
      (1)
     </td></tr></table></div>

where <m:math><m:mi>A</m:mi></m:math>&#160;is an <m:math><m:mi>m</m:mi></m:math>&#160;by <m:math><m:mi>n</m:mi></m:math>&#160;matrix, <m:math><m:mi>b</m:mi></m:math>&#160;is a given <m:math><m:mi>m</m:mi></m:math>&#160;element vector and <m:math><m:mi>x</m:mi></m:math>&#160;is an <m:math><m:mi>n</m:mi></m:math>&#160;element solution vector.</div><div class="paramtext">In the most usual case <m:math><m:mi>m</m:mi><m:mo>&#8805;</m:mo><m:mi>n</m:mi></m:math>&#160;and <m:math><m:mrow><m:mi>rank</m:mi><m:mfenced separators=""><m:mi>A</m:mi></m:mfenced></m:mrow><m:mo>=</m:mo><m:mi>n</m:mi></m:math>, so that <m:math><m:mi>A</m:mi></m:math>&#160;has <span class="italic">full rank</span> and in this case the solution to problem <a class="eqn" href="#eqn1">(1)</a> is unique; the problem is also referred to as finding a <span class="italic">least squares solution</span> to an <span class="italic">overdetermined</span> system of linear equations.</div><div class="paramtext">When <m:math><m:mi>m</m:mi><m:mo>&lt;</m:mo><m:mi>n</m:mi></m:math>&#160;and <m:math><m:mrow><m:mi>rank</m:mi><m:mfenced separators=""><m:mi>A</m:mi></m:mfenced></m:mrow><m:mo>=</m:mo><m:mi>m</m:mi></m:math>, there are an infinite number of solutions <m:math><m:mi>x</m:mi></m:math>&#160;which exactly satisfy <m:math><m:mi>b</m:mi><m:mo>-</m:mo><m:mi>A</m:mi><m:mi>x</m:mi><m:mo>=</m:mo><m:mn>0</m:mn></m:math>.  In this case it is often useful to find the unique solution <m:math><m:mi>x</m:mi></m:math>&#160;which minimizes <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:math>, and the problem is referred to as finding a <span class="italic">minimum norm solution</span> to an <span class="italic">underdetermined</span> system of linear equations.</div><div class="paramtext">In the general case when we may have <m:math><m:mrow><m:mi>rank</m:mi><m:mfenced separators=""><m:mi>A</m:mi></m:mfenced></m:mrow><m:mo>&lt;</m:mo><m:mrow><m:mi>min</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:mi>m</m:mi><m:mo>,</m:mo><m:mi>n</m:mi></m:mfenced></m:mrow></m:math>&#160;&#8211; in other words, <m:math><m:mi>A</m:mi></m:math>&#160;may be <span class="italic">rank-deficient</span> &#8211; we seek the <span class="italic">minimum norm least squares</span> solution <m:math><m:mi>x</m:mi></m:math>&#160;which minimizes both <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:math>&#160;and <m:math><m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>b</m:mi><m:mo>-</m:mo><m:mi>A</m:mi><m:mi>x</m:mi></m:mfenced><m:mn>2</m:mn></m:msub></m:math>.</div><div class="paramtext">This chapter (<a class="chap" href="../F08/f08conts.xml">Chapter F08</a>) contains driver routines to solve these problems with a single call, as well as computational routines that can be combined with routines in <a class="chap" href="../F07/f07conts.xml">Chapter F07</a> to solve these linear least squares problems.
<a class="chap" href="../F04/f04conts.xml">Chapter F04</a> also contains Black Box routines to solve these linear least squares problems in standard cases.
The next two sections discuss the factorizations that can be used in the solution of linear least squares problems.</div><h3 class="standard"><a class="sec" name="background2" id="background2"/>2.2&#160;&#160;Orthogonal Factorizations and Least Squares Problems</h3>
<div class="paramtext">A number of routines are provided for factorizing a general rectangular <m:math><m:mi>m</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>, as the product of an <span class="italic">orthogonal</span> matrix (<span class="italic">unitary</span> if complex) and a <span class="italic">triangular</span> (or possibly trapezoidal) matrix.</div><div class="paramtext">A real matrix <m:math><m:mi>Q</m:mi></m:math>&#160;is <span class="italic">orthogonal</span> if <m:math><m:msup><m:mi>Q</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>Q</m:mi><m:mo>=</m:mo><m:mi>I</m:mi></m:math>; a complex matrix <m:math><m:mi>Q</m:mi></m:math>&#160;is <span class="italic">unitary</span> if <m:math><m:msup><m:mi>Q</m:mi><m:mi mathvariant="normal">H</m:mi></m:msup><m:mi>Q</m:mi><m:mo>=</m:mo><m:mi>I</m:mi></m:math>.  Orthogonal or unitary matrices have the important property that they leave the <m:math><m:mn>2</m:mn></m:math>-norm of a vector invariant, so that

<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>x</m:mi></m:mfenced><m:mn>2</m:mn></m:msub>
 <m:mo>=</m:mo><m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>Q</m:mi><m:mi>x</m:mi></m:mfenced><m:mn>2</m:mn></m:msub><m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

if <m:math><m:mi>Q</m:mi></m:math>&#160;is orthogonal or unitary.  They usually help to maintain numerical stability because they do not amplify rounding errors.</div><div class="paramtext">Orthogonal factorizations are used in the solution of linear least squares problems.  They may also be used to perform preliminary steps in the solution of eigenvalue or singular value problems, and are useful tools in the solution of a number of other problems.</div><h4 class="standard"><a class="sec" name="background21" id="background21"/>2.2.1&#160;&#160;<m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;factorization</h4>
<div class="paramtext">The most common, and best known, of the factorizations is the <m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;<span class="italic">factorization</span> given by

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>A</m:mi>
 <m:mo>=</m:mo><m:mi>Q</m:mi>
 <m:mfenced><m:mtable>
  <m:mtr>
   <m:mtd><m:mi>R</m:mi></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:mn>0</m:mn></m:mtd>
  </m:mtr>
 </m:mtable></m:mfenced>
<m:mtext>, &#8195; if &#8203;</m:mtext><m:mi>m</m:mi><m:mo>&#8805;</m:mo><m:mi>n</m:mi><m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:mi>R</m:mi></m:math>&#160;is an <m:math><m:mi>n</m:mi></m:math>&#160;by <m:math><m:mi>n</m:mi></m:math>&#160;upper triangular matrix and <m:math><m:mi>Q</m:mi></m:math>&#160;is an <m:math><m:mi>m</m:mi></m:math>&#160;by <m:math><m:mi>m</m:mi></m:math>&#160;orthogonal (or unitary) matrix.  If <m:math><m:mi>A</m:mi></m:math>&#160;is of full rank <m:math><m:mi>n</m:mi></m:math>, then <m:math><m:mi>R</m:mi></m:math>&#160;is nonsingular.  It is sometimes convenient to write the factorization as

<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 separators=""><m:msub><m:mi>Q</m:mi><m:mn>1</m:mn></m:msub><m:msub><m:mi>Q</m:mi><m:mn>2</m:mn></m:msub></m:mfenced>
 <m:mfenced><m:mtable>
  <m:mtr>
   <m:mtd><m:mi>R</m:mi></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:mn>0</m:mn></m:mtd>
  </m:mtr>
 </m:mtable></m:mfenced>
</m:math></td><td class="formula2"/></tr></table></div>

which reduces to

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>A</m:mi>
 <m:mo>=</m:mo><m:msub><m:mi>Q</m:mi><m:mn>1</m:mn></m:msub><m:mi>R</m:mi><m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:msub><m:mi>Q</m:mi><m:mn>1</m:mn></m:msub></m:math>&#160;consists of the first <m:math><m:mi>n</m:mi></m:math>&#160;columns of <m:math><m:mi>Q</m:mi></m:math>, and <m:math><m:msub><m:mi>Q</m:mi><m:mn>2</m:mn></m:msub></m:math>&#160;the remaining <m:math><m:mi>m</m:mi><m:mo>-</m:mo><m:mi>n</m:mi></m:math>&#160;columns.</div><div class="paramtext">If <m:math><m:mi>m</m:mi><m:mo>&lt;</m:mo><m:mi>n</m:mi></m:math>, <m:math><m:mi>R</m:mi></m:math>&#160;is trapezoidal, and the factorization can be written

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>A</m:mi>
 <m:mo>=</m:mo><m:mi>Q</m:mi>
<m:mfenced separators=""><m:msub><m:mi>R</m:mi><m:mn>1</m:mn></m:msub><m:msub><m:mi>R</m:mi><m:mn>2</m:mn></m:msub></m:mfenced>
<m:mtext>, &#8195; if &#8203;</m:mtext><m:mi>m</m:mi><m:mo>&lt;</m:mo><m:mi>n</m:mi><m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:msub><m:mi>R</m:mi><m:mn>1</m:mn></m:msub></m:math>&#160;is upper triangular and <m:math><m:msub><m:mi>R</m:mi><m:mn>2</m:mn></m:msub></m:math>&#160;is rectangular.</div><div class="paramtext">The <m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;factorization can be used to solve the linear least squares problem <a class="eqn" href="#eqn1">(1)</a> when <m:math><m:mi>m</m:mi><m:mo>&#8805;</m:mo><m:mi>n</m:mi></m:math>&#160;and <m:math><m:mi>A</m:mi></m:math>&#160;is of full rank, since

<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>b</m:mi><m:mo>-</m:mo><m:mi>A</m:mi><m:mi>x</m:mi>
 </m:mfenced><m:mn>2</m:mn></m:msub><m:mo>=</m:mo><m:msub><m:mfenced open="&#8214;" close="&#8214;" separators="">
  <m:msup><m:mi>Q</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>b</m:mi><m:mo>-</m:mo><m:msup><m:mi>Q</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>A</m:mi><m:mi>x</m:mi>
 </m:mfenced><m:mn>2</m:mn></m:msub><m:mo>=</m:mo><m:msub><m:mfenced open="&#8214;" close="&#8214;" separators="">
   <m:mfenced><m:mtable>
   <m:mtr>
    <m:mtd><m:msub><m:mi>c</m:mi><m:mn>1</m:mn></m:msub><m:mo>-</m:mo><m:mi>R</m:mi><m:mi>x</m:mi></m:mtd>
   </m:mtr><m:mtr>
    <m:mtd><m:msub><m:mi>c</m:mi><m:mn>2</m:mn></m:msub></m:mtd>
   </m:mtr>
  </m:mtable></m:mfenced>
 </m:mfenced><m:mn>2</m:mn></m:msub><m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

where

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>c</m:mi><m:mo>&#8801;</m:mo> <m:mfenced><m:mtable>
  <m:mtr>
   <m:mtd><m:msub><m:mi>c</m:mi><m:mn>1</m:mn></m:msub></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:msub><m:mi>c</m:mi><m:mn>2</m:mn></m:msub></m:mtd>
  </m:mtr>
 </m:mtable></m:mfenced><m:mo>=</m:mo> <m:mfenced><m:mtable>
  <m:mtr>
   <m:mtd>
 <m:msubsup><m:mi>Q</m:mi><m:mn>1</m:mn><m:mi mathvariant="normal">T</m:mi></m:msubsup>
<m:mi>b</m:mi></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd/>
  </m:mtr><m:mtr>
   <m:mtd>
 <m:msubsup><m:mi>Q</m:mi><m:mn>2</m:mn><m:mi mathvariant="normal">T</m:mi></m:msubsup>
<m:mi>b</m:mi></m:mtd>
  </m:mtr>
 </m:mtable></m:mfenced><m:mo>=</m:mo><m:msup><m:mi>Q</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>b</m:mi><m:mtext>;</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

and <m:math><m:msub><m:mi>c</m:mi><m:mn>1</m:mn></m:msub></m:math>&#160;is an <m:math><m:mi>n</m:mi></m:math>&#160;element vector.  Then <m:math><m:mi>x</m:mi></m:math>&#160;is the solution of the upper triangular system

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>R</m:mi><m:mi>x</m:mi><m:mo>=</m:mo><m:msub><m:mi>c</m:mi><m:mn>1</m:mn></m:msub><m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div></div><div class="paramtext">The residual vector <m:math><m:mi>r</m:mi></m:math>&#160;is given by

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>r</m:mi>
 <m:mo>=</m:mo><m:mi>b</m:mi><m:mo>-</m:mo><m:mi>A</m:mi><m:mi>x</m:mi><m:mo>=</m:mo><m:mi>Q</m:mi>
 <m:mfenced><m:mtable>
  <m:mtr>
   <m:mtd><m:mn>0</m:mn></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:msub><m:mi>c</m:mi><m:mn>2</m:mn></m:msub></m:mtd>
  </m:mtr>
 </m:mtable></m:mfenced>
<m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div></div><div class="paramtext">The residual sum of squares <m:math><m:msup><m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>r</m:mi></m:mfenced><m:mn>2</m:mn></m:msub><m:mn>2</m:mn></m:msup></m:math>&#160;may be computed without forming <m:math><m:mi>r</m:mi></m:math>&#160;explicitly, since

<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>r</m:mi></m:mfenced><m:mn>2</m:mn></m:msub>
 <m:mo>=</m:mo><m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>b</m:mi><m:mo>-</m:mo><m:mi>A</m:mi><m:mi>x</m:mi></m:mfenced><m:mn>2</m:mn></m:msub><m:mo>=</m:mo><m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:msub><m:mi>c</m:mi><m:mn>2</m:mn></m:msub></m:mfenced><m:mn>2</m:mn></m:msub><m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div></div><h4 class="standard"><a class="sec" name="background22" id="background22"/>2.2.2&#160;&#160;<m:math><m:mi>L</m:mi><m:mi>Q</m:mi></m:math>&#160;factorization</h4>
<div class="paramtext">The <m:math><m:mi>L</m:mi><m:mi>Q</m:mi></m:math>&#160;<span class="italic">factorization</span> is given by

<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 separators=""><m:mi>L</m:mi><m:mtext>&#8195;</m:mtext><m:mn>0</m:mn></m:mfenced>
<m:mi>Q</m:mi><m:mo>=</m:mo><m:mfenced separators=""><m:mi>L</m:mi><m:mtext>&#8195;</m:mtext><m:mn>0</m:mn></m:mfenced>
 <m:mfenced><m:mtable>
  <m:mtr>
   <m:mtd><m:msub><m:mi>Q</m:mi><m:mn>1</m:mn></m:msub></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:msub><m:mi>Q</m:mi><m:mn>2</m:mn></m:msub></m:mtd>
  </m:mtr>
 </m:mtable></m:mfenced><m:mo>=</m:mo><m:mi>L</m:mi><m:msub><m:mi>Q</m:mi><m:mn>1</m:mn></m:msub><m:mtext>, &#8195; if &#8203;</m:mtext><m:mi>m</m:mi><m:mo>&#8804;</m:mo><m:mi>n</m:mi><m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:mi>L</m:mi></m:math>&#160;is <m:math><m:mi>m</m:mi></m:math>&#160;by <m:math><m:mi>m</m:mi></m:math>&#160;lower triangular, <m:math><m:mi>Q</m:mi></m:math>&#160;is <m:math><m:mi>n</m:mi></m:math>&#160;by <m:math><m:mi>n</m:mi></m:math>&#160;orthogonal (or unitary), <m:math><m:msub><m:mi>Q</m:mi><m:mn>1</m:mn></m:msub></m:math>&#160;consists of the first <m:math><m:mi>m</m:mi></m:math>&#160;rows of <m:math><m:mi>Q</m:mi></m:math>, and <m:math><m:msub><m:mi>Q</m:mi><m:mn>2</m:mn></m:msub></m:math>&#160;the remaining <m:math><m:mi>n</m:mi><m:mo>-</m:mo><m:mi>m</m:mi></m:math>&#160;rows.</div><div class="paramtext">The <m:math><m:mi>L</m:mi><m:mi>Q</m:mi></m:math>&#160;factorization of <m:math><m:mi>A</m:mi></m:math>&#160;is essentially the same as the <m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;factorization of <m:math><m:msup><m:mi>A</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup></m:math>&#160;(<m:math><m:msup><m:mi>A</m:mi><m:mi mathvariant="normal">H</m:mi></m:msup></m:math>&#160;if <m:math><m:mi>A</m:mi></m:math>&#160;is complex), since

<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 separators=""><m:mi>L</m:mi><m:mtext>&#8195;</m:mtext><m:mn>0</m:mn></m:mfenced>
<m:mi>Q</m:mi><m:mo>&#8660;</m:mo><m:msup><m:mi>A</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mo>=</m:mo><m:msup><m:mi>Q</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup>
 <m:mfenced><m:mtable>
  <m:mtr>
   <m:mtd><m:msup><m:mi>L</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:mn>0</m:mn></m:mtd>
  </m:mtr>
 </m:mtable></m:mfenced>
<m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div></div><div class="paramtext">The <m:math><m:mi>L</m:mi><m:mi>Q</m:mi></m:math>&#160;factorization may be used to find a minimum norm solution of an underdetermined system of linear equations <m:math><m:mi>A</m:mi><m:mi>x</m:mi><m:mo>=</m:mo><m:mi>b</m:mi></m:math>&#160;where <m:math><m:mi>A</m:mi></m:math>&#160;is <m:math><m:mi>m</m:mi></m:math>&#160;by <m:math><m:mi>n</m:mi></m:math>&#160;with <m:math><m:mi>m</m:mi><m:mo>&lt;</m:mo><m:mi>n</m:mi></m:math>&#160;and has rank <m:math><m:mi>m</m:mi></m:math>.  The solution is given by

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>x</m:mi>
 <m:mo>=</m:mo><m:msup><m:mi>Q</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup>
 <m:mfenced><m:mtable>
  <m:mtr>
   <m:mtd><m:msup><m:mi>L</m:mi><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msup><m:mi>b</m:mi></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:mn>0</m:mn></m:mtd>
  </m:mtr>
 </m:mtable></m:mfenced>
<m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div></div><h4 class="standard"><a class="sec" name="background23" id="background23"/>2.2.3&#160;&#160;<m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;factorization with column pivoting</h4>
<div class="paramtext">To solve a linear least squares problem <a class="eqn" href="#eqn1">(1)</a> when <m:math><m:mi>A</m:mi></m:math>&#160;is not of full rank, or the rank of <m:math><m:mi>A</m:mi></m:math>&#160;is in doubt, we can perform either a <m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;factorization with column pivoting or a singular value decomposition.</div><div class="paramtext">The <m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;<span class="italic">factorization with column pivoting</span> is given by

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>A</m:mi>
 <m:mo>=</m:mo><m:mi>Q</m:mi>
 <m:mfenced><m:mtable>
  <m:mtr>
   <m:mtd><m:mi>R</m:mi></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:mn>0</m:mn></m:mtd>
  </m:mtr>
 </m:mtable></m:mfenced>
<m:msup><m:mi>P</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mtext>, &#8195;</m:mtext><m:mi>m</m:mi><m:mo>&#8805;</m:mo><m:mi>n</m:mi><m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:mi>Q</m:mi></m:math>&#160;and <m:math><m:mi>R</m:mi></m:math>&#160;are as before and <m:math><m:mi>P</m:mi></m:math>&#160;is a (real) permutation matrix, chosen (in general) so that

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mfenced open="|" close="|" separators=""><m:msub><m:mi>r</m:mi><m:mn>11</m:mn></m:msub></m:mfenced><m:mo>&#8805;</m:mo><m:mfenced open="|" close="|" separators=""><m:msub><m:mi>r</m:mi><m:mn>22</m:mn></m:msub></m:mfenced><m:mo>&#8805;</m:mo><m:mo>&#8943;</m:mo><m:mo>&#8805;</m:mo><m:mfenced open="|" close="|" separators=""><m:msub><m:mi>r</m:mi><m:mrow><m:mi>n</m:mi><m:mi>n</m:mi></m:mrow></m:msub></m:mfenced>
</m:math></td><td class="formula2"/></tr></table></div>

and moreover, for each <m:math><m:mi>k</m:mi></m:math>,

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mfenced open="|" close="|" separators=""><m:msub><m:mi>r</m:mi><m:mrow><m:mi>k</m:mi><m:mi>k</m:mi></m:mrow></m:msub></m:mfenced><m:mo>&#8805;</m:mo><m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:msub><m:mi>R</m:mi><m:mrow><m:mi>k</m:mi><m:mo>:</m:mo><m:mi>j</m:mi><m:mo>,</m:mo><m:mi>j</m:mi></m:mrow></m:msub></m:mfenced><m:mn>2</m:mn></m:msub><m:mtext>, &#8195;</m:mtext><m:mi>j</m:mi><m:mo>=</m:mo><m:mi>k</m:mi><m:mo>+</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:mi>n</m:mi><m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

If we put

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>R</m:mi>
 <m:mo>=</m:mo>
 <m:mfenced><m:mtable>
  <m:mtr>
   <m:mtd><m:msub><m:mi>R</m:mi><m:mn>11</m:mn></m:msub></m:mtd>
   <m:mtd><m:msub><m:mi>R</m:mi><m:mn>12</m:mn></m:msub></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:msub><m:mi>R</m:mi><m:mn>22</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>R</m:mi><m:mn>11</m:mn></m:msub></m:math>&#160;is the leading <m:math><m:mi>k</m:mi></m:math>&#160;by <m:math><m:mi>k</m:mi></m:math>&#160;upper triangular sub-matrix of <m:math><m:mi>R</m:mi></m:math>&#160;then, in exact arithmetic, if <m:math><m:mrow><m:mi>rank</m:mi><m:mfenced separators=""><m:mi>A</m:mi></m:mfenced></m:mrow><m:mo>=</m:mo><m:mi>k</m:mi></m:math>, the whole of the sub-matrix <m:math><m:msub><m:mi>R</m:mi><m:mn>22</m:mn></m:msub></m:math>&#160;in rows and columns <m:math><m:mi>k</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:math>&#160;to <m:math><m:mi>n</m:mi></m:math>&#160;would be zero.  In numerical computation, the aim must be to determine an index <m:math><m:mi>k</m:mi></m:math>, such that the leading sub-matrix <m:math><m:msub><m:mi>R</m:mi><m:mn>11</m:mn></m:msub></m:math>&#160;is well-conditioned, and <m:math><m:msub><m:mi>R</m:mi><m:mn>22</m:mn></m:msub></m:math>&#160;is negligible, so that

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>R</m:mi>
 <m:mo>=</m:mo>
 <m:mfenced><m:mtable>
  <m:mtr>
   <m:mtd><m:msub><m:mi>R</m:mi><m:mn>11</m:mn></m:msub></m:mtd>
   <m:mtd><m:msub><m:mi>R</m:mi><m:mn>12</m:mn></m:msub></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:msub><m:mi>R</m:mi><m:mn>22</m:mn></m:msub></m:mtd>
  </m:mtr>
 </m:mtable></m:mfenced>
<m:mo>&#8771;</m:mo>
 <m:mfenced><m:mtable>
  <m:mtr>
   <m:mtd><m:msub><m:mi>R</m:mi><m:mn>11</m:mn></m:msub></m:mtd>
   <m:mtd><m:msub><m:mi>R</m:mi><m:mn>12</m:mn></m:msub></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
  </m:mtr>
 </m:mtable></m:mfenced>
<m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

Then <m:math><m:mi>k</m:mi></m:math>&#160;is the effective rank of <m:math><m:mi>A</m:mi></m:math>.  See <a class="ref" href="#ref105">Golub and Van Loan (1996)</a> for a further discussion of numerical rank determination.</div><div class="paramtext">The so-called basic solution to the linear least squares problem <a class="eqn" href="#eqn1">(1)</a> can be obtained from this factorization as

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>x</m:mi>
 <m:mo>=</m:mo><m:mi>P</m:mi>
 <m:mfenced><m:mtable>
  <m:mtr>
   <m:mtd><m:msubsup><m:mi>R</m:mi><m:mn>11</m:mn><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msubsup><m:msub><m:mover><m:mi>c</m:mi><m:mo>^</m:mo></m:mover><m:mn>1</m:mn></m:msub></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:mn>0</m:mn></m:mtd>
  </m:mtr>
 </m:mtable></m:mfenced><m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:msub><m:mover><m:mi>c</m:mi><m:mo>^</m:mo></m:mover><m:mn>1</m:mn></m:msub></m:math>&#160;consists of just the first <m:math><m:mi>k</m:mi></m:math>&#160;elements of <m:math><m:mi>c</m:mi><m:mo>=</m:mo><m:msup><m:mi>Q</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>b</m:mi></m:math>.</div><h4 class="standard"><a class="sec" name="background224" id="background224"/>2.2.4&#160;&#160;Complete orthogonal factorization</h4>
<div class="paramtext">The <m:math>
 <m:mi>Q</m:mi>
 <m:mi>R</m:mi>
</m:math>&#160;factorization with column pivoting does not enable us to compute a <span class="italic">minimum norm</span> solution to a rank-deficient linear least squares problem, unless <m:math>
 <m:msub><m:mi>R</m:mi><m:mn>12</m:mn></m:msub>
 <m:mo>=</m:mo>
 <m:mn>0</m:mn>
</m:math>.  However, by applying for further orthogonal (or unitary) transformations from the right to the upper trapezoidal matrix <m:math>
  <m:mfenced><m:mtable>
   <m:mtr>
    <m:mtd><m:msub><m:mi>R</m:mi><m:mn>11</m:mn></m:msub></m:mtd>
    <m:mtd><m:msub><m:mi>R</m:mi><m:mn>12</m:mn></m:msub></m:mtd>
   </m:mtr>
  </m:mtable></m:mfenced>
</m:math>, <m:math> 
 <m:msub><m:mi>R</m:mi><m:mn>12</m:mn></m:msub>
</m:math>&#160;can be eliminated:

<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>R</m:mi><m:mn>11</m:mn></m:msub></m:mtd>
    <m:mtd><m:msub><m:mi>R</m:mi><m:mn>12</m:mn></m:msub></m:mtd>
   </m:mtr>
  </m:mtable></m:mfenced>
 <m:mi>Z</m:mi>
 <m:mo>=</m:mo>
  <m:mfenced><m:mtable>
   <m:mtr>
    <m:mtd><m:msub><m:mi>T</m:mi><m:mn>11</m:mn></m:msub></m:mtd>
    <m:mtd><m:mn>0</m:mn></m:mtd>
   </m:mtr>
  </m:mtable></m:mfenced>
 <m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div></div><div class="paramtext">This gives the <b>complete orthogonal factorization</b><div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi mathvariant="normal">AP</m:mi>
 <m:mo>=</m:mo>
 <m:mi>Q</m:mi>
  <m:mfenced><m:mtable>
   <m:mtr>
    <m:mtd><m:msub><m:mi>T</m:mi><m:mn>11</m:mn></m:msub></m:mtd>
    <m:mtd><m:mn>0</m:mn></m:mtd>
   </m:mtr>
   <m:mtr>
    <m:mtd><m:mn>0</m:mn></m:mtd>
    <m:mtd><m:mn>0</m:mn></m:mtd>
   </m:mtr>
  </m:mtable></m:mfenced>
 <m:msup><m:mi>Z</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup>
</m:math></td><td class="formula2"/></tr></table></div>

from which the minimum norm solution can be obtained as

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>x</m:mi>
 <m:mo>=</m:mo>
 <m:mi>P</m:mi>
 <m:mi>Z</m:mi>
  <m:mfenced><m:mtable>
   <m:mtr>
    <m:mtd>
     <m:msubsup><m:mi>T</m:mi><m:mn>11</m:mn><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msubsup></m:mtd> 
    <m:mtd><m:msub><m:mover><m:mi>c</m:mi><m:mo>^</m:mo></m:mover><m:mn>1</m:mn></m:msub></m:mtd>
   </m:mtr><m:mtr>
    <m:mtd><m:mn>0</m:mn></m:mtd>
   </m:mtr>
  </m:mtable></m:mfenced>
 <m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div></div><h4 class="standard"><a class="sec" name="background225" id="background225"/>2.2.5&#160;&#160;Other factorizations</h4>
<div class="paramtext">The <m:math><m:mi>Q</m:mi><m:mi>L</m:mi></m:math>&#160;and <m:math><m:mi>R</m:mi><m:mi>Q</m:mi></m:math>&#160;<b>factorizations</b> are given by 

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>A</m:mi>
 <m:mo>=</m:mo>
 <m:mi>Q</m:mi>
  <m:mfenced><m:mtable>
   <m:mtr>
    <m:mtd><m:mn>0</m:mn></m:mtd>
   </m:mtr><m:mtr>
    <m:mtd><m:mi>L</m:mi></m:mtd>
   </m:mtr>
  </m:mtable></m:mfenced>
 <m:mtext>, &#8195;if &#8203;</m:mtext>
 <m:mi>m</m:mi>
 <m:mo>&#8805;</m:mo>
 <m:mi>n</m:mi>
 <m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

and

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>A</m:mi>
 <m:mo>=</m:mo>
  <m:mfenced><m:mtable>
   <m:mtr>
    <m:mtd><m:mn>0</m:mn></m:mtd>
    <m:mtd><m:mi>R</m:mi></m:mtd>
   </m:mtr>
  </m:mtable></m:mfenced>
 <m:mi>Q</m:mi>
 <m:mtext>, &#8195;if &#8203;</m:mtext>
 <m:mi>m</m:mi>
 <m:mo>&#8804;</m:mo>
 <m:mi>n</m:mi>
 <m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div></div><div class="paramtext">The factorizations are less commonly used than either the <m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;or <m:math><m:mi>L</m:mi><m:mi>Q</m:mi></m:math>&#160;factorizations described above, but have applications in, for example, the computation of generalized <m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;factorizations.
</div><h3 class="standard"><a class="sec" name="background3" id="background3"/>2.3&#160;&#160;The Singular Value Decomposition</h3>
<div class="paramtext">The <span class="italic">singular value decomposition</span> (SVD) of an <m:math><m:mi>m</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>&#160;is given by

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>A</m:mi>
 <m:mo>=</m:mo><m:mi>U</m:mi><m:mi>&#931;</m:mi><m:msup><m:mi>V</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mtext>, &#8195;</m:mtext><m:mfenced separators=""><m:mi>A</m:mi><m:mo>=</m:mo><m:mi>U</m:mi><m:mi>&#931;</m:mi><m:msup><m:mi>V</m:mi><m:mi mathvariant="normal">H</m:mi></m:msup><m:mtext>in the complex case</m:mtext></m:mfenced>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:mi>U</m:mi></m:math>&#160;and <m:math><m:mi>V</m:mi></m:math>&#160;are orthogonal (unitary) and <m:math><m:mi>&#931;</m:mi></m:math>&#160;is an <m:math><m:mi>m</m:mi></m:math>&#160;by <m:math><m:mi>n</m:mi></m:math>&#160;diagonal matrix with real diagonal elements, <m:math><m:msub><m:mi>&#963;</m:mi><m:mi>i</m:mi></m:msub></m:math>, such that

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:msub><m:mi>&#963;</m:mi><m:mn>1</m:mn></m:msub><m:mo>&#8805;</m:mo><m:msub><m:mi>&#963;</m:mi><m:mn>2</m:mn></m:msub><m:mo>&#8805;</m:mo><m:mo>&#8943;</m:mo><m:mo>&#8805;</m:mo><m:msub><m:mi>&#963;</m:mi><m:mrow><m:mi>min</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:mi>m</m:mi><m:mo>,</m:mo><m:mi>n</m:mi></m:mfenced></m:mrow></m:msub><m:mo>&#8805;</m:mo><m:mn>0</m:mn><m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

The <m:math><m:msub><m:mi>&#963;</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;are the <span class="italic">singular values</span> of <m:math><m:mi>A</m:mi></m:math>&#160;and the first <m:math><m:mrow><m:mi>min</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:mi>m</m:mi><m:mo>,</m:mo><m:mi>n</m:mi></m:mfenced></m:mrow></m:math>&#160;columns of <m:math><m:mi>U</m:mi></m:math>&#160;and <m:math><m:mi>V</m:mi></m:math>&#160;are the <span class="italic">left</span> and <span class="italic">right singular vectors</span> of <m:math><m:mi>A</m:mi></m:math>.  The singular values and singular vectors satisfy

<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>i</m:mi></m:msub><m:mo>=</m:mo><m:msub><m:mi>&#963;</m:mi><m:mi>i</m:mi></m:msub><m:msub><m:mi>u</m:mi><m:mi>i</m:mi></m:msub><m:mtext>&#8195; and &#8195;</m:mtext><m:msup><m:mi>A</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:msub><m:mi>u</m:mi><m:mi>i</m:mi></m:msub><m:mo>=</m:mo><m:msub><m:mi>&#963;</m:mi><m:mi>i</m:mi></m:msub><m:msub><m:mi>v</m:mi><m:mi>i</m:mi></m:msub><m:mtext>&#8195;</m:mtext><m:mfenced separators=""><m:mtext>or &#8203;</m:mtext><m:msup><m:mi>A</m:mi><m:mi mathvariant="normal">H</m:mi></m:msup><m:msub><m:mi>u</m:mi><m:mi>i</m:mi></m:msub><m:mo>=</m:mo><m:msub><m:mi>&#963;</m:mi><m:mi>i</m:mi></m:msub><m:msub><m:mi>v</m:mi><m:mi>i</m:mi></m:msub></m:mfenced>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:msub><m:mi>u</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;and <m:math><m:msub><m:mi>v</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;are the <m:math><m:mi>i</m:mi></m:math>th columns of <m:math><m:mi>U</m:mi></m:math>&#160;and <m:math><m:mi>V</m:mi></m:math>&#160;respectively.</div><div class="paramtext">The computation proceeds in the following stages.
<ol class="listnumber"><li class="listnumber">The matrix <m:math><m:mi>A</m:mi></m:math>&#160;is reduced to bidiagonal form <m:math><m:mi>A</m:mi><m:mo>=</m:mo><m:msub><m:mi>U</m:mi><m:mn>1</m:mn></m:msub><m:mi>B</m:mi><m:msubsup><m:mi>V</m:mi><m:mn>1</m:mn><m:mi mathvariant="normal">T</m:mi></m:msubsup></m:math>&#160;if <m:math><m:mi>A</m:mi></m:math>&#160;is real (<m:math><m:mi>A</m:mi><m:mo>=</m:mo><m:msub><m:mi>U</m:mi><m:mn>1</m:mn></m:msub><m:mi>B</m:mi><m:msubsup><m:mi>V</m:mi><m:mn>1</m:mn><m:mi mathvariant="normal">H</m:mi></m:msubsup></m:math>&#160;if <m:math><m:mi>A</m:mi></m:math>&#160;is complex), where <m:math><m:msub><m:mi>U</m:mi><m:mn>1</m:mn></m:msub></m:math>&#160;and <m:math><m:msub><m:mi>V</m:mi><m:mn>1</m:mn></m:msub></m:math>&#160;are orthogonal (unitary if <m:math><m:mi>A</m:mi></m:math>&#160;is complex), and <m:math><m:mi>B</m:mi></m:math>&#160;is real and upper bidiagonal when <m:math><m:mi>m</m:mi><m:mo>&#8805;</m:mo><m:mi>n</m:mi></m:math>&#160;and lower bidiagonal when <m:math><m:mi>m</m:mi><m:mo>&lt;</m:mo><m:mi>n</m:mi></m:math>, so that <m:math><m:mi>B</m:mi></m:math>&#160;is nonzero only on the main diagonal and either on the first superdiagonal (if <m:math><m:mi>m</m:mi><m:mo>&#8805;</m:mo><m:mi>n</m:mi></m:math>) or the first subdiagonal (if <m:math><m:mi>m</m:mi><m:mo>&lt;</m:mo><m:mi>n</m:mi></m:math>).</li><li class="listnumber">The SVD of the bidiagonal matrix <m:math><m:mi>B</m:mi></m:math>&#160;is computed as <m:math><m:mi>B</m:mi><m:mo>=</m:mo><m:msub><m:mi>U</m:mi><m:mn>2</m:mn></m:msub><m:mi>&#931;</m:mi>
 <m:msubsup><m:mi>V</m:mi><m:mn>2</m:mn><m:mi mathvariant="normal">T</m:mi></m:msubsup>
</m:math>, where <m:math><m:msub><m:mi>U</m:mi><m:mn>2</m:mn></m:msub></m:math>&#160;and <m:math><m:msub><m:mi>V</m:mi><m:mn>2</m:mn></m:msub></m:math>&#160;are orthogonal and <m:math><m:mi>&#931;</m:mi></m:math>&#160;is diagonal as described above.  The singular vectors of <m:math><m:mi>A</m:mi></m:math>&#160;are then <m:math><m:mi>U</m:mi><m:mo>=</m:mo><m:msub><m:mi>U</m:mi><m:mn>1</m:mn></m:msub><m:msub><m:mi>U</m:mi><m:mn>2</m:mn></m:msub></m:math>&#160;and <m:math><m:mi>V</m:mi><m:mo>=</m:mo><m:msub><m:mi>V</m:mi><m:mn>1</m:mn></m:msub><m:msub><m:mi>V</m:mi><m:mn>2</m:mn></m:msub></m:math>.</li></ol>
</div><div class="paramtext">If <m:math><m:mi>m</m:mi><m:mo>&#8811;</m:mo><m:mi>n</m:mi></m:math>, it may be more efficient to first perform a <m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;factorization of <m:math><m:mi>A</m:mi></m:math>, and then compute the SVD of 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>R</m:mi></m:math>, since if <m:math><m:mi>A</m:mi><m:mo>=</m:mo><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;and <m:math><m:mi>R</m:mi><m:mo>=</m:mo><m:mi>U</m:mi><m:mi>&#931;</m:mi><m:msup><m:mi>V</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup></m:math>, then the SVD of <m:math><m:mi>A</m:mi></m:math>&#160;is given by <m:math><m:mi>A</m:mi><m:mo>=</m:mo><m:mfenced separators=""><m:mi>Q</m:mi><m:mi>U</m:mi></m:mfenced><m:mi>&#931;</m:mi><m:msup><m:mi>V</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup></m:math>.</div><div class="paramtext">Similarly, if <m:math><m:mi>m</m:mi><m:mo>&#8810;</m:mo><m:mi>n</m:mi></m:math>, it may be more efficient to first perform an <m:math><m:mi>L</m:mi><m:mi>Q</m:mi></m:math>&#160;factorization of <m:math><m:mi>A</m:mi></m:math>.</div><div class="paramtext">This chapter supports two primary algorithms for computing the SVD of a bidiagonal matrix.  They are:
<table class="standard-100"><tr>
<td style="width:2.1em;" valign="baseline">(i)</td>
<td valign="top">the divide and conquer algorithm;</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">(ii)</td>
<td valign="top">the <m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;algorithm.</td>
</tr></table>
</div><div class="paramtext">The divide and conquer algorithm is much faster than the <m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;algorithm if singular vectors of large matrices are required.</div><h3 class="standard"><a class="sec" name="background4" id="background4"/>2.4&#160;&#160;The Singular Value Decomposition and Least Squares Problems</h3>
<div class="paramtext">The SVD may be used to find a minimum norm solution to a (possibly) rank-deficient linear least squares problem <a class="eqn" href="#eqn1">(1)</a>.  The effective rank, <m:math><m:mi>k</m:mi></m:math>, of <m:math><m:mi>A</m:mi></m:math>&#160;can be determined as the number of singular values which exceed a suitable threshold.  Let <m:math><m:mover><m:mi>&#931;</m:mi><m:mo>^</m:mo></m:mover></m:math>&#160;be the leading <m:math><m:mi>k</m:mi></m:math>&#160;by <m:math><m:mi>k</m:mi></m:math>&#160;sub-matrix of <m:math><m:mi>&#931;</m:mi></m:math>, and <m:math><m:mover><m:mi>V</m:mi><m:mo>^</m:mo></m:mover></m:math>&#160;be the matrix consisting of the first <m:math><m:mi>k</m:mi></m:math>&#160;columns of <m:math><m:mi>V</m:mi></m:math>.  Then the solution is given by

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>x</m:mi>
 <m:mo>=</m:mo><m:mover><m:mi>V</m:mi><m:mo>^</m:mo></m:mover><m:msup><m:mover><m:mi>&#931;</m:mi><m:mo>^</m:mo></m:mover><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msup><m:msub><m:mover><m:mi>c</m:mi><m:mo>^</m:mo></m:mover><m:mn>1</m:mn></m:msub><m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:msub><m:mover><m:mi>c</m:mi><m:mo>^</m:mo></m:mover><m:mn>1</m:mn></m:msub></m:math>&#160;consists of the first <m:math><m:mi>k</m:mi></m:math>&#160;elements of <m:math><m:mi>c</m:mi><m:mo>=</m:mo><m:msup><m:mi>U</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>b</m:mi><m:mo>=</m:mo>
 <m:msubsup><m:mi>U</m:mi><m:mn>2</m:mn><m:mi mathvariant="normal">T</m:mi></m:msubsup><m:msubsup><m:mi>U</m:mi><m:mn>1</m:mn><m:mi mathvariant="normal">T</m:mi></m:msubsup>
<m:mi>b</m:mi></m:math>.</div><h3 class="standard"><a class="sec" name="background5a" id="background5a"/>2.5&#160;&#160;Generalized Linear Least Squares Problems</h3>
<div class="paramtext">The simple type of linear least squares problem described in  <a class="sec" href="#background1">Section 2.1</a> can be generalized in various ways.
<ol class="listnumber"><li class="listnumber">Linear least squares problems with <b>equality constraints</b>:

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mtext>find &#8203;</m:mtext><m:mi>x</m:mi><m:mtext>&#8203; to minimize &#8203;</m:mtext><m:mi>S</m:mi><m:mo>=</m:mo><m:msup><m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>c</m:mi><m:mo>-</m:mo><m:mi>A</m:mi><m:mi>x</m:mi></m:mfenced><m:mn>2</m:mn></m:msub><m:mn>2</m:mn></m:msup><m:mtext>&#8195; subject to &#8195;</m:mtext><m:mi>B</m:mi><m:mi>x</m:mi><m:mo>=</m:mo><m:mi>d</m:mi><m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:mi>A</m:mi></m:math>&#160;is <m:math><m:mi>m</m:mi></m:math>&#160;by <m:math><m:mi>n</m:mi></m:math>&#160;and <m:math><m:mi>B</m:mi></m:math>&#160;is <m:math><m:mi>p</m:mi></m:math>&#160;by <m:math><m:mi>n</m:mi></m:math>, with <m:math><m:mi>p</m:mi><m:mo>&#8804;</m:mo><m:mi>n</m:mi><m:mo>&#8804;</m:mo><m:mi>m</m:mi><m:mo>+</m:mo><m:mi>p</m:mi></m:math>.  The equations <m:math><m:mi>B</m:mi><m:mi>x</m:mi><m:mo>=</m:mo><m:mi>d</m:mi></m:math>&#160;may be regarded as a set of equality constraints on the problem of minimizing <m:math><m:mi>S</m:mi></m:math>.  Alternatively the problem may be regarded as solving an overdetermined system of equations

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mfenced><m:mtable>
  <m:mtr>
   <m:mtd><m:mi>A</m:mi></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:mi>B</m:mi></m:mtd>
  </m:mtr>
 </m:mtable></m:mfenced>
<m:mi>x</m:mi><m:mo>=</m:mo> <m:mfenced><m:mtable>
  <m:mtr>
   <m:mtd><m:mi>c</m:mi></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:mi>d</m:mi></m:mtd>
  </m:mtr>
 </m:mtable></m:mfenced>
<m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

where some of the equations (those involving <m:math><m:mi>B</m:mi></m:math>) are to be solved exactly, and the others (those involving <m:math><m:mi>A</m:mi></m:math>) are to be solved in a least squares sense.  The problem has a unique solution on the assumptions that <m:math><m:mi>B</m:mi></m:math>&#160;has full row rank <m:math><m:mi>p</m:mi></m:math>&#160;and the matrix <m:math>
 <m:mfenced><m:mtable>
  <m:mtr>
   <m:mtd><m:mi>A</m:mi></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:mi>B</m:mi></m:mtd>
  </m:mtr>
 </m:mtable></m:mfenced>
</m:math>&#160;has full column rank <m:math><m:mi>n</m:mi></m:math>.  (For linear least squares problems with <b>inequality constraints</b>,  refer to <a class="chap" href="../E04/e04conts.xml">Chapter E04</a>.)</li><li class="listnumber"><b>General Gauss&#8211;Markov linear model problems</b>:

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mtext>minimize &#8203;</m:mtext><m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>y</m:mi></m:mfenced><m:mn>2</m:mn></m:msub><m:mtext>&#8195; subject to &#8195;</m:mtext><m:mi>d</m:mi><m:mo>=</m:mo><m:mi>A</m:mi><m:mi>x</m:mi><m:mo>+</m:mo><m:mi>B</m:mi><m:mi>y</m:mi><m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:mi>A</m:mi></m:math>&#160;is <m:math><m:mi>m</m:mi></m:math>&#160;by <m:math><m:mi>n</m:mi></m:math>&#160;and <m:math><m:mi>B</m:mi></m:math>&#160;is <m:math><m:mi>m</m:mi></m:math>&#160;by <m:math><m:mi>p</m:mi></m:math>, with <m:math><m:mi>n</m:mi><m:mo>&#8804;</m:mo><m:mi>m</m:mi><m:mo>&#8804;</m:mo><m:mi>n</m:mi><m:mo>+</m:mo><m:mi>p</m:mi></m:math>.  When <m:math><m:mi>B</m:mi><m:mo>=</m:mo><m:mi>I</m:mi></m:math>, the problem reduces to an ordinary linear least squares problem.  When <m:math><m:mi>B</m:mi></m:math>&#160;is square and nonsingular, it is equivalent to a  <b>weighted linear least squares problem</b>:

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mtext>find &#8203;</m:mtext><m:mi>x</m:mi><m:mtext>&#8203; to minimize &#8203;</m:mtext><m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:msup><m:mi>B</m:mi><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msup><m:mfenced separators=""><m:mi>d</m:mi><m:mo>-</m:mo><m:mi>A</m:mi><m:mi>x</m:mi></m:mfenced></m:mfenced><m:mn>2</m:mn></m:msub><m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

The problem has a unique solution on the assumptions that <m:math><m:mi>A</m:mi></m:math>&#160;has full column rank <m:math><m:mi>n</m:mi></m:math>, and the matrix <m:math><m:mfenced separators=""><m:mi>A</m:mi><m:mo>,</m:mo><m:mi>B</m:mi></m:mfenced></m:math>&#160;has full row rank <m:math><m:mi>m</m:mi></m:math>. Unless <m:math><m:mi>B</m:mi></m:math>&#160;is diagonal, for numerical stability it is generally preferable to solve a weighted linear least squares problem as a general Gauss&#8211;Markov linear model problem.</li></ol>
</div><h3 class="standard"><a class="sec" name="background6a" id="background6a"/>2.6&#160;&#160;Generalized Orthogonal Factorization and Generalized Linear Least Squares Problems</h3><h4 class="standard"><a class="sec" name="background6a1" id="background6a1"/>2.6.1&#160;&#160;Generalized <m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;Factorization</h4>
<div class="paramtext">The <b>generalized <m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;(GQR) factorization</b> of an <m:math><m:mi>n</m:mi></m:math>&#160;by <m:math><m:mi>m</m:mi></m:math>&#160;matrix <m:math><m:mi>A</m:mi></m:math>&#160;and an <m:math><m:mi>n</m:mi></m:math>&#160;by <m:math><m:mi>p</m:mi></m:math>&#160;matrix <m:math><m:mi>B</m:mi></m:math>&#160;is given by the pair of factorizations

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>A</m:mi>
 <m:mo>=</m:mo>
 <m:mi>Q</m:mi><m:mi>R</m:mi>
 <m:mtext>&#8195; and &#8195;</m:mtext>
 <m:mi>B</m:mi>
 <m:mo>=</m:mo>
 <m:mi>Q</m:mi><m:mi>T</m:mi><m:mi>Z</m:mi>
 <m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:mi>Q</m:mi></m:math>&#160;and <m:math><m:mi>Z</m:mi></m:math>&#160;are respectively <m:math><m:mi>n</m:mi></m:math>&#160;by <m:math><m:mi>n</m:mi></m:math>&#160;and <m:math><m:mi>p</m:mi></m:math>&#160;by <m:math><m:mi>p</m:mi></m:math>&#160;orthogonal matrices (or unitary matrices if <m:math><m:mi>A</m:mi></m:math>&#160;and <m:math><m:mi>B</m:mi></m:math>&#160;are complex).  <m:math><m:mi>R</m:mi></m:math>&#160;has the form

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>R</m:mi>
 <m:mo>=</m:mo>
 <m:mtable columnalign="right center"><m:mtr><m:mtd/><m:mtd/><m:mtd><m:mi>m</m:mi></m:mtd><m:mtd/></m:mtr><m:mtr><m:mtd columnalign="right"><m:mi>m</m:mi></m:mtd><m:mtd rowalign="top" rowspan="2"><m:mo minsize="2.2em">(</m:mo></m:mtd><m:mtd><m:msub><m:mi>R</m:mi><m:mn>11</m:mn></m:msub></m:mtd><m:mtd rowalign="top" rowspan="2"><m:mo minsize="2.2em">)</m:mo></m:mtd></m:mtr><m:mtr>
   <m:mtd columnalign="right"><m:mi>n</m:mi><m:mo>-</m:mo><m:mi>m</m:mi></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
  </m:mtr></m:mtable>
 <m:mtext>,&#8195;if &#8203;</m:mtext>
 <m:mi>n</m:mi>
 <m:mo>&#8805;</m:mo>
 <m:mi>m</m:mi>
 <m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

or

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>R</m:mi>
 <m:mo>=</m:mo>
 <m:mtable columnalign="right center"><m:mtr><m:mtd/><m:mtd/><m:mtd><m:mi>n</m:mi></m:mtd><m:mtd><m:mi>m</m:mi><m:mo>-</m:mo><m:mi>n</m:mi></m:mtd><m:mtd/></m:mtr><m:mtr><m:mtd columnalign="right"><m:mi>n</m:mi></m:mtd><m:mtd rowalign="top" rowspan="1"><m:mo minsize="1.1em">(</m:mo></m:mtd><m:mtd><m:msub><m:mi>R</m:mi><m:mn>11</m:mn></m:msub></m:mtd><m:mtd><m:msub><m:mi>R</m:mi><m:mn>12</m:mn></m:msub></m:mtd><m:mtd rowalign="top" rowspan="1"><m:mo minsize="1.1em">)</m:mo></m:mtd></m:mtr></m:mtable>
 <m:mtext>,&#8195;if &#8203;</m:mtext>
 <m:mi>n</m:mi>
 <m:mo>&lt;</m:mo>
 <m:mi>m</m:mi>
 <m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math>
 <m:msub><m:mi>R</m:mi><m:mn>11</m:mn></m:msub>
</m:math>&#160;is upper triangular. <m:math><m:mi>T</m:mi></m:math>&#160;has the form

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>T</m:mi>
 <m:mo>=</m:mo>
 <m:mtable columnalign="right center"><m:mtr><m:mtd/><m:mtd/><m:mtd><m:mi>p</m:mi><m:mo>-</m:mo><m:mi>n</m:mi></m:mtd><m:mtd><m:mi>n</m:mi></m:mtd><m:mtd/></m:mtr><m:mtr><m:mtd columnalign="right"><m:mi>n</m:mi></m:mtd><m:mtd rowalign="top" rowspan="1"><m:mo minsize="1.1em">(</m:mo></m:mtd><m:mtd><m:mn>0</m:mn></m:mtd><m:mtd><m:msub><m:mi>T</m:mi><m:mn>12</m:mn></m:msub></m:mtd><m:mtd rowalign="top" rowspan="1"><m:mo minsize="1.1em">)</m:mo></m:mtd></m:mtr></m:mtable>
 <m:mtext>,&#8195;if &#8203;</m:mtext>
 <m:mi>n</m:mi>
 <m:mo>&#8804;</m:mo>
 <m:mi>p</m:mi>
 <m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

or

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>T</m:mi>
 <m:mo>=</m:mo>
 <m:mtable columnalign="right center"><m:mtr><m:mtd/><m:mtd/><m:mtd><m:mi>p</m:mi></m:mtd><m:mtd/></m:mtr><m:mtr><m:mtd columnalign="right"><m:mi>n</m:mi><m:mo>-</m:mo><m:mi>p</m:mi></m:mtd><m:mtd rowalign="top" rowspan="2"><m:mo minsize="2.2em">(</m:mo></m:mtd><m:mtd><m:msub><m:mi>T</m:mi><m:mn>11</m:mn></m:msub></m:mtd><m:mtd rowalign="top" rowspan="2"><m:mo minsize="2.2em">)</m:mo></m:mtd></m:mtr><m:mtr>
   <m:mtd columnalign="right"><m:mi>p</m:mi></m:mtd>
   <m:mtd><m:msub><m:mi>T</m:mi><m:mn>21</m:mn></m:msub></m:mtd>
  </m:mtr></m:mtable>
 <m:mtext>,&#8195;if &#8203;</m:mtext>
 <m:mi>n</m:mi>
 <m:mo>&gt;</m:mo>
 <m:mi>p</m:mi>
 <m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math>
 <m:msub><m:mi>T</m:mi><m:mn>12</m:mn></m:msub>
</m:math>&#160;or <m:math>
 <m:msub><m:mi>T</m:mi><m:mn>21</m:mn></m:msub>
</m:math>&#160;is upper triangular.
</div><div class="paramtext">Note that if <m:math><m:mi>B</m:mi></m:math>&#160;is square and nonsingular, the GQR factorization of <m:math><m:mi>A</m:mi></m:math>&#160;and <m:math><m:mi>B</m:mi></m:math>&#160;implicitly gives the <m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;factorization of the matrix <m:math>
 <m:msup><m:mi>B</m:mi><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msup>
 <m:mi>A</m:mi>
</m:math>:

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:msup><m:mi>B</m:mi><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msup>
 <m:mo>=</m:mo>
 <m:msup><m:mi>Z</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup>
 <m:mfenced separators="">
  <m:msup><m:mi>T</m:mi><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msup>
  <m:mi>R</m:mi>
 </m:mfenced>
</m:math></td><td class="formula2"/></tr></table></div>

without explicitly computing the matrix inverse <m:math>
 <m:msup><m:mi>B</m:mi><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msup>
</m:math>&#160;or the product <m:math>
 <m:msup><m:mi>B</m:mi><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msup>
 <m:mi>A</m:mi>
</m:math>.
</div><div class="paramtext">The GQR factorization can be used to solve the general (Gauss&#8211;Markov) linear model problem (GLM) (see <a class="sec" href="#background5a">Section 2.5</a>, but note that <m:math><m:mi>A</m:mi></m:math>&#160;and <m:math><m:mi>B</m:mi></m:math>&#160;are dimensioned differently there as <m:math><m:mi>m</m:mi></m:math>&#160;by <m:math><m:mi>n</m:mi></m:math>&#160;and <m:math><m:mi>p</m:mi></m:math>&#160;by <m:math><m:mi>n</m:mi></m:math>&#160;respectively).  Using the GQR factorization of <m:math><m:mi>A</m:mi></m:math>&#160;and <m:math><m:mi>B</m:mi></m:math>, we rewrite the equation <m:math>
 <m:mi>d</m:mi>
 <m:mo>=</m:mo>
 <m:mi>A</m:mi><m:mi>x</m:mi>
 <m:mo>+</m:mo>
 <m:mi>B</m:mi><m:mi>y</m:mi>
</m:math>&#160;as

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mtable>
 <m:mtr columnalign="left">
  <m:mtd><m:msup><m:mi>Q</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>d</m:mi></m:mtd>
  <m:mtd>
   <m:mo>=</m:mo>
   <m:msup><m:mi>Q</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>A</m:mi><m:mi>x</m:mi>
   <m:mo>+</m:mo>
   <m:msup><m:mi>Q</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>B</m:mi><m:mi>y</m:mi>
  </m:mtd>
 </m:mtr><m:mtr columnalign="left">
  <m:mtd/>
  <m:mtd>
   <m:mo>=</m:mo>
   <m:mi>R</m:mi><m:mi>x</m:mi>
   <m:mo>+</m:mo>
   <m:mi>T</m:mi><m:mi>Z</m:mi><m:mi>y</m:mi><m:mtext>.</m:mtext>
  </m:mtd>
 </m:mtr>
</m:mtable>
</m:math></td><td class="formula2"/></tr></table></div></div><div class="paramtext">We partition this as

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mtable>
  <m:mtr>
   <m:mtd>
     <m:mfenced><m:mtable>
      <m:mtr>
       <m:mtd><m:msub><m:mi>d</m:mi><m:mn>1</m:mn></m:msub></m:mtd>
      </m:mtr><m:mtr>
       <m:mtd><m:msub><m:mi>d</m:mi><m:mn>2</m:mn></m:msub></m:mtd>
      </m:mtr>
     </m:mtable></m:mfenced>
   </m:mtd>
  </m:mtr>
 </m:mtable>
 <m:mo>=</m:mo>
 <m:mtable columnalign="right center"><m:mtr><m:mtd/><m:mtd/><m:mtd><m:mi>m</m:mi></m:mtd><m:mtd/></m:mtr><m:mtr><m:mtd columnalign="right"><m:mi>m</m:mi></m:mtd><m:mtd rowalign="top" rowspan="2"><m:mo minsize="2.2em">(</m:mo></m:mtd><m:mtd><m:msub><m:mi>R</m:mi><m:mn>11</m:mn></m:msub></m:mtd><m:mtd rowalign="top" rowspan="2"><m:mo minsize="2.2em">)</m:mo></m:mtd></m:mtr><m:mtr>
   <m:mtd columnalign="right"><m:mi>n</m:mi><m:mo>-</m:mo><m:mi>m</m:mi></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
  </m:mtr></m:mtable>
 <m:mi>x</m:mi>
 <m:mo>+</m:mo>
 <m:mtable columnalign="right center"><m:mtr><m:mtd/><m:mtd/><m:mtd><m:mi>p</m:mi><m:mo>-</m:mo><m:mi>n</m:mi><m:mo>+</m:mo><m:mi>m</m:mi></m:mtd><m:mtd><m:mi>n</m:mi><m:mo>-</m:mo><m:mi>m</m:mi></m:mtd><m:mtd/></m:mtr><m:mtr><m:mtd columnalign="right"><m:mi>m</m:mi></m:mtd><m:mtd rowalign="top" rowspan="2"><m:mo minsize="2.2em">(</m:mo></m:mtd><m:mtd><m:msub><m:mi>T</m:mi><m:mn>11</m:mn></m:msub></m:mtd><m:mtd><m:msub><m:mi>T</m:mi><m:mn>12</m:mn></m:msub></m:mtd><m:mtd rowalign="top" rowspan="2"><m:mo minsize="2.2em">)</m:mo></m:mtd></m:mtr><m:mtr>
   <m:mtd columnalign="right"><m:mi>n</m:mi><m:mo>-</m:mo><m:mi>m</m:mi></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:msub><m:mi>T</m:mi><m:mn>22</m:mn></m:msub></m:mtd>
  </m:mtr></m:mtable>
  <m:mfenced><m:mtable>
   <m:mtr>
    <m:mtd><m:msub><m:mi>y</m:mi><m:mn>1</m:mn></m:msub></m:mtd>
   </m:mtr><m:mtr>
    <m:mtd><m:msub><m:mi>y</m:mi><m:mn>2</m:mn></m:msub></m:mtd>
   </m:mtr>
  </m:mtable></m:mfenced>
</m:math></td><td class="formula2"/></tr></table></div>

where

<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>d</m:mi><m:mn>1</m:mn></m:msub></m:mtd>
    </m:mtr><m:mtr>
     <m:mtd><m:msub><m:mi>d</m:mi><m:mn>2</m:mn></m:msub></m:mtd>
   </m:mtr>
  </m:mtable></m:mfenced>
 <m:mo>&#8801;</m:mo>
 <m:msup><m:mi>Q</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>d</m:mi>
 <m:mtext>,&#8195; and &#8195;</m:mtext>
  <m:mfenced><m:mtable>
   <m:mtr>
     <m:mtd><m:msub><m:mi>y</m:mi><m:mn>1</m:mn></m:msub></m:mtd>
    </m:mtr><m:mtr>
     <m:mtd><m:msub><m:mi>y</m:mi><m:mn>2</m:mn></m:msub></m:mtd>
   </m:mtr>
  </m:mtable></m:mfenced>
 <m:mo>&#8801;</m:mo>
 <m:mi>Z</m:mi><m:mi>y</m:mi>
 <m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div></div><div class="paramtext">The GLM problem is solved by setting

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:msub><m:mi>y</m:mi><m:mn>1</m:mn></m:msub>
 <m:mo>=</m:mo>
 <m:mn>0</m:mn>
 <m:mtext>&#8195; and &#8195;</m:mtext>
 <m:msub><m:mi>y</m:mi><m:mn>2</m:mn></m:msub>
 <m:mo>=</m:mo>
 <m:msubsup><m:mi>T</m:mi><m:mn>22</m:mn><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msubsup>
 <m:msub><m:mi>d</m:mi><m:mn>2</m:mn></m:msub>
</m:math></td><td class="formula2"/></tr></table></div>

from which we obtain the desired solutions

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>x</m:mi>
 <m:mo>=</m:mo>
 <m:msubsup><m:mi>R</m:mi><m:mn>11</m:mn><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msubsup>
 <m:mfenced separators="">
  <m:msub><m:mi>d</m:mi><m:mn>1</m:mn></m:msub>
  <m:mo>-</m:mo>
  <m:msub><m:mi>T</m:mi><m:mn>12</m:mn></m:msub>
  <m:msub><m:mi>y</m:mi><m:mn>2</m:mn></m:msub>
 </m:mfenced>
 <m:mtext>&#8195; and &#8195;</m:mtext>
 <m:mi>y</m:mi>
 <m:mo>=</m:mo>
 <m:msup><m:mi>Z</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup>
  <m:mfenced><m:mtable>
   <m:mtr><m:mtd><m:mn>0</m:mn></m:mtd></m:mtr>
   <m:mtr><m:mtd><m:msub><m:mi>y</m:mi><m:mn>2</m:mn></m:msub></m:mtd></m:mtr>
  </m:mtable></m:mfenced>
 <m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div></div><h4 class="standard"><a class="sec" name="background6a2" id="background6a2"/>2.6.2&#160;&#160;Generalized <m:math><m:mi>R</m:mi><m:mi>Q</m:mi></m:math>&#160;Factorization</h4>
<div class="paramtext">The <b>generalized <m:math><m:mi>R</m:mi><m:mi>Q</m:mi></m:math>&#160;(GRQ) factorization</b> of an <m:math><m:mi>m</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>&#160;and a <m:math><m:mi>p</m:mi></m:math>&#160;by <m:math><m:mi>n</m:mi></m:math>&#160;matrix <m:math><m:mi>B</m:mi></m:math>&#160;is given by the pair of factorizations

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>A</m:mi>
 <m:mo>=</m:mo>
 <m:mi>R</m:mi>
 <m:mi>Q</m:mi>
 <m:mtext>, &#8195;</m:mtext>
 <m:mi>B</m:mi>
 <m:mo>=</m:mo>
 <m:mi>Z</m:mi>
 <m:mi>T</m:mi>
 <m:mi>Q</m:mi>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:mi>Q</m:mi></m:math>&#160;and <m:math><m:mi>Z</m:mi></m:math>&#160;are respectively <m:math><m:mi>n</m:mi></m:math>&#160;by <m:math><m:mi>n</m:mi></m:math>&#160;and <m:math><m:mi>p</m:mi></m:math>&#160;by <m:math><m:mi>p</m:mi></m:math>&#160;orthogonal matrices (or unitary matrices if <m:math><m:mi>A</m:mi></m:math>&#160;and <m:math><m:mi>B</m:mi></m:math>&#160;are complex). <m:math><m:mi>R</m:mi></m:math>&#160;has the form

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>R</m:mi>
 <m:mo>=</m:mo>
 <m:mtable columnalign="right center"><m:mtr><m:mtd/><m:mtd/><m:mtd><m:mi>n</m:mi><m:mo>-</m:mo><m:mi>m</m:mi></m:mtd><m:mtd><m:mi>m</m:mi></m:mtd><m:mtd/></m:mtr><m:mtr><m:mtd columnalign="right"><m:mi>m</m:mi></m:mtd><m:mtd rowalign="top" rowspan="1"><m:mo minsize="1.1em">(</m:mo></m:mtd><m:mtd><m:mn>0</m:mn></m:mtd><m:mtd><m:msub><m:mi>R</m:mi><m:mn>12</m:mn></m:msub></m:mtd><m:mtd rowalign="top" rowspan="1"><m:mo minsize="1.1em">)</m:mo></m:mtd></m:mtr></m:mtable>
 <m:mtext>, &#8195;if &#8203;</m:mtext>
 <m:mi>m</m:mi><m:mo>&#8804;</m:mo><m:mi>n</m:mi>
 <m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

or 

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>R</m:mi>
 <m:mo>=</m:mo>
 <m:mtable columnalign="right center"><m:mtr><m:mtd/><m:mtd/><m:mtd><m:mi>n</m:mi></m:mtd><m:mtd/></m:mtr><m:mtr><m:mtd columnalign="right"><m:mi>m</m:mi><m:mo>-</m:mo><m:mi>n</m:mi></m:mtd><m:mtd rowalign="top" rowspan="2"><m:mo minsize="2.2em">(</m:mo></m:mtd><m:mtd><m:msub><m:mi>R</m:mi><m:mn>11</m:mn></m:msub></m:mtd><m:mtd rowalign="top" rowspan="2"><m:mo minsize="2.2em">)</m:mo></m:mtd></m:mtr><m:mtr>
   <m:mtd columnalign="right"><m:mi>n</m:mi></m:mtd>
   <m:mtd><m:msub><m:mi>R</m:mi><m:mn>21</m:mn></m:msub></m:mtd>
  </m:mtr></m:mtable>
 <m:mtext>, &#8195;if &#8203;</m:mtext>
 <m:mi>m</m:mi><m:mo>&gt;</m:mo><m:mi>n</m:mi>
 <m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math>
 <m:msub><m:mi>R</m:mi><m:mn>12</m:mn></m:msub>
</m:math>&#160;or <m:math>
 <m:msub><m:mi>R</m:mi><m:mn>21</m:mn></m:msub>
</m:math>&#160;is upper triangular. <m:math><m:mi>T</m:mi></m:math>&#160;has the form

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>T</m:mi>
 <m:mo>=</m:mo>
 <m:mtable columnalign="right center"><m:mtr><m:mtd/><m:mtd/><m:mtd><m:mi>n</m:mi></m:mtd><m:mtd/></m:mtr><m:mtr><m:mtd columnalign="right"><m:mi>n</m:mi></m:mtd><m:mtd rowalign="top" rowspan="2"><m:mo minsize="2.2em">(</m:mo></m:mtd><m:mtd><m:msub><m:mi>T</m:mi><m:mn>11</m:mn></m:msub></m:mtd><m:mtd rowalign="top" rowspan="2"><m:mo minsize="2.2em">)</m:mo></m:mtd></m:mtr><m:mtr>
   <m:mtd columnalign="right"><m:mi>p</m:mi><m:mo>-</m:mo><m:mi>n</m:mi></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
  </m:mtr></m:mtable>
 <m:mtext>, &#8195; if &#8203;</m:mtext>
 <m:mi>p</m:mi><m:mo>&#8805;</m:mo><m:mi>n</m:mi>
 <m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

or 

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>T</m:mi>
 <m:mo>=</m:mo>
 <m:mtable columnalign="right center"><m:mtr><m:mtd/><m:mtd/><m:mtd><m:mi>p</m:mi></m:mtd><m:mtd><m:mi>n</m:mi><m:mo>-</m:mo><m:mi>p</m:mi></m:mtd><m:mtd/></m:mtr><m:mtr><m:mtd columnalign="right"><m:mi>p</m:mi></m:mtd><m:mtd rowalign="top" rowspan="1"><m:mo minsize="1.1em">(</m:mo></m:mtd><m:mtd><m:msub><m:mi>T</m:mi><m:mn>11</m:mn></m:msub></m:mtd><m:mtd><m:msub><m:mi>T</m:mi><m:mn>12</m:mn></m:msub></m:mtd><m:mtd rowalign="top" rowspan="1"><m:mo minsize="1.1em">)</m:mo></m:mtd></m:mtr></m:mtable>
 <m:mtext>, &#8195; if &#8203;</m:mtext>
 <m:mi>p</m:mi><m:mo>&lt;</m:mo><m:mi>n</m:mi>
 <m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math>
 <m:msub><m:mi>T</m:mi><m:mn>11</m:mn></m:msub>
</m:math>&#160;is upper triangular.</div><div class="paramtext">Note that if <m:math><m:mi>B</m:mi></m:math>&#160;is square and nonsingular, the GRQ factorization of <m:math><m:mi>A</m:mi></m:math>&#160;and <m:math><m:mi>B</m:mi></m:math>&#160;implicitly gives the <m:math><m:mi>R</m:mi><m:mi>Q</m:mi></m:math>&#160;factorization of the matrix <m:math>
 <m:mi>A</m:mi><m:msup><m:mi>B</m:mi><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msup>
</m:math>:

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>A</m:mi><m:msup><m:mi>B</m:mi><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msup>
 <m:mo>=</m:mo>
 <m:mfenced separators=""><m:mi>R</m:mi><m:msup><m:mi>T</m:mi><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msup></m:mfenced>
 <m:msup><m:mi>Z</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup>
</m:math></td><td class="formula2"/></tr></table></div>

without explicitly computing the matrix <m:math>
 <m:msup><m:mi>B</m:mi><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msup>
</m:math>&#160;or the product <m:math>
 <m:mi>A</m:mi><m:msup><m:mi>B</m:mi><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msup>
</m:math>.</div><div class="paramtext">The GRQ factorization can be used to solve the linear equality-constrained least squares problem (LSE) (see <a class="sec" href="#background5a">Section 2.5</a>).  We use the GRQ factorization of <m:math><m:mi>B</m:mi></m:math>&#160;and <m:math><m:mi>A</m:mi></m:math>&#160;(note that <m:math><m:mi>B</m:mi></m:math>&#160;and <m:math><m:mi>A</m:mi></m:math>&#160;have swapped roles), written as

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>B</m:mi>
 <m:mo>=</m:mo>
 <m:mi>T</m:mi>
 <m:mi>Q</m:mi>
 <m:mtext>&#8195; and &#8195;</m:mtext>
 <m:mi>A</m:mi>
 <m:mo>=</m:mo>
 <m:mi>Z</m:mi>
 <m:mi>R</m:mi>
 <m:mi>Q</m:mi>
 <m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div></div><div class="paramtext">We write the linear equality constraints <m:math>
 <m:mi>B</m:mi><m:mi>x</m:mi><m:mo>=</m:mo><m:mi>d</m:mi>
</m:math>&#160;as

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>T</m:mi>
 <m:mi>Q</m:mi>
 <m:mi>x</m:mi>
 <m:mo>=</m:mo>
 <m:mi>d</m:mi>
 <m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

which we partition as:

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mtable columnalign="right center"><m:mtr><m:mtd/><m:mtd/><m:mtd><m:mi>n</m:mi><m:mo>-</m:mo><m:mi>p</m:mi></m:mtd><m:mtd><m:mi>p</m:mi></m:mtd><m:mtd/></m:mtr><m:mtr><m:mtd columnalign="right"><m:mi>p</m:mi></m:mtd><m:mtd rowalign="top" rowspan="1"><m:mo minsize="1.1em">(</m:mo></m:mtd><m:mtd><m:mn>0</m:mn></m:mtd><m:mtd><m:msub><m:mi>T</m:mi><m:mn>12</m:mn></m:msub></m:mtd><m:mtd rowalign="top" rowspan="1"><m:mo minsize="1.1em">)</m:mo></m:mtd></m:mtr></m:mtable>
  <m:mfenced><m:mtable> 
   <m:mtr><m:mtd><m:msub><m:mi>x</m:mi><m:mn>1</m:mn></m:msub></m:mtd></m:mtr>
   <m:mtr><m:mtd><m:msub><m:mi>x</m:mi><m:mn>2</m:mn></m:msub></m:mtd></m:mtr>
  </m:mtable></m:mfenced>
 <m:mo>=</m:mo>
 <m:mi>d</m:mi>
 <m:mtext>&#8195; where &#8195;</m:mtext>
  <m:mfenced><m:mtable> 
   <m:mtr><m:mtd><m:msub><m:mi>x</m:mi><m:mn>1</m:mn></m:msub></m:mtd></m:mtr>
   <m:mtr><m:mtd><m:msub><m:mi>x</m:mi><m:mn>2</m:mn></m:msub></m:mtd></m:mtr>
  </m:mtable></m:mfenced>
 <m:mo>&#8801;</m:mo>
 <m:msub><m:mi>Q</m:mi><m:mi>x</m:mi></m:msub>
 <m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div></div><div class="paramtext">Therefore <m:math>
 <m:msub><m:mi>x</m:mi><m:mn>2</m:mn></m:msub>
</m:math>&#160;is the solution of the upper triangular system

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:msub><m:mi>T</m:mi><m:mn>12</m:mn></m:msub>
 <m:msub><m:mi>x</m:mi><m:mn>2</m:mn></m:msub>
 <m:mo>=</m:mo>
 <m:mi>d</m:mi>
 <m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div></div><div class="paramtext">Furthermore,

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mtable>
  <m:mtr>
   <m:mtd><m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>A</m:mi><m:mi>x</m:mi><m:mo>-</m:mo><m:mi>c</m:mi></m:mfenced><m:mn>2</m:mn></m:msub></m:mtd>
   <m:mtd><m:mo>=</m:mo></m:mtd>
   <m:mtd>
    <m:msub><m:mfenced open="&#8214;" close="&#8214;" separators="">
     <m:msup><m:mi>Z</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup>
     <m:mi>A</m:mi><m:mi>x</m:mi>
     <m:mo>-</m:mo>
     <m:msup><m:mi>Z</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup>
     <m:mi>c</m:mi>
    </m:mfenced><m:mn>2</m:mn></m:msub>
   </m:mtd>
  </m:mtr><m:mtr>
   <m:mtd/>
   <m:mtd><m:mo>=</m:mo></m:mtd>
   <m:mtd>
    <m:msub><m:mfenced open="&#8214;" close="&#8214;" separators="">
     <m:mi>R</m:mi><m:mi>Q</m:mi><m:mi>x</m:mi>
     <m:mo>-</m:mo>
     <m:msup><m:mi>Z</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup>
     <m:mi>c</m:mi>
    </m:mfenced><m:mn>2</m:mn></m:msub>
   </m:mtd>
  </m:mtr>
 </m:mtable>
 <m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div></div><div class="paramtext">We partition this expression as:

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mtable columnalign="right center"><m:mtr><m:mtd/><m:mtd/><m:mtd><m:mi>n</m:mi><m:mo>-</m:mo><m:mi>p</m:mi></m:mtd><m:mtd><m:mi>p</m:mi></m:mtd><m:mtd/></m:mtr><m:mtr><m:mtd columnalign="right"><m:mi>n</m:mi><m:mo>-</m:mo><m:mi>p</m:mi></m:mtd><m:mtd rowalign="top" rowspan="2"><m:mo minsize="2.2em">(</m:mo></m:mtd><m:mtd><m:msub><m:mi>R</m:mi><m:mn>11</m:mn></m:msub></m:mtd><m:mtd><m:msub><m:mi>R</m:mi><m:mn>12</m:mn></m:msub></m:mtd><m:mtd rowalign="top" rowspan="2"><m:mo minsize="2.2em">)</m:mo></m:mtd></m:mtr><m:mtr>
   <m:mtd columnalign="right"><m:mi>p</m:mi><m:mo>+</m:mo><m:mi>m</m:mi><m:mo>-</m:mo><m:mi>n</m:mi></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:msub><m:mi>R</m:mi><m:mn>22</m:mn></m:msub></m:mtd>
  </m:mtr></m:mtable>
  <m:mfenced><m:mtable>
   <m:mtr><m:mtd><m:msub><m:mi>x</m:mi><m:mn>1</m:mn></m:msub></m:mtd></m:mtr>
   <m:mtr><m:mtd><m:msub><m:mi>x</m:mi><m:mn>2</m:mn></m:msub></m:mtd></m:mtr>
  </m:mtable></m:mfenced>
 <m:mo>-</m:mo>
  <m:mfenced><m:mtable>
   <m:mtr><m:mtd><m:msub><m:mi>c</m:mi><m:mn>1</m:mn></m:msub></m:mtd></m:mtr>
   <m:mtr><m:mtd><m:msub><m:mi>c</m:mi><m:mn>2</m:mn></m:msub></m:mtd></m:mtr>
  </m:mtable></m:mfenced>
 <m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math>
  <m:mfenced><m:mtable>
   <m:mtr><m:mtd><m:msub><m:mi>c</m:mi><m:mn>1</m:mn></m:msub></m:mtd></m:mtr>
   <m:mtr><m:mtd><m:msub><m:mi>c</m:mi><m:mn>2</m:mn></m:msub></m:mtd></m:mtr>
  </m:mtable></m:mfenced>
 <m:mo>&#8801;</m:mo>
 <m:msup><m:mi>Z</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>c</m:mi>
</m:math>.</div><div class="paramtext">To solve the LSE problem, we set

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:msub><m:mi>R</m:mi><m:mn>11</m:mn></m:msub>
 <m:msub><m:mi>x</m:mi><m:mn>1</m:mn></m:msub>
 <m:mo>+</m:mo>
 <m:msub><m:mi>R</m:mi><m:mn>12</m:mn></m:msub>
 <m:msub><m:mi>x</m:mi><m:mn>2</m:mn></m:msub>
 <m:mo>-</m:mo>
 <m:msub><m:mi>c</m:mi><m:mn>1</m:mn></m:msub>
 <m:mo>=</m:mo>
 <m:mn>0</m:mn>
</m:math></td><td class="formula2"/></tr></table></div>

which gives <m:math>
 <m:msub><m:mi>x</m:mi><m:mn>1</m:mn></m:msub>
</m:math>&#160;as the solution of the upper triangular system

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:msub><m:mi>R</m:mi><m:mn>11</m:mn></m:msub>
 <m:msub><m:mi>x</m:mi><m:mn>1</m:mn></m:msub>
 <m:mo>=</m:mo>
 <m:msub><m:mi>c</m:mi><m:mn>1</m:mn></m:msub>
 <m:mo>-</m:mo>
 <m:msub><m:mi>R</m:mi><m:mn>12</m:mn></m:msub>
 <m:msub><m:mi>x</m:mi><m:mn>2</m:mn></m:msub>
 <m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div></div><div class="paramtext">Finally, the desired solution is given by 

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>x</m:mi>
 <m:mo>=</m:mo>
 <m:msup><m:mi>Q</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup>
  <m:mfenced><m:mtable>
   <m:mtr><m:mtd><m:msub><m:mi>x</m:mi><m:mn>1</m:mn></m:msub></m:mtd></m:mtr>
   <m:mtr><m:mtd><m:msub><m:mi>x</m:mi><m:mn>2</m:mn></m:msub></m:mtd></m:mtr>
  </m:mtable></m:mfenced>
 <m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div></div><h4 class="standard"><a class="sec" name="background6a3" id="background6a3"/>2.6.3&#160;&#160;Generalized Singular Value Decomposition (GSVD)</h4>
<div class="paramtext">The <b>generalized (or quotient) singular value decomposition</b> of an <m:math><m:mi>m</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>&#160;and a <m:math><m:mi>p</m:mi></m:math>&#160;by <m:math><m:mi>n</m:mi></m:math>&#160;matrix <m:math><m:mi>B</m:mi></m:math>&#160;is given by the pair of factorizations

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>A</m:mi>
 <m:mo>=</m:mo>
 <m:mi>U</m:mi>
 <m:msub><m:mi>&#931;</m:mi><m:mn>1</m:mn></m:msub>
 <m:mfenced separators="" open="[" close="]"><m:mn>0</m:mn><m:mo>,</m:mo><m:mi>R</m:mi></m:mfenced>
 <m:msup><m:mi>Q</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup>
 <m:mtext>&#8195; and &#8195;</m:mtext>
 <m:mi>B</m:mi>
 <m:mo>=</m:mo>
 <m:mi>V</m:mi>
 <m:msub><m:mi>&#931;</m:mi><m:mn>2</m:mn></m:msub>
 <m:mfenced separators="" open="[" close="]"><m:mn>0</m:mn><m:mo>,</m:mo><m:mi>R</m:mi></m:mfenced>
 <m:msup><m:mi>Q</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup>
 <m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div></div><div class="paramtext">The matrices in these factorizations have the following properties:
<table class="standard-100"><tr>
<td style="width:1.5em;" valign="baseline">&#8211;</td>
<td valign="top"><m:math><m:mi>U</m:mi></m:math>&#160;is <m:math><m:mi>m</m:mi></m:math>&#160;by <m:math><m:mi>m</m:mi></m:math>, <m:math><m:mi>V</m:mi></m:math>&#160;is <m:math><m:mi>p</m:mi></m:math>&#160;by <m:math><m:mi>p</m:mi></m:math>, <m:math><m:mi>Q</m:mi></m:math>&#160;is <m:math><m:mi>n</m:mi></m:math>&#160;by <m:math><m:mi>n</m:mi></m:math>, and all three matrices are orthogonal.  If <m:math><m:mi>A</m:mi></m:math>&#160;and <m:math><m:mi>B</m:mi></m:math>&#160;are complex, these matrices are unitary instead of orthogonal, and <m:math>
 <m:msup><m:mi>Q</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup>
</m:math>&#160;should be replaced by <m:math>
 <m:msup><m:mi>Q</m:mi><m:mi mathvariant="normal">H</m:mi></m:msup>
</m:math>&#160;in the pair of factorizations.</td>
</tr><tr>
<td style="width:1.5em;" valign="baseline">&#8211;</td>
<td valign="top"><m:math><m:mi>R</m:mi></m:math>&#160;is <m:math><m:mi>r</m:mi></m:math>&#160;by <m:math><m:mi>r</m:mi></m:math>, upper triangular and nonsingular. <m:math>
 <m:mfenced separators="" open="[" close="]"><m:mn>0</m:mn><m:mo>,</m:mo><m:mi>R</m:mi></m:mfenced>
</m:math>&#160;is <m:math><m:mi>r</m:mi></m:math>&#160;by <m:math><m:mi>n</m:mi></m:math>&#160;(in other words, the <m:math><m:mn>0</m:mn></m:math>&#160;is an <m:math><m:mi>r</m:mi></m:math>&#160;by <m:math><m:mi>n</m:mi><m:mo>-</m:mo><m:mi>r</m:mi></m:math>&#160;zero matrix).  The integer <m:math><m:mi>r</m:mi></m:math>&#160;is the rank of <m:math>
  <m:mfenced><m:mtable>
   <m:mtr>
    <m:mtd><m:mi>A</m:mi></m:mtd>
   </m:mtr><m:mtr>
    <m:mtd><m:mi>B</m:mi></m:mtd>
   </m:mtr>
  </m:mtable></m:mfenced>
</m:math>, and satisfies <m:math><m:mi>r</m:mi><m:mo>&#8804;</m:mo><m:mi>n</m:mi></m:math>.</td>
</tr><tr>
<td style="width:1.5em;" valign="baseline">&#8211;</td>
<td valign="top"><m:math>
 <m:msub><m:mi>&#931;</m:mi><m:mn>1</m:mn></m:msub>
</m:math>&#160;is <m:math><m:mi>m</m:mi></m:math>&#160;by <m:math><m:mi>r</m:mi></m:math>, <m:math>
 <m:msub><m:mi>&#931;</m:mi><m:mn>2</m:mn></m:msub>
</m:math>&#160;is <m:math><m:mi>p</m:mi></m:math>&#160;by <m:math><m:mi>r</m:mi></m:math>, both are real, non-negative and diagonal, and <m:math>
 <m:msubsup><m:mi>&#931;</m:mi><m:mn>1</m:mn><m:mi mathvariant="normal">T</m:mi></m:msubsup>
 <m:msub><m:mi>&#931;</m:mi><m:mn>1</m:mn></m:msub>
 <m:mo>+</m:mo>
 <m:msubsup><m:mi>&#931;</m:mi><m:mn>2</m:mn><m:mi mathvariant="normal">T</m:mi></m:msubsup>
 <m:msub><m:mi>&#931;</m:mi><m:mn>2</m:mn></m:msub>
 <m:mo>=</m:mo>
 <m:mi>I</m:mi>
</m:math>.  Write <m:math>
 <m:msubsup><m:mi>&#931;</m:mi><m:mn>1</m:mn><m:mi mathvariant="normal">T</m:mi></m:msubsup>
 <m:msub><m:mi>&#931;</m:mi><m:mn>1</m:mn></m:msub>
 <m:mo>=</m:mo>
 <m:mrow><m:mi>diag</m:mi><m:mfenced separators=""><m:msubsup><m:mi>&#945;</m:mi><m:mn>1</m:mn><m:mn>2</m:mn></m:msubsup><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:msubsup><m:mi>&#945;</m:mi><m:mi>r</m:mi><m:mn>2</m:mn></m:msubsup></m:mfenced></m:mrow>
</m:math>&#160;and <m:math>
<m:msubsup><m:mi>&#931;</m:mi><m:mn>2</m:mn><m:mi mathvariant="normal">T</m:mi></m:msubsup>
 <m:msub><m:mi>&#931;</m:mi><m:mn>2</m:mn></m:msub>
 <m:mo>=</m:mo>
 <m:mrow><m:mi>diag</m:mi><m:mfenced separators=""><m:msubsup><m:mi>&#946;</m:mi><m:mn>1</m:mn><m:mn>2</m:mn></m:msubsup><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:msubsup><m:mi>&#946;</m:mi><m:mi>r</m:mi><m:mn>2</m:mn></m:msubsup></m:mfenced></m:mrow>
</m:math>, where <m:math>
 <m:msub><m:mi>&#945;</m:mi><m:mi>i</m:mi></m:msub>
</m:math>&#160;and <m:math>
 <m:msub><m:mi>&#946;</m:mi><m:mi>i</m:mi></m:msub>
</m:math>&#160;lie in the interval from <m:math><m:mn>0</m:mn></m:math>&#160;to <m:math><m:mn>1</m:mn></m:math>.  The ratios <m:math>
 <m:msub><m:mi>&#945;</m:mi><m:mn>1</m:mn></m:msub>
 <m:mo>/</m:mo>
 <m:msub><m:mi>&#946;</m:mi><m:mn>1</m:mn></m:msub>
 <m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo>
 <m:msub><m:mi>&#945;</m:mi><m:mi>r</m:mi></m:msub>
 <m:mo>/</m:mo>
 <m:msub><m:mi>&#946;</m:mi><m:mi>r</m:mi></m:msub>
</m:math>&#160;are called the <b>generalized singular values</b> of the pair <m:math><m:mi>A</m:mi></m:math>, <m:math><m:mi>B</m:mi></m:math>.  If <m:math>
 <m:msub><m:mi>&#946;</m:mi><m:mi>i</m:mi></m:msub>
 <m:mo>=</m:mo>
 <m:mn>0</m:mn>
</m:math>, then the generalized singular value <m:math>
 <m:msub><m:mi>&#945;</m:mi><m:mi>i</m:mi></m:msub>
 <m:mo>/</m:mo>
 <m:msub><m:mi>&#946;</m:mi><m:mi>i</m:mi></m:msub>
</m:math>&#160;is <b>infinite</b>.</td>
</tr></table>
</div><div class="paramtext"><m:math>
 <m:msub><m:mi>&#931;</m:mi><m:mn>1</m:mn></m:msub>
</m:math>&#160;and <m:math>
 <m:msub><m:mi>&#931;</m:mi><m:mn>2</m:mn></m:msub>
</m:math>&#160;have the following detailed structures, depending on whether <m:math>
 <m:mi>m</m:mi><m:mo>-</m:mo><m:mi>r</m:mi><m:mo>&#8805;</m:mo><m:mn>0</m:mn>
</m:math>&#160;or <m:math>
 <m:mi>m</m:mi><m:mo>-</m:mo><m:mi>r</m:mi><m:mo>&lt;</m:mo><m:mn>0</m:mn>
</m:math>.  In the first case, <m:math>
 <m:mi>m</m:mi><m:mo>-</m:mo><m:mi>r</m:mi><m:mo>&#8805;</m:mo><m:mn>0</m:mn>
</m:math>, then 

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:msub><m:mi>&#931;</m:mi><m:mn>1</m:mn></m:msub>
 <m:mo>=</m:mo>
 <m:mtable columnalign="right center"><m:mtr><m:mtd/><m:mtd/><m:mtd><m:mi>k</m:mi></m:mtd><m:mtd><m:mi>l</m:mi></m:mtd><m:mtd/></m:mtr><m:mtr><m:mtd columnalign="right"><m:mi>k</m:mi></m:mtd><m:mtd rowalign="top" rowspan="3"><m:mo minsize="3.3000000000000003em">(</m:mo></m:mtd><m:mtd><m:mi>I</m:mi></m:mtd><m:mtd><m:mn>0</m:mn></m:mtd><m:mtd rowalign="top" rowspan="3"><m:mo minsize="3.3000000000000003em">)</m:mo></m:mtd></m:mtr><m:mtr>
   <m:mtd columnalign="right"><m:mi>l</m:mi></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mi>C</m:mi></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd columnalign="right"><m:mi>m</m:mi><m:mo>-</m:mo><m:mi>k</m:mi><m:mo>-</m:mo><m:mi>l</m:mi></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
  </m:mtr></m:mtable>
 <m:mtext>&#8195; and &#8195;</m:mtext>
 <m:msub><m:mi>&#931;</m:mi><m:mn>2</m:mn></m:msub>
 <m:mo>=</m:mo>
 <m:mtable columnalign="right center"><m:mtr><m:mtd/><m:mtd/><m:mtd><m:mi>k</m:mi></m:mtd><m:mtd><m:mi>l</m:mi></m:mtd><m:mtd/></m:mtr><m:mtr><m:mtd columnalign="right"><m:mi>l</m:mi></m:mtd><m:mtd rowalign="top" rowspan="2"><m:mo minsize="2.2em">(</m:mo></m:mtd><m:mtd><m:mn>0</m:mn></m:mtd><m:mtd><m:mi>S</m:mi></m:mtd><m:mtd rowalign="top" rowspan="2"><m:mo minsize="2.2em">)</m:mo></m:mtd></m:mtr><m:mtr>
   <m:mtd columnalign="right"><m:mi>p</m:mi><m:mo>-</m:mo><m:mi>l</m:mi></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
  </m:mtr></m:mtable>
 <m:mtext>.</m:mtext> 
</m:math></td><td class="formula2"/></tr></table></div></div><div class="paramtext">Here <m:math><m:mi>l</m:mi></m:math>&#160;is the rank of <m:math><m:mi>B</m:mi></m:math>, <m:math>
 <m:mi>k</m:mi><m:mo>=</m:mo><m:mi>r</m:mi><m:mo>-</m:mo><m:mi>l</m:mi>
</m:math>, <m:math><m:mi>C</m:mi></m:math>&#160;and <m:math><m:mi>S</m:mi></m:math>&#160;are diagonal matrices satisfying <m:math>
 <m:msup><m:mi>C</m:mi><m:mn>2</m:mn></m:msup>
 <m:mo>+</m:mo>
 <m:msup><m:mi>S</m:mi><m:mn>2</m:mn></m:msup>
 <m:mo>=</m:mo>
 <m:mi>I</m:mi>
</m:math>, and <m:math><m:mi>S</m:mi></m:math>&#160;is nonsingular.  We may also identify <m:math>
 <m:msub><m:mi>&#945;</m:mi><m:mn>1</m:mn></m:msub>
 <m:mo>=</m:mo>
 <m:mo>&#8943;</m:mo>
 <m:mo>=</m:mo>
 <m:msub><m:mi>&#945;</m:mi><m:mi>k</m:mi></m:msub>
 <m:mo>=</m:mo>
 <m:mn>1</m:mn>
</m:math>, <m:math>
 <m:msub><m:mi>&#945;</m:mi><m:mrow><m:mi>k</m:mi><m:mo>+</m:mo><m:mi>i</m:mi></m:mrow></m:msub>
 <m:mo>=</m:mo>
 <m:msub><m:mi>c</m:mi><m:mrow><m:mi>i</m:mi><m:mi>i</m:mi></m:mrow></m:msub>
</m:math>, for <m:math>
 <m:mi>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>l</m:mi></m:math>,
<m:math><m:msub><m:mi>&#946;</m:mi><m:mn>1</m:mn></m:msub>
 <m:mo>=</m:mo>
 <m:mo>&#8943;</m:mo>
 <m:mo>=</m:mo>
 <m:msub><m:mi>&#946;</m:mi><m:mi>k</m:mi></m:msub>
 <m:mo>=</m:mo>
 <m:mn>0</m:mn>
</m:math>, and <m:math>
 <m:msub><m:mi>&#946;</m:mi><m:mrow><m:mi>k</m:mi><m:mo>+</m:mo><m:mi>i</m:mi></m:mrow></m:msub>
 <m:mo>=</m:mo>
 <m:msub><m:mi>s</m:mi><m:mrow><m:mi>i</m:mi><m:mi>i</m:mi></m:mrow></m:msub>
</m:math>, for <m:math>
 <m:mi>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>l</m:mi>
</m:math>. Thus, the first <m:math><m:mi>k</m:mi></m:math>&#160;generalized singular values <m:math>
 <m:msub><m:mi>&#945;</m:mi><m:mn>1</m:mn></m:msub>
 <m:mo>/</m:mo>
 <m:msub><m:mi>&#946;</m:mi><m:mn>1</m:mn></m:msub>
 <m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo>
 <m:msub><m:mi>&#945;</m:mi><m:mi>k</m:mi></m:msub>
 <m:mo>/</m:mo>
 <m:msub><m:mi>&#946;</m:mi><m:mi>k</m:mi></m:msub>
</m:math>&#160;are infinite, and the remaining <m:math><m:mi>l</m:mi></m:math>&#160;generalized singular values are finite.</div><div class="paramtext">In the second case, when <m:math>
 <m:mi>m</m:mi><m:mo>-</m:mo><m:mi>r</m:mi><m:mo>&lt;</m:mo><m:mn>0</m:mn>
</m:math>,

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:msub><m:mi>&#931;</m:mi><m:mn>1</m:mn></m:msub>
 <m:mo>=</m:mo>
 <m:mtable columnalign="right center"><m:mtr><m:mtd/><m:mtd/><m:mtd><m:mi>k</m:mi></m:mtd><m:mtd><m:mi>m</m:mi><m:mo>-</m:mo><m:mi>k</m:mi></m:mtd><m:mtd><m:mi>k</m:mi><m:mo>+</m:mo><m:mi>l</m:mi><m:mo>-</m:mo><m:mi>m</m:mi></m:mtd><m:mtd/></m:mtr><m:mtr><m:mtd columnalign="right"><m:mi>k</m:mi></m:mtd><m:mtd rowalign="top" rowspan="2"><m:mo minsize="2.2em">(</m:mo></m:mtd><m:mtd><m:mi>I</m:mi></m:mtd><m:mtd><m:mn>0</m:mn></m:mtd><m:mtd><m:mn>0</m:mn></m:mtd><m:mtd rowalign="top" rowspan="2"><m:mo minsize="2.2em">)</m:mo></m:mtd></m:mtr><m:mtr>
   <m:mtd columnalign="right"><m:mi>m</m:mi><m:mo>-</m:mo><m:mi>k</m:mi></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mi>C</m:mi></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
  </m:mtr></m:mtable>
</m:math></td><td class="formula2"/></tr></table></div>

and 

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:msub><m:mi>&#931;</m:mi><m:mn>2</m:mn></m:msub>
 <m:mo>=</m:mo>
 <m:mtable columnalign="right center"><m:mtr><m:mtd/><m:mtd/><m:mtd><m:mi>k</m:mi></m:mtd><m:mtd><m:mi>m</m:mi><m:mo>-</m:mo><m:mi>k</m:mi></m:mtd><m:mtd><m:mi>k</m:mi><m:mo>+</m:mo><m:mi>l</m:mi><m:mo>-</m:mo><m:mi>m</m:mi></m:mtd><m:mtd/></m:mtr><m:mtr><m:mtd columnalign="right"><m:mi>m</m:mi><m:mo>-</m:mo><m:mi>k</m:mi></m:mtd><m:mtd rowalign="top" rowspan="3"><m:mo minsize="3.3000000000000003em">(</m:mo></m:mtd><m:mtd><m:mn>0</m:mn></m:mtd><m:mtd><m:mi>S</m:mi></m:mtd><m:mtd><m:mn>0</m:mn></m:mtd><m:mtd rowalign="top" rowspan="3"><m:mo minsize="3.3000000000000003em">)</m:mo></m:mtd></m:mtr><m:mtr>
   <m:mtd columnalign="right"><m:mi>k</m:mi><m:mo>+</m:mo><m:mi>l</m:mi><m:mo>-</m:mo><m:mi>m</m:mi></m:mtd><m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mi>I</m:mi></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd columnalign="right"><m:mi>p</m:mi><m:mo>-</m:mo><m:mi>l</m:mi></m:mtd><m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
  </m:mtr></m:mtable>
 <m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div></div><div class="paramtext">Again, <m:math><m:mi>l</m:mi></m:math>&#160;is the rank of <m:math><m:mi>B</m:mi></m:math>,  <m:math>
 <m:mi>k</m:mi><m:mo>=</m:mo><m:mi>r</m:mi><m:mo>-</m:mo><m:mi>l</m:mi>
</m:math>, <m:math><m:mi>C</m:mi></m:math>&#160;and <m:math><m:mi>S</m:mi></m:math>&#160;are diagonal matrices satisfying <m:math>
 <m:msup><m:mi>C</m:mi><m:mn>2</m:mn></m:msup>
 <m:mo>+</m:mo>
 <m:msup><m:mi>S</m:mi><m:mn>2</m:mn></m:msup>
 <m:mo>=</m:mo>
 <m:mi>I</m:mi>
</m:math>, and <m:math><m:mi>S</m:mi></m:math>&#160;is nonsingular, and we may identify <m:math>
 <m:msub><m:mi>&#945;</m:mi><m:mn>1</m:mn></m:msub>
 <m:mo>=</m:mo>
 <m:mo>&#8943;</m:mo>
 <m:mo>=</m:mo>
 <m:msub><m:mi>&#945;</m:mi><m:mi>k</m:mi></m:msub>
 <m:mo>=</m:mo>
 <m:mn>1</m:mn>
</m:math>, <m:math>
 <m:msub><m:mi>&#945;</m:mi><m:mrow><m:mi>k</m:mi><m:mo>+</m:mo><m:mi>i</m:mi></m:mrow></m:msub>
 <m:mo>=</m:mo>
 <m:msub><m:mi>c</m:mi><m:mrow><m:mi>i</m:mi><m:mi>i</m:mi></m:mrow></m:msub>
</m:math>, for <m:math>
 <m:mi>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>m</m:mi><m:mo>-</m:mo><m:mi>k</m:mi>
</m:math>, <m:math>
 <m:msub><m:mi>&#945;</m:mi><m:mrow><m:mi>m</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow></m:msub>
 <m:mo>=</m:mo>
 <m:mo>&#8943;</m:mo>
 <m:mo>=</m:mo>
 <m:msub><m:mi>&#945;</m:mi><m:mi>r</m:mi></m:msub>
 <m:mo>=</m:mo>
 <m:mn>0</m:mn>
</m:math>, <m:math>
 <m:msub><m:mi>&#946;</m:mi><m:mn>1</m:mn></m:msub>
 <m:mo>=</m:mo>
 <m:mo>&#8943;</m:mo>
 <m:mo>=</m:mo>
 <m:msub><m:mi>&#946;</m:mi><m:mi>k</m:mi></m:msub>
 <m:mo>=</m:mo>
 <m:mn>0</m:mn>
</m:math>, <m:math>
 <m:msub><m:mi>&#946;</m:mi><m:mrow><m:mi>k</m:mi><m:mo>+</m:mo><m:mi>i</m:mi></m:mrow></m:msub>
 <m:mo>=</m:mo>
 <m:msub><m:mi>s</m:mi><m:mrow><m:mi>i</m:mi><m:mi>i</m:mi></m:mrow></m:msub>
</m:math>, for <m:math>
 <m:mi>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>m</m:mi><m:mo>-</m:mo><m:mi>k</m:mi>
</m:math>&#160;and <m:math>
 <m:msub><m:mi>&#946;</m:mi><m:mrow><m:mi>m</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow></m:msub>
 <m:mo>=</m:mo>
 <m:mo>&#8943;</m:mo>
 <m:mo>=</m:mo>
 <m:msub><m:mi>&#946;</m:mi><m:mi>r</m:mi></m:msub>
 <m:mo>=</m:mo>
 <m:mn>1</m:mn>
</m:math>. Thus, the first <m:math><m:mi>k</m:mi></m:math>&#160;generalized singular values <m:math>
 <m:msub><m:mi>&#945;</m:mi><m:mn>1</m:mn></m:msub>
 <m:mo>/</m:mo>
 <m:msub><m:mi>&#946;</m:mi><m:mn>1</m:mn></m:msub>
 <m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo>
 <m:msub><m:mi>&#945;</m:mi><m:mi>k</m:mi></m:msub>
 <m:mo>/</m:mo>
 <m:msub><m:mi>&#946;</m:mi><m:mi>k</m:mi></m:msub>
</m:math>&#160;are infinite, and the remaining <m:math><m:mi>l</m:mi></m:math>&#160;generalized singular values are finite.
</div><div class="paramtext">Here are some important special case of the generalized singular value decomposition.  First, if <m:math><m:mi>B</m:mi></m:math>&#160;is square and nonsingular, then <m:math><m:mi>r</m:mi><m:mo>=</m:mo><m:mi>n</m:mi></m:math>&#160;and the generalized singular value decomposition of <m:math><m:mi>A</m:mi></m:math>&#160;and <m:math><m:mi>B</m:mi></m:math>&#160;is equivalent to the singular value decomposition of <m:math>
 <m:mi>A</m:mi><m:msup><m:mi>B</m:mi><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msup>
</m:math>, where the singular values of <m:math>
 <m:mi>A</m:mi><m:msup><m:mi>B</m:mi><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msup>
</m:math>&#160;are equal to the generalized singular values of the pair <m:math><m:mi>A</m:mi></m:math>, <m:math><m:mi>B</m:mi></m:math>:

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>A</m:mi><m:msup><m:mi>B</m:mi><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msup>
<m:mo>=</m:mo>
 <m:mfenced separators="">
  <m:mi>U</m:mi>
  <m:msub><m:mi>&#931;</m:mi><m:mn>1</m:mn></m:msub>
  <m:mi>R</m:mi>
  <m:msup><m:mi>Q</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup>
 </m:mfenced>
 <m:msup>
  <m:mfenced separators="">
   <m:mi>V</m:mi>
   <m:msub><m:mi>&#931;</m:mi><m:mn>2</m:mn></m:msub>
   <m:mi>R</m:mi>
   <m:msup><m:mi>Q</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup>
  </m:mfenced>
  <m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow>
 </m:msup>
 <m:mo>=</m:mo>
 <m:mi>U</m:mi>
 <m:mfenced separators="">
  <m:msub><m:mi>&#931;</m:mi><m:mn>1</m:mn></m:msub>
  <m:msubsup><m:mi>&#931;</m:mi><m:mn>2</m:mn><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msubsup>
 </m:mfenced>
 <m:msup><m:mi>V</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup> 
 <m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div></div><div class="paramtext">Second, if the columns of <m:math>
 <m:msup><m:mfenced separators="">
   <m:msup><m:mi>A</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup>
   <m:msup><m:mi>B</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup>
  </m:mfenced><m:mi mathvariant="normal">T</m:mi></m:msup>
</m:math>&#160;are orthonormal, then <m:math><m:mi>r</m:mi><m:mo>=</m:mo><m:mi>n</m:mi></m:math>, <m:math><m:mi>R</m:mi><m:mo>=</m:mo><m:mi>I</m:mi></m:math>&#160;and the generalized singular value decomposition of <m:math><m:mi>A</m:mi></m:math>&#160;and <m:math><m:mi>B</m:mi></m:math>&#160;is equivalent to the CS (Cosine&#8211;Sine) decomposition of  <m:math>
 <m:msup><m:mfenced separators="">
   <m:msup><m:mi>A</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup>
   <m:msup><m:mi>B</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup>
  </m:mfenced><m:mi mathvariant="normal">T</m:mi></m:msup>
</m:math>:

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mfenced><m:mtable>
   <m:mtr>
    <m:mtd><m:mi>A</m:mi></m:mtd>
   </m:mtr><m:mtr>
    <m:mtd><m:mi>B</m:mi></m:mtd>
   </m:mtr>
  </m:mtable></m:mfenced>
 <m:mo>=</m:mo>
  <m:mfenced><m:mtable>
   <m:mtr>
    <m:mtd><m:mi>U</m:mi></m:mtd>
    <m:mtd><m:mn>0</m:mn></m:mtd>
   </m:mtr><m:mtr>
    <m:mtd><m:mn>0</m:mn></m:mtd>
    <m:mtd><m:mi>V</m:mi></m:mtd>
   </m:mtr>
  </m:mtable></m:mfenced>
  <m:mfenced><m:mtable>
   <m:mtr>
    <m:mtd><m:msub><m:mi>&#931;</m:mi><m:mn>1</m:mn></m:msub></m:mtd>
   </m:mtr><m:mtr>
    <m:mtd><m:msub><m:mi>&#931;</m:mi><m:mn>2</m:mn></m:msub></m:mtd>
   </m:mtr>
  </m:mtable></m:mfenced>
 <m:msup><m:mi>Q</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup>
 <m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div></div><div class="paramtext">Third, the generalized eigenvalues and eigenvectors of <m:math>
 <m:msup><m:mi>A</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>A</m:mi>
 <m:mo>-</m:mo>
 <m:mi>&#955;</m:mi>
 <m:msup><m:mi>B</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>B</m:mi>
</m:math>&#160;can be expressed in terms of the generalized singular value decomposition: Let

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>X</m:mi>
 <m:mo>=</m:mo>
 <m:mi>Q</m:mi>
  <m:mfenced><m:mtable>
   <m:mtr>
    <m:mtd><m:mi>I</m:mi></m:mtd>
    <m:mtd><m:mn>0</m:mn></m:mtd>
   </m:mtr><m:mtr>
    <m:mtd><m:mn>0</m:mn></m:mtd>
    <m:mtd><m:msup><m:mi>R</m:mi><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msup></m:mtd>
   </m:mtr>
  </m:mtable></m:mfenced>
 <m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div></div><div class="paramtext">Then

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:msup><m:mi>X</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup>
 <m:msup><m:mi>A</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup>
 <m:mi>A</m:mi><m:mi>X</m:mi>
 <m:mo>=</m:mo>
  <m:mfenced><m:mtable>
   <m:mtr>
    <m:mtd><m:mn>0</m:mn></m:mtd>
    <m:mtd><m:mn>0</m:mn></m:mtd>
   </m:mtr><m:mtr>
    <m:mtd><m:mn>0</m:mn></m:mtd>
    <m:mtd><m:msubsup><m:mi>&#931;</m:mi><m:mn>1</m:mn><m:mi mathvariant="normal">T</m:mi></m:msubsup><m:msub><m:mi>&#931;</m:mi><m:mn>1</m:mn></m:msub></m:mtd>
   </m:mtr>
  </m:mtable></m:mfenced>
 <m:mtext>&#8195; and &#8195;</m:mtext>
 <m:msup><m:mi>X</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup>
 <m:msup><m:mi>B</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup>
 <m:mi>B</m:mi><m:mi>X</m:mi>
 <m:mo>=</m:mo>
  <m:mfenced><m:mtable>
   <m:mtr>
    <m:mtd><m:mn>0</m:mn></m:mtd>
    <m:mtd><m:mn>0</m:mn></m:mtd>
   </m:mtr><m:mtr>
    <m:mtd><m:mn>0</m:mn></m:mtd>
    <m:mtd><m:msubsup><m:mi>&#931;</m:mi><m:mn>2</m:mn><m:mi mathvariant="normal">T</m:mi></m:msubsup><m:msub><m:mi>&#931;</m:mi><m:mn>2</m:mn></m:msub></m:mtd>
   </m:mtr>
  </m:mtable></m:mfenced>
 <m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div></div><div class="paramtext">Therefore, the columns of <m:math><m:mi>X</m:mi></m:math>&#160;are the eigenvectors of <m:math>
 <m:msup><m:mi>A</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>A</m:mi>
 <m:mo>-</m:mo>
 <m:mi>&#955;</m:mi>
 <m:msup><m:mi>B</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>B</m:mi>
</m:math>, and &#8216;nontrivial&#8217; eigenvalues are the squares of the generalized singular values (see also <a class="sec" href="#background6">Section 2.8</a>).  &#8216;Trivial&#8217; eigenvalues are those corresponding to the leading <m:math><m:mi>n</m:mi><m:mo>-</m:mo><m:mi>r</m:mi></m:math>&#160;columns of <m:math><m:mi>X</m:mi></m:math>, which span the common null space of <m:math>
 <m:msup><m:mi>A</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>A</m:mi>
</m:math>&#160;and  <m:math>
 <m:msup><m:mi>B</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>B</m:mi>
</m:math>.  The &#8216;trivial eigenvalues&#8217; are not well defined.</div><h3 class="standard"><a class="sec" name="background5" id="background5"/>2.7&#160;&#160;Symmetric Eigenvalue Problems</h3>
<div class="paramtext">The <span class="italic">symmetric eigenvalue problem</span> is to find the <span class="italic">eigenvalues</span>, <m:math><m:mi>&#955;</m:mi></m:math>, and corresponding <span class="italic">eigenvectors</span>, <m:math><m:mi>z</m:mi><m:mo>&#8800;</m:mo><m:mn>0</m:mn></m:math>, such that

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>A</m:mi><m:mi>z</m:mi><m:mo>=</m:mo><m:mi>&#955;</m:mi><m:mi>z</m:mi><m:mtext>, &#8195;</m:mtext><m:mi>A</m:mi><m:mo>=</m:mo><m:msup><m:mi>A</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mtext>, &#8195; where &#8203;</m:mtext><m:mi>A</m:mi><m:mtext>&#8203; is real.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

For the <span class="italic">Hermitian eigenvalue problem</span> we have

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>A</m:mi><m:mi>z</m:mi><m:mo>=</m:mo><m:mi>&#955;</m:mi> <m:mi>z</m:mi><m:mtext>, &#8195;</m:mtext> <m:mi>A</m:mi><m:mo>=</m:mo><m:msup><m:mi>A</m:mi><m:mi mathvariant="normal">H</m:mi></m:msup><m:mtext>, &#8195; where &#8203;</m:mtext> <m:mi>A</m:mi><m:mtext>&#8203; is complex.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

For both problems the eigenvalues <m:math><m:mi>&#955;</m:mi></m:math>&#160;are real.</div><div class="paramtext">When all eigenvalues and eigenvectors have been computed, we write

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>A</m:mi>
 <m:mo>=</m:mo><m:mi>Z</m:mi><m:mi>&#923;</m:mi><m:msup><m:mi>Z</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mtext>&#8195;</m:mtext><m:mfenced separators=""><m:mtext>or &#8203;</m:mtext><m:mi>A</m:mi><m:mo>=</m:mo><m:mi>Z</m:mi><m:mi>&#923;</m:mi><m:msup><m:mi>Z</m:mi><m:mi mathvariant="normal">H</m:mi></m:msup><m:mtext>&#8203; if complex</m:mtext></m:mfenced><m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:mi>&#923;</m:mi></m:math>&#160;is a diagonal matrix whose diagonal elements are the eigenvalues, and <m:math><m:mi>Z</m:mi></m:math>&#160;is an orthogonal (or unitary) matrix whose columns are the eigenvectors.  This is the classical <span class="italic">spectral factorization</span> of <m:math><m:mi>A</m:mi></m:math>.</div><div class="paramtext">The basic task of the symmetric eigenproblem routines is to compute values of <m:math><m:mi>&#955;</m:mi></m:math>&#160;and, optionally, corresponding vectors <m:math><m:mi>z</m:mi></m:math>&#160;for a given matrix <m:math><m:mi>A</m:mi></m:math>.  This computation proceeds in the following stages.
<ol class="listnumber"><li class="listnumber">The real symmetric or complex Hermitian matrix <m:math><m:mi>A</m:mi></m:math>&#160;is reduced to <span class="italic">real tridiagonal form</span>
<m:math><m:mi>T</m:mi></m:math>.  If <m:math><m:mi>A</m:mi></m:math>&#160;is real symmetric this decomposition is <m:math><m:mi>A</m:mi><m:mo>=</m:mo><m:mi>Q</m:mi><m:mi>T</m:mi><m:msup><m:mi>Q</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup></m:math>&#160;with <m:math><m:mi>Q</m:mi></m:math>&#160;orthogonal and <m:math><m:mi>T</m:mi></m:math>&#160;symmetric tridiagonal.  If <m:math><m:mi>A</m:mi></m:math>&#160;is complex Hermitian, the decomposition is <m:math><m:mi>A</m:mi><m:mo>=</m:mo><m:mi>Q</m:mi><m:mi>T</m:mi><m:msup><m:mi>Q</m:mi><m:mi mathvariant="normal">H</m:mi></m:msup></m:math>&#160;with <m:math><m:mi>Q</m:mi></m:math>&#160;unitary and <m:math><m:mi>T</m:mi></m:math>, as before, <span class="italic">real</span> symmetric tridiagonal.</li><li class="listnumber">Eigenvalues and eigenvectors of the real symmetric tridiagonal matrix <m:math><m:mi>T</m:mi></m:math>&#160;are computed.  If all eigenvalues and eigenvectors are computed, this is equivalent to factorizing <m:math><m:mi>T</m:mi></m:math>&#160;as <m:math><m:mi>T</m:mi><m:mo>=</m:mo><m:mi>S</m:mi><m:mi>&#923;</m:mi><m:msup><m:mi>S</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup></m:math>, where <m:math><m:mi>S</m:mi></m:math>&#160;is orthogonal and <m:math><m:mi>&#923;</m:mi></m:math>&#160;is diagonal.  The diagonal entries of <m:math><m:mi>&#923;</m:mi></m:math>&#160;are the eigenvalues of <m:math><m:mi>T</m:mi></m:math>, which are also the eigenvalues of <m:math><m:mi>A</m:mi></m:math>, and the columns of <m:math><m:mi>S</m:mi></m:math>&#160;are the eigenvectors of <m:math><m:mi>T</m:mi></m:math>; the eigenvectors of <m:math><m:mi>A</m:mi></m:math>&#160;are the columns of <m:math><m:mi>Z</m:mi><m:mo>=</m:mo><m:mi>Q</m:mi><m:mi>S</m:mi></m:math>, so that <m:math><m:mi>A</m:mi><m:mo>=</m:mo><m:mi>Z</m:mi><m:mi>&#923;</m:mi><m:msup><m:mi>Z</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup></m:math>&#160;(<m:math><m:mi>Z</m:mi><m:mi>&#923;</m:mi><m:msup><m:mi>Z</m:mi><m:mi mathvariant="normal">H</m:mi></m:msup></m:math>&#160;when <m:math><m:mi>A</m:mi></m:math>&#160;is complex Hermitian).</li></ol>
</div><div class="paramtext">This chapter supports four primary algorithms for computing eigenvalues and eigenvectors of real symmetric matrices and complex Hermitian matrices.  They are:
<table class="standard-100"><tr>
<td style="width:2.1em;" valign="baseline">(i)</td>
<td valign="top">the divide-and-conquer algorithm;</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">(ii)</td>
<td valign="top">the <m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;algorithm;</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">(iii)</td>
<td valign="top">bisection followed by inverse iteration;</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">(iv)</td>
<td valign="top">the Relatively Robust Representation (RRR).</td>
</tr></table>
</div><div class="paramtext">The divide-and-conquer algorithm is generally more efficient than the traditional <m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;algorithm for computing all eigenvalues and eigenvectors, but the RRR algorithm tends to be fastest of all.  For further information and references see <a class="ref" href="#ref562">Anderson <span class="italic">et al.</span> (1999)</a>.</div><h3 class="standard"><a class="sec" name="background6" id="background6"/>2.8&#160;&#160;Generalized Symmetric-definite Eigenvalue Problems</h3>
<div class="paramtext">This section is concerned with the solution of the generalized eigenvalue problems <m:math><m:mi>A</m:mi><m:mi>z</m:mi><m:mo>=</m:mo><m:mi>&#955;</m:mi><m:mi>B</m:mi><m:mi>z</m:mi></m:math>, <m:math><m:mi>A</m:mi><m:mi>B</m:mi><m:mi>z</m:mi><m:mo>=</m:mo><m:mi>&#955;</m:mi><m:mi>z</m:mi></m:math>, and <m:math><m:mi>B</m:mi><m:mi>A</m:mi><m:mi>z</m:mi><m:mo>=</m:mo><m:mi>&#955;</m:mi><m:mi>z</m:mi></m:math>, where <m:math><m:mi>A</m:mi></m:math>&#160;and <m:math><m:mi>B</m:mi></m:math>&#160;are real symmetric or complex Hermitian and <m:math><m:mi>B</m:mi></m:math>&#160;is positive definite.  Each of these problems can be reduced to a standard symmetric eigenvalue problem, using a Cholesky factorization of <m:math><m:mi>B</m:mi></m:math>&#160;as either <m:math><m:mi>B</m:mi><m:mo>=</m:mo><m:mi>L</m:mi><m:msup><m:mi>L</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup></m:math>&#160;or <m:math><m:mi>B</m:mi><m:mo>=</m:mo><m:msup><m:mi>U</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>U</m:mi></m:math>&#160;(<m:math><m:mi>L</m:mi><m:msup><m:mi>L</m:mi><m:mi mathvariant="normal">H</m:mi></m:msup></m:math>&#160;or <m:math><m:msup><m:mi>U</m:mi><m:mi mathvariant="normal">H</m:mi></m:msup><m:mi>U</m:mi></m:math>&#160;in the Hermitian case).</div><div class="paramtext">With <m:math><m:mi>B</m:mi><m:mo>=</m:mo><m:mi>L</m:mi><m:msup><m:mi>L</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup></m:math>, we have

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>A</m:mi><m:mi>z</m:mi><m:mo>=</m:mo><m:mi>&#955;</m:mi><m:mi>B</m:mi><m:mi>z</m:mi><m:mo>&#8658;</m:mo><m:mfenced separators=""><m:msup><m:mi>L</m:mi><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msup><m:mi>A</m:mi><m:msup><m:mi>L</m:mi><m:mrow><m:mo>-</m:mo><m:mi mathvariant="normal">T</m:mi></m:mrow></m:msup></m:mfenced><m:mfenced separators=""><m:msup><m:mi>L</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>z</m:mi></m:mfenced><m:mo>=</m:mo><m:mi>&#955;</m:mi><m:mfenced separators=""><m:msup><m:mi>L</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>z</m:mi></m:mfenced><m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

Hence the eigenvalues of <m:math><m:mi>A</m:mi><m:mi>z</m:mi><m:mo>=</m:mo><m:mi>&#955;</m:mi><m:mi>B</m:mi><m:mi>z</m:mi></m:math>&#160;are those of <m:math><m:mi>C</m:mi><m:mi>y</m:mi><m:mo>=</m:mo><m:mi>&#955;</m:mi><m:mi>y</m:mi></m:math>, where <m:math><m:mi>C</m:mi></m:math>&#160;is the symmetric matrix <m:math><m:mi>C</m:mi><m:mo>=</m:mo><m:msup><m:mi>L</m:mi><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msup><m:mi>A</m:mi><m:msup><m:mi>L</m:mi><m:mrow><m:mo>-</m:mo><m:mi mathvariant="normal">T</m:mi></m:mrow></m:msup></m:math>&#160;and <m:math><m:mi>y</m:mi><m:mo>=</m:mo><m:msup><m:mi>L</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>z</m:mi></m:math>.  In the complex case <m:math><m:mi>C</m:mi></m:math>&#160;is Hermitian with <m:math><m:mi>C</m:mi><m:mo>=</m:mo><m:msup><m:mi>L</m:mi><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msup><m:mi>A</m:mi><m:msup><m:mi>L</m:mi><m:mrow><m:mo>-</m:mo><m:mi mathvariant="normal">H</m:mi></m:mrow></m:msup></m:math>&#160;and <m:math><m:mi>y</m:mi><m:mo>=</m:mo><m:msup><m:mi>L</m:mi><m:mi mathvariant="normal">H</m:mi></m:msup><m:mi>z</m:mi></m:math>.</div><div class="paramtext"><a class="table" href="#table1">Table 1</a> summarizes how each of the three types of problem may be reduced to standard form <m:math><m:mi>C</m:mi><m:mi>y</m:mi><m:mo>=</m:mo><m:mi>&#955;</m:mi><m:mi>y</m:mi></m:math>, and how the eigenvectors <m:math><m:mi>z</m:mi></m:math>&#160;of the original problem may be recovered from the eigenvectors <m:math><m:mi>y</m:mi></m:math>&#160;of the reduced problem.  The table applies to real problems; for complex problems, transposed matrices must be replaced by conjugate-transposes.</div><div class="paramtext">
<div class="tablediv"><a name="table1" id="table1"/><table class="standard" border="3" align="center" cellpadding="2">
  
  
  
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" align="left">&#160;</td>
    <td class="libdoc" valign="top" align="left"><b>Type of problem</b></td>
    <td class="libdoc" valign="top" align="center"><b>Factorization of <m:math><m:mi>B</m:mi></m:math></b></td>
    <td class="libdoc" valign="top" align="center"><b>Reduction</b></td>
    <td class="libdoc" valign="top" align="left"><b>Recovery of eigenvectors</b></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">1.</td>
    <td class="libdoc" valign="top" align="left"><m:math><m:mi>A</m:mi><m:mi>z</m:mi><m:mo>=</m:mo><m:mi>&#955;</m:mi><m:mi>B</m:mi><m:mi>z</m:mi></m:math></td>
    <td class="libdoc" valign="top" align="left"><m:math><m:mi>B</m:mi><m:mo>=</m:mo><m:mi>L</m:mi><m:msup><m:mi>L</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup></m:math>,<br/>
<m:math><m:mi>B</m:mi><m:mo>=</m:mo><m:msup><m:mi>U</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>U</m:mi></m:math></td>
    <td class="libdoc" valign="top" align="left"><m:math><m:mi>C</m:mi><m:mo>=</m:mo><m:msup><m:mi>L</m:mi><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msup><m:mi>A</m:mi><m:msup><m:mi>L</m:mi><m:mrow><m:mo>-</m:mo><m:mi mathvariant="normal">T</m:mi></m:mrow></m:msup></m:math>,<br/>
<m:math><m:mi>C</m:mi><m:mo>=</m:mo><m:msup><m:mi>U</m:mi><m:mrow><m:mo>-</m:mo><m:mi mathvariant="normal">T</m:mi></m:mrow></m:msup><m:mi>A</m:mi><m:msup><m:mi>U</m:mi><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msup></m:math></td>
    <td class="libdoc" valign="top" align="left"><m:math><m:mi>z</m:mi><m:mo>=</m:mo><m:msup><m:mi>L</m:mi><m:mrow><m:mo>-</m:mo><m:mi mathvariant="normal">T</m:mi></m:mrow></m:msup><m:mi>y</m:mi></m:math>, <br/>
<m:math><m:mi>z</m:mi><m:mo>=</m:mo><m:msup><m:mi>U</m:mi><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msup><m:mi>y</m:mi></m:math></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">2.</td>
    <td class="libdoc" valign="top" align="left"><m:math><m:mi>A</m:mi><m:mi>B</m:mi><m:mi>z</m:mi><m:mo>=</m:mo><m:mi>&#955;</m:mi><m:mi>z</m:mi></m:math></td>
    <td class="libdoc" valign="top" align="left"><m:math><m:mi>B</m:mi><m:mo>=</m:mo><m:mi>L</m:mi><m:msup><m:mi>L</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup></m:math>,<br/>
<m:math><m:mi>B</m:mi><m:mo>=</m:mo><m:msup><m:mi>U</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>U</m:mi></m:math></td>
    <td class="libdoc" valign="top" align="left"><m:math><m:mi>C</m:mi><m:mo>=</m:mo><m:msup><m:mi>L</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>A</m:mi><m:mi>L</m:mi></m:math>,<br/>
<m:math><m:mi>C</m:mi><m:mo>=</m:mo><m:mi>U</m:mi><m:mi>A</m:mi><m:msup><m:mi>U</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup></m:math></td>
    <td class="libdoc" valign="top" align="left"><m:math><m:mi>z</m:mi><m:mo>=</m:mo><m:msup><m:mi>L</m:mi><m:mrow><m:mo>-</m:mo><m:mi mathvariant="normal">T</m:mi></m:mrow></m:msup><m:mi>y</m:mi></m:math>,<br/>
<m:math><m:mi>z</m:mi><m:mo>=</m:mo><m:msup><m:mi>U</m:mi><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msup><m:mi>y</m:mi></m:math></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">3.</td>
    <td class="libdoc" valign="top" align="left"><m:math><m:mi>B</m:mi><m:mi>A</m:mi><m:mi>z</m:mi><m:mo>=</m:mo><m:mi>&#955;</m:mi><m:mi>z</m:mi></m:math></td>
    <td class="libdoc" valign="top" align="left"><m:math><m:mi>B</m:mi><m:mo>=</m:mo><m:mi>L</m:mi><m:msup><m:mi>L</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup></m:math>, <br/>
<m:math><m:mi>B</m:mi><m:mo>=</m:mo><m:msup><m:mi>U</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>U</m:mi></m:math></td>
    <td class="libdoc" valign="top" align="left"><m:math><m:mi>C</m:mi><m:mo>=</m:mo><m:msup><m:mi>L</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>A</m:mi><m:mi>L</m:mi></m:math>, <br/>
<m:math><m:mi>C</m:mi><m:mo>=</m:mo><m:mi>U</m:mi><m:mi>A</m:mi><m:msup><m:mi>U</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup></m:math></td>
    <td class="libdoc" valign="top" align="left"><m:math><m:mi>z</m:mi><m:mo>=</m:mo><m:mi>L</m:mi><m:mi>y</m:mi></m:math>, <br/>
<m:math><m:mi>z</m:mi><m:mo>=</m:mo><m:msup><m:mi>U</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>y</m:mi></m:math></td>
   </tr>
  </tbody>
 </table><div class="caption"><b>Table 1</b><br/>Reduction of generalized symmetric-definite eigenproblems to standard problems</div></div>
</div><div class="paramtext">When the generalized symmetric-definite problem has been reduced to the corresponding standard problem <m:math><m:mi>C</m:mi><m:mi>y</m:mi><m:mo>=</m:mo><m:mi>&#955;</m:mi><m:mi>y</m:mi></m:math>, this may then be solved using the routines described in the previous section.  No special routines are needed to recover the eigenvectors <m:math><m:mi>z</m:mi></m:math>&#160;of the generalized problem from the eigenvectors <m:math><m:mi>y</m:mi></m:math>&#160;of the standard problem, because these computations are simple applications of Level 2 or Level 3 BLAS
 (see <a class="chap" href="../F06/f06conts.xml">Chapter F06</a>).

</div><h3 class="standard"><a class="sec" name="background7" id="background7"/>2.9&#160;&#160;Packed Storage for Symmetric Matrices</h3>
<div class="paramtext">Routines which handle symmetric matrices are usually designed so that they use either the upper or lower triangle of the matrix; it is not necessary to store the whole matrix.  If either the upper or lower triangle is stored conventionally in the upper or lower triangle of a two-dimensional array, the remaining elements of the array can be used to store other useful data.  However, that is not always convenient, and if it is important to economize on storage, the upper or lower triangle can be stored in a one-dimensional array of length <m:math><m:mi>n</m:mi><m:mfenced separators=""><m:mi>n</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:mfenced><m:mo>/</m:mo><m:mn>2</m:mn></m:math>; that is, the storage is almost halved.</div><div class="paramtext">This storage format is referred to as <span class="italic">packed storage</span>; it is described in <a class="sec" href="../F07/f07intro.xml#recomm32">Section 3.3.2</a> in  the F07 Chapter Introduction.</div><div class="paramtext">Routines designed for packed storage are usually less efficient, especially on high-performance computers, so there is a trade-off between storage and efficiency.</div><h3 class="standard"><a class="sec" name="background8" id="background8"/>2.10&#160;&#160;Band Matrices</h3>
<div class="paramtext">A <span class="italic">band</span> matrix is one whose elements are confined to a relatively small number of subdiagonals or superdiagonals on either side of the main diagonal.  Algorithms can take advantage of bandedness to reduce the amount of work and storage required.  The storage scheme for band matrices is described in <a class="sec" href="../F07/f07intro.xml#recomm_33">Section 3.3.4</a> in  the F07 Chapter Introduction.</div><div class="paramtext">If the problem is the generalized symmetric definite eigenvalue problem <m:math><m:mi>A</m:mi><m:mi>z</m:mi><m:mo>=</m:mo><m:mi>&#955;</m:mi><m:mi>B</m:mi><m:mi>z</m:mi></m:math>&#160;and the matrices <m:math><m:mi>A</m:mi></m:math>&#160;and <m:math><m:mi>B</m:mi></m:math>&#160;are additionally banded, the matrix <m:math><m:mi>C</m:mi></m:math>&#160;as defined in <a class="sec" href="#background6">Section 2.8</a> is, in general, full.  We can reduce the problem to a banded standard problem by modifying the definition of <m:math><m:mi>C</m:mi></m:math>&#160;thus:

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>C</m:mi>
 <m:mo>=</m:mo><m:msup><m:mi>X</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>A</m:mi><m:mi>X</m:mi><m:mtext>, &#8195; where &#8195;</m:mtext><m:mi>X</m:mi><m:mo>=</m:mo><m:msup><m:mi>U</m:mi><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msup><m:mi>Q</m:mi><m:mtext>&#8195; or &#8203;</m:mtext><m:msup><m:mi>L</m:mi><m:mrow><m:mo>-</m:mo><m:mi mathvariant="normal">T</m:mi></m:mrow></m:msup><m:mi>Q</m:mi><m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:mi>Q</m:mi></m:math>&#160;is an orthogonal matrix chosen to ensure that <m:math><m:mi>C</m:mi></m:math>&#160;has bandwidth no greater than that of <m:math><m:mi>A</m:mi></m:math>.</div><div class="paramtext">A further refinement is possible when <m:math><m:mi>A</m:mi></m:math>&#160;and <m:math><m:mi>B</m:mi></m:math>&#160;are banded, which halves the amount of work required to form <m:math><m:mi>C</m:mi></m:math>.  Instead of the standard Cholesky factorization of <m:math><m:mi>B</m:mi></m:math>&#160;as <m:math><m:msup><m:mi>U</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>U</m:mi></m:math>&#160;or <m:math><m:mi>L</m:mi><m:msup><m:mi>L</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup></m:math>, we use a <span class="italic">split Cholesky</span> factorization <m:math><m:mi>B</m:mi><m:mo>=</m:mo><m:msup><m:mi>S</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>S</m:mi></m:math>, where

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>S</m:mi>
 <m:mo>=</m:mo>
 <m:mfenced><m:mtable columnalign="left">
  <m:mtr>
   <m:mtd><m:msub><m:mi>U</m:mi><m:mn>11</m:mn></m:msub></m:mtd>
   <m:mtd/>
  </m:mtr><m:mtr>
   <m:mtd><m:msub><m:mi>M</m:mi><m:mn>21</m:mn></m:msub></m:mtd>
   <m:mtd><m:msub><m:mi>L</m:mi><m:mn>22</m:mn></m:msub></m:mtd>
  </m:mtr>
 </m:mtable></m:mfenced>
</m:math></td><td class="formula2"/></tr></table></div>

with <m:math><m:msub><m:mi>U</m:mi><m:mn>11</m:mn></m:msub></m:math>&#160;upper triangular and <m:math><m:msub><m:mi>L</m:mi><m:mn>22</m:mn></m:msub></m:math>&#160;lower triangular of order approximately <m:math><m:mi>n</m:mi><m:mo>/</m:mo><m:mn>2</m:mn></m:math>; <m:math><m:mi>S</m:mi></m:math>&#160;has the same bandwidth as <m:math><m:mi>B</m:mi></m:math>.</div><h3 class="standard"><a class="sec" name="background9" id="background9"/>2.11&#160;&#160;Nonsymmetric Eigenvalue Problems</h3>
<div class="paramtext">The <span class="italic">nonsymmetric eigenvalue problem</span> is to find the <span class="italic">eigenvalues</span>, <m:math><m:mi>&#955;</m:mi></m:math>, and corresponding <span class="italic">eigenvectors</span>, <m:math><m:mi>v</m:mi><m:mo>&#8800;</m:mo><m:mn>0</m:mn></m:math>, such that

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>A</m:mi><m:mi>v</m:mi><m:mo>=</m:mo><m:mi>&#955;</m:mi><m:mi>v</m:mi><m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

More precisely, a vector <m:math><m:mi>v</m:mi></m:math>&#160;as just defined is called a <span class="italic">right eigenvector</span> of <m:math><m:mi>A</m:mi></m:math>, and a vector <m:math><m:mi>u</m:mi><m:mo>&#8800;</m:mo><m:mn>0</m:mn></m:math>&#160;satisfying

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:msup><m:mi>u</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>A</m:mi><m:mo>=</m:mo><m:mi>&#955;</m:mi><m:msup><m:mi>u</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mtext>&#8195;</m:mtext><m:mfenced separators=""><m:msup><m:mi>u</m:mi><m:mi mathvariant="normal">H</m:mi></m:msup><m:mi>A</m:mi><m:mo>=</m:mo><m:mi>&#955;</m:mi><m:msup><m:mi>u</m:mi><m:mi mathvariant="normal">H</m:mi></m:msup><m:mtext>&#8195; when &#8203;</m:mtext><m:mi>u</m:mi><m:mtext>&#8203; is complex</m:mtext></m:mfenced>
</m:math></td><td class="formula2"/></tr></table></div>

is called a <span class="italic">left eigenvector</span> of <m:math><m:mi>A</m:mi></m:math>.</div><div class="paramtext">A real matrix <m:math><m:mi>A</m:mi></m:math>&#160;may have complex eigenvalues, occurring as complex conjugate pairs.</div><div class="paramtext">This problem can be solved via the <span class="italic">Schur factorization</span> of <m:math><m:mi>A</m:mi></m:math>, defined in the real case as

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>A</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>Z</m:mi></m:math>&#160;is an orthogonal matrix and <m:math><m:mi>T</m:mi></m:math>&#160;is an upper quasi-triangular matrix with <m:math><m:mn>1</m:mn></m:math>&#160;by <m:math><m:mn>1</m:mn></m:math>&#160;and <m:math><m:mn>2</m:mn></m:math>&#160;by <m:math><m:mn>2</m:mn></m:math>&#160;diagonal blocks, the <m:math><m:mn>2</m:mn></m:math>&#160;by <m:math><m:mn>2</m:mn></m:math>&#160;blocks corresponding to complex conjugate pairs of eigenvalues of <m:math><m:mi>A</m:mi></m:math>.  In the complex case, the Schur factorization is

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>A</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">H</m:mi></m:msup><m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:mi>Z</m:mi></m:math>&#160;is unitary and <m:math><m:mi>T</m:mi></m:math>&#160;is a complex upper triangular matrix.</div><div class="paramtext">The columns of <m:math><m:mi>Z</m:mi></m:math>&#160;are called the <span class="italic">Schur vectors</span>.  For each <m:math><m:mi>k</m:mi></m:math>&#160;(<m:math><m:mn>1</m:mn><m:mo>&#8804;</m:mo><m:mi>k</m:mi><m:mo>&#8804;</m:mo><m:mi>n</m:mi></m:math>), the first <m:math><m:mi>k</m:mi></m:math>&#160;columns of <m:math><m:mi>Z</m:mi></m:math>&#160;form an orthonormal basis for the <span class="italic">invariant subspace</span> corresponding to the first <m:math><m:mi>k</m:mi></m:math>&#160;eigenvalues on the diagonal of <m:math><m:mi>T</m:mi></m:math>.  Because this basis is orthonormal, it is preferable in many applications to compute Schur vectors rather than eigenvectors.  It is possible to order the Schur factorization so that any desired set of <m:math><m:mi>k</m:mi></m:math>&#160;eigenvalues occupy the <m:math><m:mi>k</m:mi></m:math>&#160;leading positions on the diagonal of <m:math><m:mi>T</m:mi></m:math>.</div><div class="paramtext">The two basic tasks of the nonsymmetric eigenvalue routines are to compute, for a given matrix <m:math><m:mi>A</m:mi></m:math>, all <m:math><m:mi>n</m:mi></m:math>&#160;values of <m:math><m:mi>&#955;</m:mi></m:math>&#160;and, if desired, their associated right eigenvectors <m:math><m:mi>v</m:mi></m:math>&#160;and/or left eigenvectors <m:math><m:mi>u</m:mi></m:math>, and the Schur factorization.</div><div class="paramtext">These two basic tasks can be performed in the following stages.
<ol class="listnumber"><li class="listnumber">A general matrix <m:math><m:mi>A</m:mi></m:math>&#160;is reduced to <span class="italic">upper Hessenberg form</span>
<m:math><m:mi>H</m:mi></m:math>&#160;which is zero below the first subdiagonal.  The reduction may be written <m:math><m:mi>A</m:mi><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">T</m:mi></m:msup></m:math>&#160;with <m:math><m:mi>Q</m:mi></m:math>&#160;orthogonal if <m:math><m:mi>A</m:mi></m:math>&#160;is real, or <m:math><m:mi>A</m:mi><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>&#160;with <m:math><m:mi>Q</m:mi></m:math>&#160;unitary if <m:math><m:mi>A</m:mi></m:math>&#160;is complex.</li><li class="listnumber">The upper Hessenberg matrix <m:math><m:mi>H</m:mi></m:math>&#160;is reduced to Schur form <m:math><m:mi>T</m:mi></m:math>, giving the Schur factorization <m:math><m:mi>H</m:mi><m:mo>=</m:mo><m:mi>S</m:mi><m:mi>T</m:mi><m:msup><m:mi>S</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup></m:math>&#160;(for <m:math><m:mi>H</m:mi></m:math>&#160;real) or <m:math><m:mi>H</m:mi><m:mo>=</m:mo><m:mi>S</m:mi><m:mi>T</m:mi><m:msup><m:mi>S</m:mi><m:mi mathvariant="normal">H</m:mi></m:msup></m:math>&#160;(for <m:math><m:mi>H</m:mi></m:math>&#160;complex).  The matrix <m:math><m:mi>S</m:mi></m:math>&#160;(the Schur vectors of <m:math><m:mi>H</m:mi></m:math>) may optionally be computed as well.  Alternatively <m:math><m:mi>S</m:mi></m:math>&#160;may be postmultiplied into the matrix <m:math><m:mi>Q</m:mi></m:math>&#160;determined in stage <m:math><m:mn>1</m:mn></m:math>, to give the matrix <m:math><m:mi>Z</m:mi><m:mo>=</m:mo><m:mi>Q</m:mi><m:mi>S</m:mi></m:math>, the Schur vectors of <m:math><m:mi>A</m:mi></m:math>.  The eigenvalues are obtained from the diagonal elements or diagonal blocks of <m:math><m:mi>T</m:mi></m:math>.</li><li class="listnumber">Given the eigenvalues, the eigenvectors may be computed in two different ways.  Inverse iteration can be performed on <m:math><m:mi>H</m:mi></m:math>&#160;to compute the eigenvectors of <m:math><m:mi>H</m:mi></m:math>, and then the eigenvectors can be multiplied by the matrix <m:math><m:mi>Q</m:mi></m:math>&#160;in order to transform them to eigenvectors of <m:math><m:mi>A</m:mi></m:math>.  Alternatively the eigenvectors of <m:math><m:mi>T</m:mi></m:math>&#160;can be computed, and optionally transformed to those of <m:math><m:mi>H</m:mi></m:math>&#160;or <m:math><m:mi>A</m:mi></m:math>&#160;if the matrix <m:math><m:mi>S</m:mi></m:math>&#160;or <m:math><m:mi>Z</m:mi></m:math>&#160;is supplied.</li></ol>
</div><div class="paramtext">The accuracy with which eigenvalues can be obtained can often be improved by <span class="italic">balancing</span> a matrix.  This is discussed further in <a class="sec" href="#background116">Section 2.14.6</a> below.</div><h3 class="standard"><a class="sec" name="background9a" id="background9a"/>2.12&#160;&#160;Generalized Nonsymmetric Eigenvalue Problem</h3>
<div class="paramtext">The <span class="italic">generalized nonsymmetric eigenvalue problem</span> is to find the eigenvalues, <m:math><m:mi>&#955;</m:mi></m:math>, and corresponding <span class="italic">eigenvectors</span>, <m:math><m:mi>v</m:mi><m:mo>&#8800;</m:mo><m:mn>0</m:mn></m:math>, such that

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>A</m:mi><m:mi>v</m:mi><m:mo>=</m:mo><m:mi>&#955;</m:mi><m:mi>B</m:mi><m:mi>v</m:mi><m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div></div><div class="paramtext">More precisely, a vector <m:math><m:mi>v</m:mi></m:math>&#160;as just defined is called a <span class="italic">right eigenvector</span> of the matrix pair <m:math><m:mfenced separators=""><m:mi>A</m:mi><m:mo>,</m:mo><m:mi>B</m:mi></m:mfenced></m:math>, and a vector <m:math><m:mi>u</m:mi><m:mo>&#8800;</m:mo><m:mn>0</m:mn></m:math>&#160;satisfying

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:msup><m:mi>u</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>A</m:mi><m:mo>=</m:mo><m:mi>&#955;</m:mi><m:msup><m:mi>u</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>B</m:mi><m:mtext>&#8195;</m:mtext><m:mfenced separators=""><m:msup><m:mi>u</m:mi><m:mi mathvariant="normal">H</m:mi></m:msup><m:mi>A</m:mi><m:mo>=</m:mo><m:mi>&#955;</m:mi><m:msup><m:mi>u</m:mi><m:mi mathvariant="normal">H</m:mi></m:msup><m:mi>B</m:mi><m:mtext>&#8203; when &#8203;</m:mtext><m:mi>u</m:mi><m:mtext>&#8203; is complex</m:mtext></m:mfenced>
</m:math></td><td class="formula2"/></tr></table></div>

is called a <span class="italic">left eigenvector</span> of the matrix pair <m:math><m:mfenced separators=""><m:mi>A</m:mi><m:mo>,</m:mo><m:mi>B</m:mi></m:mfenced></m:math>.</div><div class="paramtext">If <m:math><m:mi>B</m:mi></m:math>&#160;is singular then the problem has one or more <span class="italic">infinite eigenvalues</span>
<m:math><m:mi>&#955;</m:mi><m:mo>=</m:mo><m:mi>&#8734;</m:mi></m:math>, corresponding to <m:math><m:mi>B</m:mi><m:mi>v</m:mi><m:mo>=</m:mo><m:mn>0</m:mn></m:math>.  Note that if <m:math><m:mi>A</m:mi></m:math>&#160;is nonsingular, then the equivalent problem <m:math><m:mi>&#956;</m:mi><m:mi>A</m:mi><m:mi>v</m:mi><m:mo>=</m:mo><m:mi>B</m:mi><m:mi>v</m:mi></m:math>&#160;is perfectly well defined and an infinite eigenvalue corresponds to <m:math><m:mi>&#956;</m:mi><m:mo>=</m:mo><m:mn>0</m:mn></m:math>.  To deal with both finite (including zero) and infinite eigenvalues, the routines in this chapter do not compute <m:math><m:mi>&#955;</m:mi></m:math>&#160;explicitly, but rather return a pair of numbers <m:math><m:mfenced separators=""><m:mi>&#945;</m:mi><m:mo>,</m:mo><m:mi>&#946;</m:mi></m:mfenced></m:math>&#160;such that if <m:math><m:mi>&#946;</m:mi><m:mo>&#8800;</m:mo><m:mn>0</m:mn></m:math>&#160;
<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>&#955;</m:mi>
 <m:mo>=</m:mo><m:mi>&#945;</m:mi><m:mo>/</m:mo><m:mi>&#946;</m:mi>
</m:math></td><td class="formula2"/></tr></table></div>

and if <m:math><m:mi>&#945;</m:mi><m:mo>&#8800;</m:mo><m:mn>0</m:mn></m:math>&#160;and <m:math><m:mi>&#946;</m:mi><m:mo>=</m:mo><m:mn>0</m:mn></m:math>&#160;then <m:math><m:mi>&#955;</m:mi><m:mo>=</m:mo><m:mi>&#8734;</m:mi></m:math>.  <m:math><m:mi>&#946;</m:mi></m:math>&#160;is always returned as real and non-negative.  Of course, computationally an infinite eigenvalue may correspond to a small <m:math><m:mi>&#946;</m:mi></m:math>&#160;rather than an exact zero.</div><div class="paramtext">For a given pair <m:math><m:mfenced separators=""><m:mi>A</m:mi><m:mo>,</m:mo><m:mi>B</m:mi></m:mfenced></m:math>&#160;the set of all the matrices of the form <m:math><m:mfenced separators=""><m:mi>A</m:mi><m:mo>-</m:mo><m:mi>&#955;</m:mi><m:mi>B</m:mi></m:mfenced></m:math>&#160;is called a matrix <span class="italic">pencil</span> and <m:math><m:mi>&#955;</m:mi></m:math>&#160;and <m:math><m:mi>v</m:mi></m:math>&#160;are said to be an eigenvalue and eigenvector of the pencil <m:math><m:mfenced separators=""><m:mi>A</m:mi><m:mo>-</m:mo><m:mi>&#955;</m:mi><m:mi>B</m:mi></m:mfenced></m:math>.  If <m:math><m:mi>A</m:mi></m:math>&#160;and <m:math><m:mi>B</m:mi></m:math>&#160;are both singular and share a common null space then

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block"><m:mi mathvariant="normal">det</m:mi><m:mfenced separators=""><m:mi>A</m:mi><m:mo>-</m:mo><m:mi>&#955;</m:mi><m:mi>B</m:mi></m:mfenced><m:mo>&#8801;</m:mo><m:mn>0</m:mn>
</m:math></td><td class="formula2"/></tr></table></div>

so that the pencil <m:math><m:mfenced separators=""><m:mi>A</m:mi><m:mo>-</m:mo><m:mi>&#955;</m:mi><m:mi>B</m:mi></m:mfenced></m:math>&#160;is <span class="italic">singular</span> for all <m:math><m:mi>&#955;</m:mi></m:math>.  In other words any <m:math><m:mi>&#955;</m:mi></m:math>&#160;can be regarded as an eigenvalue.  In exact arithmetic a singular pencil will have <m:math><m:mi>&#945;</m:mi><m:mo>=</m:mo><m:mi>&#946;</m:mi><m:mo>=</m:mo><m:mn>0</m:mn></m:math>&#160;for some <m:math><m:mfenced separators=""><m:mi>&#945;</m:mi><m:mo>,</m:mo><m:mi>&#946;</m:mi></m:mfenced></m:math>.  Computationally if some pair <m:math><m:mfenced separators=""><m:mi>&#945;</m:mi><m:mo>,</m:mo><m:mi>&#946;</m:mi></m:mfenced></m:math>&#160;is small then the pencil is singular, or nearly singular, and no reliance can be placed on any of the computed eigenvalues.  Singular pencils can also manifest themselves in other ways; see, in particular, Sections 2.3.5.2 and 4.11.1.4 of <a class="ref" href="#ref562">Anderson <span class="italic">et al.</span> (1999)</a> for further details.</div><div class="paramtext">The generalized eigenvalue problem can be solved via the <span class="italic">generalized Schur factorization</span> of the pair <m:math><m:mfenced separators=""><m:mi>A</m:mi><m:mo>,</m:mo><m:mi>B</m:mi></m:mfenced></m:math>&#160;defined in the real case as

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>A</m:mi>
 <m:mo>=</m:mo><m:mi>Q</m:mi><m:mi>S</m:mi><m:msup><m:mi>Z</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mtext>, &#8195;</m:mtext><m:mi>B</m:mi><m:mo>=</m:mo><m:mi>Q</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>Q</m:mi></m:math>&#160;and <m:math><m:mi>Z</m:mi></m:math>&#160;are orthogonal, <m:math><m:mi>T</m:mi></m:math>&#160;is upper triangular with non-negative diagonal elements and <m:math><m:mi>S</m:mi></m:math>&#160;is upper quasi-triangular with <m:math><m:mn>1</m:mn></m:math>&#160;by <m:math><m:mn>1</m:mn></m:math>&#160;and <m:math><m:mn>2</m:mn></m:math>&#160;by <m:math><m:mn>2</m:mn></m:math>&#160;diagonal blocks, the <m:math><m:mn>2</m:mn></m:math>&#160;by <m:math><m:mn>2</m:mn></m:math>&#160;blocks corresponding to complex conjugate pairs of eigenvalues.  In the complex case, the generalized Schur factorization is

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>A</m:mi>
 <m:mo>=</m:mo><m:mi>Q</m:mi><m:mi>S</m:mi><m:msup><m:mi>Z</m:mi><m:mi mathvariant="normal">H</m:mi></m:msup><m:mtext>, &#8195;</m:mtext><m:mi>B</m:mi><m:mo>=</m:mo><m:mi>Q</m:mi><m:mi>T</m:mi><m:msup><m:mi>Z</m:mi><m:mi mathvariant="normal">H</m:mi></m:msup><m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:mi>Q</m:mi></m:math>&#160;and <m:math><m:mi>Z</m:mi></m:math>&#160;are unitary and <m:math><m:mi>S</m:mi></m:math>&#160;and <m:math><m:mi>T</m:mi></m:math>&#160;are upper triangular, with <m:math><m:mi>T</m:mi></m:math>&#160;having real non-negative diagonal elements.  The columns of <m:math><m:mi>Q</m:mi></m:math>&#160;and <m:math><m:mi>Z</m:mi></m:math>&#160;are called respectively the <span class="italic">left</span> and <span class="italic">right generalized Schur vectors</span> and span pairs of <span class="italic">deflating subspaces</span> of <m:math><m:mi>A</m:mi></m:math>&#160;and <m:math><m:mi>B</m:mi></m:math>, which are a generalization of invariant subspaces.</div><div class="paramtext">It is possible to order the generalized Schur factorization so that any desired set of <m:math><m:mi>k</m:mi></m:math>&#160;eigenvalues correspond to the <m:math><m:mi>k</m:mi></m:math>&#160;leading positions on the diagonals of the pair <m:math><m:mfenced separators=""><m:mi>S</m:mi><m:mo>,</m:mo><m:mi>T</m:mi></m:mfenced></m:math>.</div><div class="paramtext">The two basic tasks of the generalized nonsymmetric eigenvalue routines are to compute, for a given pair <m:math><m:mfenced separators=""><m:mi>A</m:mi><m:mo>,</m:mo><m:mi>B</m:mi></m:mfenced></m:math>, all <m:math><m:mi>n</m:mi></m:math>&#160;values of <m:math><m:mi>&#955;</m:mi></m:math>&#160;and, if desired, their associated right eigenvectors <m:math><m:mi>v</m:mi></m:math>&#160;and/or left eigenvectors <m:math><m:mi>u</m:mi></m:math>, and the generalized Schur factorization.</div><div class="paramtext">These two basic tasks can be performed in the following stages.
<ol class="listnumber"><li class="listnumber">The matrix pair <m:math><m:mfenced separators=""><m:mi>A</m:mi><m:mo>,</m:mo><m:mi>B</m:mi></m:mfenced></m:math>&#160;is reduced to <span class="italic">generalized upper</span> Hessenberg form <m:math><m:mfenced separators=""><m:mi>H</m:mi><m:mo>,</m:mo><m:mi>R</m:mi></m:mfenced></m:math>,
where <m:math><m:mi>H</m:mi></m:math>&#160;is upper Hessenberg (zero below the first subdiagonal) and <m:math><m:mi>R</m:mi></m:math>&#160;is upper triangular.  The reduction may be written as <m:math><m:mi>A</m:mi><m:mo>=</m:mo><m:msub><m:mi>Q</m:mi><m:mn>1</m:mn></m:msub><m:mi>H</m:mi><m:msubsup><m:mi>Z</m:mi><m:mn>1</m:mn><m:mi mathvariant="normal">T</m:mi></m:msubsup><m:mo>,</m:mo>
<m:mi>B</m:mi><m:mo>=</m:mo><m:msub><m:mi>Q</m:mi><m:mn>1</m:mn></m:msub><m:mi>R</m:mi><m:msubsup><m:mi>Z</m:mi><m:mn>1</m:mn><m:mi mathvariant="normal">T</m:mi></m:msubsup></m:math>&#160;in the real case with <m:math><m:msub><m:mi>Q</m:mi><m:mn>1</m:mn></m:msub></m:math>&#160;and <m:math><m:msub><m:mi>Z</m:mi><m:mn>1</m:mn></m:msub></m:math>&#160;orthogonal, and <m:math>
 <m:mi>A</m:mi><m:mo>=</m:mo><m:msub><m:mi>Q</m:mi><m:mn>1</m:mn></m:msub><m:mi>H</m:mi>
 <m:msubsup><m:mi>Z</m:mi><m:mn>1</m:mn><m:mi mathvariant="normal">H</m:mi></m:msubsup>
 <m:mo>,</m:mo>
 <m:mi>B</m:mi><m:mo>=</m:mo><m:msub><m:mi>Q</m:mi><m:mn>1</m:mn></m:msub><m:mi>R</m:mi>
 <m:msubsup><m:mi>Z</m:mi><m:mn>1</m:mn><m:mi mathvariant="normal">H</m:mi></m:msubsup>
</m:math>&#160;in the complex case with <m:math><m:msub><m:mi>Q</m:mi><m:mn>1</m:mn></m:msub></m:math>&#160;and <m:math><m:msub><m:mi>Z</m:mi><m:mn>1</m:mn></m:msub></m:math>&#160;unitary.</li><li class="listnumber">The generalized upper Hessenberg form <m:math><m:mfenced separators=""><m:mi>H</m:mi><m:mo>,</m:mo><m:mi>R</m:mi></m:mfenced></m:math>&#160;is reduced to the generalized
Schur form <m:math><m:mfenced separators=""><m:mi>S</m:mi><m:mo>,</m:mo><m:mi>T</m:mi></m:mfenced></m:math>&#160;using the generalized Schur factorization <m:math><m:mi>H</m:mi><m:mo>=</m:mo><m:msub><m:mi>Q</m:mi><m:mn>2</m:mn></m:msub><m:mi>S</m:mi>
<m:msubsup><m:mi>Z</m:mi><m:mn>2</m:mn><m:mi mathvariant="normal">T</m:mi></m:msubsup></m:math>, <m:math><m:mi>R</m:mi><m:mo>=</m:mo><m:msub><m:mi>Q</m:mi><m:mn>2</m:mn></m:msub><m:mi>T</m:mi>
<m:msubsup><m:mi>Z</m:mi><m:mn>2</m:mn><m:mi mathvariant="normal">T</m:mi></m:msubsup></m:math>&#160;in the real case with <m:math><m:msub><m:mi>Q</m:mi><m:mn>2</m:mn></m:msub></m:math>&#160;and <m:math><m:msub><m:mi>Z</m:mi><m:mn>2</m:mn></m:msub></m:math>&#160;orthogonal, and <m:math><m:mi>H</m:mi><m:mo>=</m:mo><m:msub><m:mi>Q</m:mi><m:mn>2</m:mn></m:msub>
<m:mi>S</m:mi><m:msubsup><m:mi>Z</m:mi><m:mn>2</m:mn><m:mi mathvariant="normal">H</m:mi></m:msubsup><m:mo>,</m:mo>
<m:mi>R</m:mi><m:mo>=</m:mo><m:msub><m:mi>Q</m:mi><m:mn>2</m:mn></m:msub><m:mi>T</m:mi>
<m:msubsup><m:mi>Z</m:mi><m:mn>2</m:mn><m:mi mathvariant="normal">H</m:mi></m:msubsup></m:math>&#160;in the complex case.  The generalized Schur vectors of <m:math><m:mfenced separators=""><m:mi>A</m:mi><m:mo>,</m:mo><m:mi>B</m:mi></m:mfenced></m:math>&#160;are given by <m:math><m:mi>Q</m:mi><m:mo>=</m:mo><m:msub><m:mi>Q</m:mi><m:mn>1</m:mn></m:msub><m:msub><m:mi>Q</m:mi><m:mn>2</m:mn></m:msub></m:math>, <m:math><m:mi>Z</m:mi><m:mo>=</m:mo><m:msub><m:mi>Z</m:mi><m:mn>1</m:mn></m:msub><m:msub><m:mi>Z</m:mi><m:mn>2</m:mn></m:msub></m:math>.  The eigenvalues are obtained from the diagonal elements (or blocks) of the pair <m:math><m:mfenced separators=""><m:mi>S</m:mi><m:mo>,</m:mo><m:mi>T</m:mi></m:mfenced></m:math>.</li><li class="listnumber">Given the eigenvalues, the eigenvectors of the pair <m:math><m:mfenced separators=""><m:mi>S</m:mi><m:mo>,</m:mo><m:mi>T</m:mi></m:mfenced></m:math>&#160;can be computed, and optionally transformed to those of <m:math><m:mfenced separators=""><m:mi>H</m:mi><m:mo>,</m:mo><m:mi>R</m:mi></m:mfenced></m:math>&#160;or <m:math><m:mfenced separators=""><m:mi>A</m:mi><m:mo>,</m:mo><m:mi>B</m:mi></m:mfenced></m:math>.</li></ol>
</div><div class="paramtext">The accuracy with which eigenvalues can be obtained can often be improved by <span class="italic">balancing</span> a matrix pair.  This is discussed further in <a class="sec" href="#background9b2">Section 2.14.8</a> below.</div><h3 class="standard"><a class="sec" name="background10" id="background10"/>2.13&#160;&#160;The Sylvester Equation and the Generalized Sylvester Equation</h3>
<div class="paramtext">The Sylvester equation is a matrix equation of the form

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>A</m:mi><m:mi>X</m:mi><m:mo>+</m:mo><m:mi>X</m:mi><m:mi>B</m:mi><m:mo>=</m:mo><m:mi>C</m:mi><m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:mi>A</m:mi></m:math>, <m:math><m:mi>B</m:mi></m:math>, and <m:math><m:mi>C</m:mi></m:math>&#160;are given matrices with <m:math><m:mi>A</m:mi></m:math>&#160;being <m:math><m:mi>m</m:mi></m:math>&#160;by <m:math><m:mi>m</m:mi></m:math>, <m:math><m:mi>B</m:mi></m:math>&#160;an <m:math><m:mi>n</m:mi></m:math>&#160;by <m:math><m:mi>n</m:mi></m:math>&#160;matrix and <m:math><m:mi>C</m:mi></m:math>, and the solution matrix <m:math><m:mi>X</m:mi></m:math>, <m:math><m:mi>m</m:mi></m:math>&#160;by <m:math><m:mi>n</m:mi></m:math>&#160;matrices.  The solution of a special case of this equation occurs in the computation of the condition number for an invariant subspace, but a combination of routines in this chapter allows the solution of the general Sylvester equation.</div><div class="paramtext">Routines are also provided for solving a special case of the generalized Sylvester equations

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>A</m:mi><m:mi>R</m:mi><m:mo>-</m:mo><m:mi>L</m:mi><m:mi>B</m:mi><m:mo>=</m:mo><m:mi>C</m:mi>
 <m:mtext>,&#8195;</m:mtext>
 <m:mi>D</m:mi><m:mi>R</m:mi><m:mo>-</m:mo><m:mi>L</m:mi><m:mi>E</m:mi><m:mo>=</m:mo><m:mi>F</m:mi>
 <m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:mfenced separators=""><m:mi>A</m:mi><m:mo>,</m:mo><m:mi>D</m:mi></m:mfenced></m:math>, <m:math><m:mfenced separators=""><m:mi>B</m:mi><m:mo>,</m:mo><m:mi>E</m:mi></m:mfenced></m:math>&#160;and <m:math><m:mfenced separators=""><m:mi>C</m:mi><m:mo>,</m:mo><m:mi>F</m:mi></m:mfenced></m:math>&#160;are given matrix pairs, and <m:math><m:mi>R</m:mi></m:math>&#160;and <m:math><m:mi>L</m:mi></m:math>&#160;are the solution matrices.</div><h3 class="standard"><a class="sec" name="background11" id="background11"/>2.14&#160;&#160;Error and Perturbation Bounds and Condition Numbers</h3>
<div class="paramtext">In this section we discuss the effects of rounding errors in the solution process and the effects of uncertainties in the data, on the solution to the problem.  A number of the routines in this chapter return information, such as condition numbers, that allow these effects to be assessed.  First we discuss some notation used in the error bounds of later sections.</div><div class="paramtext">The bounds usually contain the factor <m:math><m:mi>p</m:mi><m:mfenced separators=""><m:mi>n</m:mi></m:mfenced></m:math>&#160;(or <m:math><m:mi>p</m:mi><m:mfenced separators=""><m:mi>m</m:mi><m:mo>,</m:mo><m:mi>n</m:mi></m:mfenced></m:math>), which grows as a function of the matrix dimension <m:math><m:mi>n</m:mi></m:math>&#160;(or matrix dimensions <m:math><m:mi>m</m:mi></m:math>&#160;and <m:math><m:mi>n</m:mi></m:math>).  It measures how errors can grow as a function of the matrix dimension, and represents a potentially different function for each problem.  In practice, it usually grows just linearly; <m:math><m:mi>p</m:mi><m:mfenced separators=""><m:mi>n</m:mi></m:mfenced><m:mo>&#8804;</m:mo><m:mn>10</m:mn><m:mi>n</m:mi></m:math>&#160;is often true, although generally only much weaker bounds can be actually proved.  We normally describe <m:math><m:mi>p</m:mi><m:mfenced separators=""><m:mi>n</m:mi></m:mfenced></m:math>&#160;as a &#8216;modestly growing&#8217; function of <m:math><m:mi>n</m:mi></m:math>.  For detailed derivations of various <m:math><m:mi>p</m:mi><m:mfenced separators=""><m:mi>n</m:mi></m:mfenced></m:math>, see <a class="ref" href="#ref105">Golub and Van Loan (1996)</a> and <a class="ref" href="#ref003">Wilkinson (1965)</a>.</div><div class="paramtext">For linear equation (see <a class="chap" href="../F07/f07conts.xml">Chapter F07</a>) and least squares solvers, we consider bounds on the relative error <m:math><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>x</m:mi><m:mo>-</m:mo><m:mover><m:mi>x</m:mi><m:mo>^</m:mo></m:mover></m:mfenced><m:mo>/</m:mo><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;in the computed solution <m:math><m:mover><m:mi>x</m:mi><m:mo>^</m:mo></m:mover></m:math>, where <m:math><m:mi>x</m:mi></m:math>&#160;is the true solution.  For eigenvalue problems we consider bounds on the error <m:math><m:mfenced open="|" close="|" separators=""><m:msub><m:mi>&#955;</m:mi><m:mi>i</m:mi></m:msub><m:mo>-</m:mo><m:msub><m:mover><m:mi>&#955;</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi></m:msub></m:mfenced></m:math>&#160;in the <m:math><m:mi>i</m:mi></m:math>th computed eigenvalue <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>, where <m:math><m:msub><m:mi>&#955;</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;is the true <m:math><m:mi>i</m:mi></m:math>th eigenvalue.  For singular value problems we similarly consider bounds <m:math><m:mfenced open="|" close="|" separators=""><m:msub><m:mi>&#963;</m:mi><m:mi>i</m:mi></m:msub><m:mo>-</m:mo><m:msub><m:mover><m:mi>&#963;</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi></m:msub></m:mfenced></m:math>.</div><div class="paramtext">Bounding the error in computed eigenvectors and singular vectors <m:math><m:msub><m:mover><m:mi>v</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi></m:msub></m:math>&#160;is more subtle because these vectors are not unique: even though we restrict <m:math><m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:msub><m:mover><m:mi>v</m:mi><m:mo>^</m:mo></m:mover><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>&#160;and <m:math><m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:msub><m:mi>v</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>, we may still multiply them by arbitrary constants of absolute value <m:math><m:mn>1</m:mn></m:math>.  So to avoid ambiguity we bound the <span class="italic">angular difference</span> between <m:math><m:msub><m:mover><m:mi>v</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi></m:msub></m:math>&#160;and the true vector <m:math><m:msub><m:mi>v</m:mi><m:mi>i</m:mi></m:msub></m:math>, so that

<div class="formula-eqn"><a name="eqn2" id="eqn2"/><table class="formula-eqn"><tr><td class="formula-eqn"><m:math display="block">
<m:mtable columnalign="left center left">
 <m:mtr>
  <m:mtd><m:mi>&#952;</m:mi><m:mfenced separators=""><m:msub><m:mi>v</m:mi><m:mi>i</m:mi></m:msub><m:mo>,</m:mo><m:msub><m:mover><m:mi>v</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi></m:msub></m:mfenced></m:mtd>
  <m:mtd><m:mo>=</m:mo></m:mtd>
  <m:mtd><m:mtext>acute angle between &#8203;</m:mtext><m:msub><m:mi>v</m:mi><m:mi>i</m:mi></m:msub><m:mtext>&#8203; and &#8203;</m:mtext><m:msub><m:mover><m:mi>v</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi></m:msub></m:mtd>
 </m:mtr><m:mtr>
  <m:mtd/>
  <m:mtd><m:mo>=</m:mo></m:mtd>
  <m:mtd><m:mrow><m:mi>arccos</m:mi><m:mfenced open="|" close="|" separators=""><m:msubsup><m:mi>v</m:mi><m:mi>i</m:mi><m:mi mathvariant="normal">H</m:mi></m:msubsup><m:msub><m:mover><m:mi>v</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi></m:msub></m:mfenced></m:mrow><m:mtext>.</m:mtext></m:mtd>
 </m:mtr>
</m:mtable>
</m:math></td><td class="formula-eqn2">
      (2)
     </td></tr></table></div>

Here <m:math><m:mrow><m:mi>arccos</m:mi><m:mfenced separators=""><m:mi>&#952;</m:mi></m:mfenced></m:mrow></m:math>&#160;is in the standard range: <m:math><m:mn>0</m:mn><m:mo>&#8804;</m:mo><m:mrow><m:mi>arccos</m:mi><m:mfenced separators=""><m:mi>&#952;</m:mi></m:mfenced></m:mrow><m:mo>&lt;</m:mo><m:mi>&#960;</m:mi></m:math>. When <m:math><m:mi>&#952;</m:mi><m:mfenced separators=""><m:msub><m:mi>v</m:mi><m:mi>i</m:mi></m:msub><m:mo>,</m:mo><m:msub><m:mover><m:mi>v</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi></m:msub></m:mfenced></m:math>&#160;is small, we can choose a constant <m:math><m:mi>&#945;</m:mi></m:math>&#160;with absolute value <m:math><m:mn>1</m:mn></m:math>&#160;so that <m:math><m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>&#945;</m:mi><m:msub><m:mi>v</m:mi><m:mi>i</m:mi></m:msub><m:mo>-</m:mo><m:msub><m:mover><m:mi>v</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi></m:msub></m:mfenced><m:mn>2</m:mn></m:msub><m:mo>&#8776;</m:mo><m:mi>&#952;</m:mi><m:mfenced separators=""><m:msub><m:mi>v</m:mi><m:mi>i</m:mi></m:msub><m:mo>,</m:mo><m:msub><m:mover><m:mi>v</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi></m:msub></m:mfenced></m:math>.</div><div class="paramtext">In addition to bounds for individual eigenvectors, bounds can be obtained for the spaces spanned by collections of eigenvectors.  These may be much more accurately determined than the individual eigenvectors which span them.  These spaces are called <span class="italic">invariant subspaces</span> in the case of eigenvectors, because if <m:math><m:mi>v</m:mi></m:math>&#160;is any vector in the space, <m:math><m:mi>A</m:mi><m:mi>v</m:mi></m:math>&#160;is also in the space, where <m:math><m:mi>A</m:mi></m:math>&#160;is the matrix.  Again, we will use angle to measure the difference between a computed space <m:math><m:mover><m:mi>S</m:mi><m:mo>^</m:mo></m:mover></m:math>&#160;and the true space <m:math><m:mi>S</m:mi></m:math>:

<div class="formula-eqn"><a name="eqn3" id="eqn3"/><table class="formula-eqn"><tr><td class="formula-eqn"><m:math display="block">
<m:mtable columnalign="left center left">
 <m:mtr>
  <m:mtd><m:mi>&#952;</m:mi><m:mfenced separators=""><m:mi>S</m:mi><m:mo>,</m:mo><m:mover><m:mi>S</m:mi><m:mo>^</m:mo></m:mover></m:mfenced></m:mtd>
  <m:mtd><m:mo>=</m:mo></m:mtd>
  <m:mtd><m:mtext>acute angle between &#8203;</m:mtext><m:mi>S</m:mi><m:mtext>&#8203; and &#8203;</m:mtext><m:mover><m:mi>S</m:mi><m:mo>^</m:mo></m:mover></m:mtd>
 </m:mtr><m:mtr>
  <m:mtd/>
  <m:mtd><m:mo>=</m:mo></m:mtd>
  <m:mtd><m:munder><m:mi mathvariant="normal">max</m:mi><m:mtable other="stack">
<m:mtr><m:mtd><m:mi>s</m:mi><m:mo>&#8712;</m:mo><m:mi>S</m:mi></m:mtd></m:mtr>
<m:mtr><m:mtd><m:mi>s</m:mi><m:mo>&#8800;</m:mo><m:mn>0</m:mn></m:mtd></m:mtr>
</m:mtable></m:munder><m:mspace width="0.25em"/>
<m:munder><m:mi mathvariant="normal">min</m:mi><m:mtable other="stack">
<m:mtr><m:mtd><m:mover><m:mi>s</m:mi><m:mo>^</m:mo></m:mover><m:mo>&#8712;</m:mo><m:mover><m:mi>S</m:mi><m:mo>^</m:mo></m:mover></m:mtd></m:mtr>
<m:mtr><m:mtd><m:mover><m:mi>s</m:mi><m:mo>^</m:mo></m:mover><m:mo>&#8800;</m:mo><m:mn>0</m:mn></m:mtd></m:mtr>
 </m:mtable></m:munder><m:mspace width="0.25em"/>
<m:mi>&#952;</m:mi><m:mfenced separators=""><m:mi>s</m:mi><m:mo>,</m:mo><m:mover><m:mi>s</m:mi><m:mo>^</m:mo></m:mover></m:mfenced>
<m:mtext>&#8195; or &#8195;</m:mtext>
<m:munder><m:mi mathvariant="normal">max</m:mi><m:mtable other="stack">
<m:mtr><m:mtd><m:mover><m:mi>s</m:mi><m:mo>^</m:mo></m:mover><m:mo>&#8712;</m:mo><m:mover><m:mi>S</m:mi><m:mo>^</m:mo></m:mover></m:mtd></m:mtr>
<m:mtr><m:mtd><m:mover><m:mi>s</m:mi><m:mo>^</m:mo></m:mover><m:mo>&#8800;</m:mo><m:mn>0</m:mn></m:mtd></m:mtr>
</m:mtable></m:munder><m:mspace width="0.25em"/>
<m:munder><m:mi mathvariant="normal">min</m:mi><m:mtable other="stack">
<m:mtr><m:mtd><m:mi>s</m:mi><m:mo>&#8712;</m:mo><m:mi>S</m:mi></m:mtd></m:mtr>
<m:mtr><m:mtd><m:mi>s</m:mi><m:mo>&#8800;</m:mo><m:mn>0</m:mn></m:mtd></m:mtr>
</m:mtable></m:munder><m:mspace width="0.25em"/>
<m:mi>&#952;</m:mi><m:mfenced separators=""><m:mi>s</m:mi><m:mo>,</m:mo><m:mover><m:mi>s</m:mi><m:mo>^</m:mo></m:mover></m:mfenced></m:mtd>
 </m:mtr>
</m:mtable>
</m:math></td><td class="formula-eqn2">
      (3)
     </td></tr></table></div></div><div class="paramtext"><m:math><m:mi>&#952;</m:mi><m:mfenced separators=""><m:mi>S</m:mi><m:mo>,</m:mo><m:mover><m:mi>S</m:mi><m:mo>^</m:mo></m:mover></m:mfenced></m:math>&#160;may be computed as follows.  Let <m:math><m:mi>S</m:mi></m:math>&#160;be a matrix whose columns are orthonormal and <m:math><m:mrow><m:mi>span</m:mi><m:mo>&#8289;</m:mo><m:mi>S</m:mi></m:mrow></m:math>.  Similarly let <m:math><m:mover><m:mi>S</m:mi><m:mo>^</m:mo></m:mover></m:math>&#160;be an orthonormal matrix with columns spanning <m:math><m:mover><m:mi>S</m:mi><m:mo>^</m:mo></m:mover></m:math>.  Then

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>&#952;</m:mi><m:mfenced separators=""><m:mi>S</m:mi><m:mo>,</m:mo><m:mover><m:mi>S</m:mi><m:mo>^</m:mo></m:mover></m:mfenced><m:mo>=</m:mo><m:mrow><m:mi>arccos</m:mi><m:mo>&#8289;</m:mo><m:msub><m:mi>&#963;</m:mi><m:mi mathvariant="normal">min</m:mi></m:msub></m:mrow><m:mfenced separators=""><m:msup><m:mi>S</m:mi><m:mi mathvariant="normal">H</m:mi></m:msup><m:mover><m:mi>S</m:mi><m:mo>^</m:mo></m:mover></m:mfenced><m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

Finally, we remark on the accuracy of the bounds when they are large.  Relative errors like <m:math><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mover><m:mi>x</m:mi><m:mo>^</m:mo></m:mover><m:mo>-</m:mo><m:mi>x</m:mi></m:mfenced><m:mo>/</m:mo><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;and angular errors like <m:math><m:mi>&#952;</m:mi><m:mfenced separators=""><m:msub><m:mover><m:mi>v</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi></m:msub><m:mo>,</m:mo><m:msub><m:mi>v</m:mi><m:mi>i</m:mi></m:msub></m:mfenced></m:math>&#160;are only of interest when they are much less than <m:math><m:mn>1</m:mn></m:math>.  Some stated bounds are not strictly true when they are close to <m:math><m:mn>1</m:mn></m:math>, but rigorous bounds are much more complicated and supply little extra information in the interesting case of small errors.  These bounds are indicated by using the symbol <m:math><m:mo>&#8818;</m:mo></m:math>, or &#8216;approximately less than&#8217;, instead of the usual <m:math><m:mo>&#8804;</m:mo></m:math>.  Thus, when these bounds are close to 1 or greater, they indicate that the computed answer may have no significant digits at all, but do not otherwise bound the error.
</div><div class="paramtext">A number of routines in this chapter return error estimates and/or condition number estimates directly.  In other cases <a class="ref" href="#ref562">Anderson <span class="italic">et al.</span> (1999)</a> gives code fragments to illustrate the computation of these estimates, and a number of the <a class="chap" href="../F08/f08conts.xml">Chapter F08</a> example programs, for the driver routines, implement these code fragments.</div><h4 class="standard"><a class="sec" name="background111" id="background111"/>2.14.1&#160;&#160;Least squares problems</h4>
<div class="paramtext">The conventional error analysis of linear least squares problems goes as follows.  The problem is to find the <m:math><m:mi>x</m:mi></m:math>&#160;minimizing <m:math><m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>A</m:mi><m:mi>x</m:mi><m:mo>-</m:mo><m:mi>b</m:mi></m:mfenced><m:mn>2</m:mn></m:msub></m:math>.  Let <m:math><m:mover><m:mi>x</m:mi><m:mo>^</m:mo></m:mover></m:math>&#160;be the solution computed using one of the methods described above.  We discuss the most common case, where <m:math><m:mi>A</m:mi></m:math>&#160;is overdetermined (i.e., has more rows than columns) and has full rank.</div><div class="paramtext">Then the computed solution <m:math><m:mover><m:mi>x</m:mi><m:mo>^</m:mo></m:mover></m:math>&#160;has a small normwise backward error.  In other words <m:math><m:mover><m:mi>x</m:mi><m:mo>^</m:mo></m:mover></m:math>&#160;minimizes <m:math><m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mfenced separators=""><m:mi>A</m:mi><m:mo>+</m:mo><m:mi>E</m:mi></m:mfenced><m:mover><m:mi>x</m:mi><m:mo>^</m:mo></m:mover><m:mo>-</m:mo><m:mfenced separators=""><m:mi>b</m:mi><m:mo>+</m:mo><m:mi>f</m:mi></m:mfenced></m:mfenced><m:mn>2</m:mn></m:msub></m:math>, where

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mrow><m:mi>max</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:mfrac>
   <m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>E</m:mi></m:mfenced><m:mn>2</m:mn></m:msub>
   <m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>A</m:mi></m:mfenced><m:mn>2</m:mn></m:msub>
  </m:mfrac><m:mo>,</m:mo><m:mfrac>
   <m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>f</m:mi></m:mfenced><m:mn>2</m:mn></m:msub>
   <m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>b</m:mi></m:mfenced><m:mn>2</m:mn></m:msub>
  </m:mfrac></m:mfenced></m:mrow>
 <m:mo>&#8804;</m:mo>
 <m:mi>p</m:mi><m:mfenced separators=""><m:mi>n</m:mi></m:mfenced><m:mi>&#949;</m:mi>
</m:math></td><td class="formula2"/></tr></table></div>

and <m:math><m:mi>p</m:mi><m:mfenced separators=""><m:mi>n</m:mi></m:mfenced></m:math>&#160;is a modestly growing function of <m:math><m:mi>n</m:mi></m:math>&#160;and <m:math><m:mi>&#949;</m:mi></m:math>&#160;is the <span class="bitalic">machine precision</span>.  Let <m:math><m:msub><m:mi>&#954;</m:mi><m:mn>2</m:mn></m:msub><m:mfenced separators=""><m:mi>A</m:mi></m:mfenced><m:mo>=</m:mo><m:msub><m:mi>&#963;</m:mi><m:mi mathvariant="normal">max</m:mi></m:msub><m:mfenced separators=""><m:mi>A</m:mi></m:mfenced><m:mo>/</m:mo><m:msub><m:mi>&#963;</m:mi><m:mi mathvariant="normal">min</m:mi></m:msub><m:mfenced separators=""><m:mi>A</m:mi></m:mfenced></m:math>, <m:math><m:mi>&#961;</m:mi><m:mo>=</m:mo><m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>A</m:mi><m:mi>x</m:mi><m:mo>-</m:mo><m:mi>b</m:mi></m:mfenced><m:mn>2</m:mn></m:msub></m:math>, and <m:math><m:mrow><m:mi>sin</m:mi><m:mfenced separators=""><m:mi>&#952;</m:mi></m:mfenced></m:mrow><m:mo>=</m:mo><m:mi>&#961;</m:mi><m:mo>/</m:mo><m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>b</m:mi></m:mfenced><m:mn>2</m:mn></m:msub></m:math>.  Then if <m:math><m:mi>p</m:mi><m:mfenced separators=""><m:mi>n</m:mi></m:mfenced><m:mi>&#949;</m:mi></m:math>&#160;is small enough, the error <m:math><m:mover><m:mi>x</m:mi><m:mo>^</m:mo></m:mover><m:mo>-</m:mo><m:mi>x</m:mi></m:math>&#160;is bounded by

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mfrac><m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>x</m:mi><m:mo>-</m:mo><m:mover><m:mi>x</m:mi><m:mo>^</m:mo></m:mover></m:mfenced><m:mn>2</m:mn></m:msub>
  <m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>x</m:mi></m:mfenced><m:mn>2</m:mn></m:msub>
 </m:mfrac><m:mo>&#8818;</m:mo><m:mi>p</m:mi><m:mfenced separators=""><m:mi>n</m:mi></m:mfenced><m:mi>&#949;</m:mi>
<m:mfenced open="{" close="}" separators=""><m:mfrac><m:mrow><m:mn>2</m:mn><m:msub><m:mi>&#954;</m:mi><m:mn>2</m:mn></m:msub><m:mfenced separators=""><m:mi>A</m:mi></m:mfenced></m:mrow>
  <m:mrow><m:mi>cos</m:mi><m:mfenced separators=""><m:mi>&#952;</m:mi></m:mfenced></m:mrow>
 </m:mfrac><m:mo>+</m:mo><m:mrow><m:mi>tan</m:mi><m:mfenced separators=""><m:mi>&#952;</m:mi></m:mfenced></m:mrow><m:msubsup><m:mi>&#954;</m:mi><m:mn>2</m:mn><m:mn>2</m:mn></m:msubsup><m:mfenced separators=""><m:mi>A</m:mi></m:mfenced></m:mfenced>
<m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

If <m:math><m:mi>A</m:mi></m:math>&#160;is rank-deficient, the problem can be <span class="italic">regularized</span> by treating all singular values less than a user-specified threshold as exactly zero.  See <a class="ref" href="#ref105">Golub and Van Loan (1996)</a> for error bounds in this case, as well as for the underdetermined case.</div><div class="paramtext">The solution of the overdetermined, full-rank problem may also be characterized as the solution of the linear system of equations

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mfenced><m:mtable>
  <m:mtr>
   <m:mtd><m:mi>I</m:mi></m:mtd>
   <m:mtd><m:mi>A</m:mi></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:msup><m:mi>A</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
  </m:mtr>
 </m:mtable></m:mfenced>
 <m:mfenced><m:mtable>
  <m:mtr>
   <m:mtd><m:mi>r</m:mi></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:mi>x</m:mi></m:mtd>
  </m:mtr>
 </m:mtable></m:mfenced><m:mo>=</m:mo> <m:mfenced><m:mtable>
  <m:mtr>
   <m:mtd><m:mi>b</m:mi></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:mn>0</m:mn></m:mtd>
  </m:mtr>
 </m:mtable></m:mfenced>
<m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

By solving this linear system (see <a class="chap" href="../F07/f07conts.xml">Chapter F07</a>) component-wise error bounds can also be obtained <a class="ref" href="#ref527">Arioli <span class="italic">et al.</span> (1989)</a>.</div><h4 class="standard"><a class="sec" name="background112" id="background112"/>2.14.2&#160;&#160;The singular value decomposition</h4>
<div class="paramtext">The usual error analysis of the SVD algorithm is as follows (see <a class="ref" href="#ref105">Golub and Van Loan (1996)</a>).</div><div class="paramtext">The computed SVD, <m:math><m:mover><m:mi>U</m:mi><m:mo>^</m:mo></m:mover><m:mover><m:mi>&#931;</m:mi><m:mo>^</m:mo></m:mover><m:msup><m:mover><m:mi>V</m:mi><m:mo>^</m:mo></m:mover><m:mi mathvariant="normal">T</m:mi></m:msup></m:math>, is nearly the exact SVD of <m:math><m:mi>A</m:mi><m:mo>+</m:mo><m:mi>E</m:mi></m:math>, i.e., <m:math><m:mi>A</m:mi><m:mo>+</m:mo><m:mi>E</m:mi><m:mo>=</m:mo><m:mfenced separators=""><m:mover><m:mi>U</m:mi><m:mo>^</m:mo></m:mover><m:mo>+</m:mo><m:mi>&#948;</m:mi><m:mover><m:mi>U</m:mi><m:mo>^</m:mo></m:mover></m:mfenced><m:mover><m:mi>&#931;</m:mi><m:mo>^</m:mo></m:mover><m:mfenced separators=""><m:mover><m:mi>V</m:mi><m:mo>^</m:mo></m:mover><m:mo>+</m:mo><m:mi>&#948;</m:mi><m:mover><m:mi>V</m:mi><m:mo>^</m:mo></m:mover></m:mfenced></m:math>&#160;is the true SVD, so that <m:math><m:mover><m:mi>U</m:mi><m:mo>^</m:mo></m:mover><m:mo>+</m:mo><m:mi>&#948;</m:mi><m:mover><m:mi>U</m:mi><m:mo>^</m:mo></m:mover></m:math>&#160;and <m:math><m:mover><m:mi>V</m:mi><m:mo>^</m:mo></m:mover><m:mo>+</m:mo><m:mi>&#948;</m:mi><m:mover><m:mi>V</m:mi><m:mo>^</m:mo></m:mover></m:math>&#160;are both orthogonal, where <m:math><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:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>A</m:mi></m:mfenced><m:mn>2</m:mn></m:msub><m:mo>&#8804;</m:mo><m:mi>p</m:mi><m:mfenced separators=""><m:mi>m</m:mi><m:mo>,</m:mo><m:mi>n</m:mi></m:mfenced><m:mi>&#949;</m:mi></m:math>, <m:math><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>&#948;</m:mi><m:mover><m:mi>U</m:mi><m:mo>^</m:mo></m:mover></m:mfenced><m:mo>&#8804;</m:mo><m:mi>p</m:mi><m:mfenced separators=""><m:mi>m</m:mi><m:mo>,</m:mo><m:mi>n</m:mi></m:mfenced><m:mi>&#949;</m:mi></m:math>, and <m:math><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>&#948;</m:mi><m:mover><m:mi>V</m:mi><m:mo>^</m:mo></m:mover></m:mfenced><m:mo>&#8804;</m:mo><m:mi>p</m:mi><m:mfenced separators=""><m:mi>m</m:mi><m:mo>,</m:mo><m:mi>n</m:mi></m:mfenced><m:mi>&#949;</m:mi></m:math>.  Here <m:math><m:mi>p</m:mi><m:mfenced separators=""><m:mi>m</m:mi><m:mo>,</m:mo><m:mi>n</m:mi></m:mfenced></m:math>&#160;is a modestly growing function of <m:math><m:mi>m</m:mi></m:math>&#160;and <m:math><m:mi>n</m:mi></m:math>&#160;and <m:math><m:mi>&#949;</m:mi></m:math>&#160;is the <span class="bitalic">machine precision</span>.  Each computed singular value <m:math><m:msub><m:mover><m:mi>&#963;</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi></m:msub></m:math>&#160;differs from the true <m:math><m:msub><m:mi>&#963;</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;by an amount satisfying the bound

<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>&#963;</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi></m:msub><m:mo>-</m:mo><m:msub><m:mi>&#963;</m:mi><m:mi>i</m:mi></m:msub></m:mfenced><m:mo>&#8804;</m:mo><m:mi>p</m:mi><m:mfenced separators=""><m:mi>m</m:mi><m:mo>,</m:mo><m:mi>n</m:mi></m:mfenced><m:mi>&#949;</m:mi><m:msub><m:mi>&#963;</m:mi><m:mn>1</m:mn></m:msub><m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

Thus large singular values (those near <m:math><m:msub><m:mi>&#963;</m:mi><m:mn>1</m:mn></m:msub></m:math>) are computed to high relative accuracy and small ones may not be.</div><div class="paramtext">The angular difference between the computed left singular vector <m:math><m:msub><m:mover><m:mi>u</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi></m:msub></m:math>&#160;and the true <m:math><m:msub><m:mi>u</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;satisfies the approximate bound

<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>u</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi></m:msub><m:mo>,</m:mo><m:msub><m:mi>u</m:mi><m:mi>i</m:mi></m:msub></m:mfenced><m:mo>&#8818;</m:mo><m:mfrac><m:mrow><m:mi>p</m:mi><m:mfenced separators=""><m:mi>m</m:mi><m:mo>,</m:mo><m:mi>n</m:mi></m:mfenced><m:mi>&#949;</m:mi><m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>A</m:mi></m:mfenced><m:mn>2</m:mn></m:msub></m:mrow><m:msub><m:mi mathvariant="normal">gap</m:mi><m:mi>i</m:mi></m:msub></m:mfrac>
</m:math></td><td class="formula2"/></tr></table></div>

where

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:msub>
  <m:mi mathvariant="normal">gap</m:mi>
  <m:mi>i</m:mi>
 </m:msub>
 <m:mo>=</m:mo>
 <m:munder>
  <m:mi mathvariant="normal">min</m:mi>
  <m:mrow><m:mi>j</m:mi><m:mo>&#8800;</m:mo><m:mi>i</m:mi></m:mrow>
 </m:munder><m:mspace width="0.25em"/>
 <m:mfenced open="|" close="|" separators=""><m:msub><m:mi>&#963;</m:mi><m:mi>i</m:mi></m:msub><m:mo>-</m:mo><m:msub><m:mi>&#963;</m:mi><m:mi>j</m:mi></m:msub></m:mfenced>
</m:math></td><td class="formula2"/></tr></table></div>

is the <span class="italic">absolute gap</span> between <m:math><m:msub><m:mi>&#963;</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;and the nearest other singular value.  Thus, if <m:math><m:msub><m:mi>&#963;</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;is close to other singular values, its corresponding singular vector <m:math><m:msub><m:mi>u</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;may be inaccurate.  The same bound applies to the computed right singular vector <m:math><m:msub><m:mover><m:mi>v</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi></m:msub></m:math>&#160;and the true vector <m:math><m:msub><m:mi>v</m:mi><m:mi>i</m:mi></m:msub></m:math>.  The gaps may be easily obtained from the computed singular values.</div><div class="paramtext">Let <m:math><m:mover><m:mi mathvariant="bold-italic">S</m:mi><m:mo>^</m:mo></m:mover></m:math>&#160;be the space spanned by a collection of computed left singular vectors <m:math><m:mfenced open="{" close="}" separators=""><m:msub><m:mover><m:mi>u</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi></m:msub><m:mo>,</m:mo><m:mi>i</m:mi><m:mo>&#8712;</m:mo><m:mi mathvariant="bold-italic">I</m:mi></m:mfenced></m:math>, where <m:math><m:mi mathvariant="bold-italic">I</m:mi></m:math>&#160;is a subset of the integers from <m:math><m:mn>1</m:mn></m:math>&#160;to <m:math><m:mi>n</m:mi></m:math>.  Let <m:math><m:mi mathvariant="bold-italic">S</m:mi></m:math>&#160;be the corresponding true space.  Then

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>&#952;</m:mi><m:mfenced separators=""><m:mover><m:mi mathvariant="bold-italic">S</m:mi><m:mo>^</m:mo></m:mover><m:mo>,</m:mo><m:mi mathvariant="bold-italic">S</m:mi></m:mfenced><m:mo>&#8818;</m:mo><m:mfrac><m:mrow><m:mi>p</m:mi><m:mfenced separators=""><m:mi>m</m:mi><m:mo>,</m:mo><m:mi>n</m:mi></m:mfenced><m:mi>&#949;</m:mi><m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>A</m:mi></m:mfenced><m:mn>2</m:mn></m:msub></m:mrow>
  <m:msub><m:mi mathvariant="normal">gap</m:mi><m:mi mathvariant="bold-italic">I</m:mi></m:msub>
 </m:mfrac><m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

where

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:msub><m:mi mathvariant="normal">gap</m:mi><m:mi mathvariant="bold-italic">I</m:mi></m:msub><m:mo>=</m:mo><m:mrow><m:mi>min</m:mi><m:mspace width="0.125em"/><m:mfenced open="{" close="}" separators=""><m:mfenced open="|" close="|" separators=""><m:msub><m:mi>&#963;</m:mi><m:mi>i</m:mi></m:msub><m:mo>-</m:mo><m:msub><m:mi>&#963;</m:mi><m:mi>j</m:mi></m:msub></m:mfenced> <m:mtext>&#8195; for &#8203;</m:mtext> <m:mi>i</m:mi><m:mo>&#8712;</m:mo><m:mi mathvariant="bold-italic">I</m:mi><m:mo>,</m:mo><m:mi>j</m:mi><m:mo>&#8713;</m:mo><m:mi mathvariant="bold-italic">I</m:mi></m:mfenced></m:mrow>
</m:math></td><td class="formula2"/></tr></table></div>

is the absolute gap between the singular values in <m:math><m:mi mathvariant="bold-italic">I</m:mi></m:math>&#160;and the nearest other singular value.  Thus, a cluster of close singular values which is far away from any other singular value may have a well determined space <m:math><m:mover><m:mi mathvariant="bold-italic">S</m:mi><m:mo>^</m:mo></m:mover></m:math>&#160;even if its individual singular vectors are ill-conditioned.  The same bound applies to a set of right singular vectors <m:math><m:mfenced open="{" close="}" separators=""><m:msub><m:mover><m:mi>v</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi></m:msub><m:mo>,</m:mo><m:mi>i</m:mi><m:mo>&#8712;</m:mo><m:mi mathvariant="bold-italic">I</m:mi></m:mfenced></m:math>.</div><div class="paramtext">In the special case of bidiagonal matrices, the singular values and singular vectors may be computed much more accurately (see <a class="ref" href="#ref454">Demmel and Kahan (1990)</a>).  A bidiagonal matrix <m:math><m:mi>B</m:mi></m:math>&#160;has nonzero entries only on the main diagonal and the diagonal immediately above it (or immediately below it).  Reduction of a dense matrix to bidiagonal form <m:math><m:mi>B</m:mi></m:math>&#160;can introduce additional errors, so the following bounds for the bidiagonal case do not apply to the dense case.</div><div class="paramtext">Using the routines in this chapter, each computed singular value of a bidiagonal matrix is accurate to nearly full relative accuracy, no matter how tiny it is, so that

<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>&#963;</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi></m:msub><m:mo>-</m:mo><m:msub><m:mi>&#963;</m:mi><m:mi>i</m:mi></m:msub></m:mfenced><m:mo>&#8804;</m:mo><m:mi>p</m:mi><m:mfenced separators=""><m:mi>m</m:mi><m:mo>,</m:mo><m:mi>n</m:mi></m:mfenced><m:mi>&#949;</m:mi><m:msub><m:mi>&#963;</m:mi><m:mi>i</m:mi></m:msub><m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

The computed left singular vector <m:math><m:msub><m:mover><m:mi>u</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi></m:msub></m:math>&#160;has an angular error at most about

<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>u</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi></m:msub><m:mo>,</m:mo><m:msub><m:mi>u</m:mi><m:mi>i</m:mi></m:msub></m:mfenced><m:mo>&#8818;</m:mo><m:mfrac><m:mrow><m:mi>p</m:mi><m:mfenced separators=""><m:mi>m</m:mi><m:mo>,</m:mo><m:mi>n</m:mi></m:mfenced><m:mi>&#949;</m:mi></m:mrow><m:msub><m:mi mathvariant="normal">relgap</m:mi><m:mi>i</m:mi></m:msub></m:mfrac>
</m:math></td><td class="formula2"/></tr></table></div>

where

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:msub><m:mi mathvariant="normal">relgap</m:mi><m:mi>i</m:mi></m:msub><m:mo>=</m:mo>
 <m:munder>
  <m:mi mathvariant="normal">min</m:mi>
  <m:mrow><m:mi>j</m:mi><m:mo>&#8800;</m:mo><m:mi>i</m:mi></m:mrow>
 </m:munder><m:mspace width="0.25em"/>
 <m:mfenced open="|" close="|" separators=""><m:msub><m:mi>&#963;</m:mi><m:mi>i</m:mi></m:msub><m:mo>-</m:mo><m:msub><m:mi>&#963;</m:mi><m:mi>j</m:mi></m:msub></m:mfenced>
 <m:mo>/</m:mo>
 <m:mfenced separators=""><m:msub><m:mi>&#963;</m:mi><m:mi>i</m:mi></m:msub><m:mo>+</m:mo><m:msub><m:mi>&#963;</m:mi><m:mi>j</m:mi></m:msub></m:mfenced>
</m:math></td><td class="formula2"/></tr></table></div>

is the <span class="italic">relative gap</span> between <m:math><m:msub><m:mi>&#963;</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;and the nearest other singular value.  The same bound applies to the right singular vector <m:math><m:msub><m:mover><m:mi>v</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi></m:msub></m:math>&#160;and <m:math><m:msub><m:mi>v</m:mi><m:mi>i</m:mi></m:msub></m:math>.  Since the relative gap may be much larger than the absolute gap, this error bound may be much smaller than the previous one.  The relative gaps may be easily obtained from the computed singular values.</div><h4 class="standard"><a class="sec" name="background113" id="background113"/>2.14.3&#160;&#160;The symmetric eigenproblem</h4>
<div class="paramtext">The usual error analysis of the symmetric eigenproblem is as follows (see <a class="ref" href="#ref111">Parlett (1998)</a>).</div><div class="paramtext">The computed eigendecomposition <m:math><m:mover><m:mi>Z</m:mi><m:mo>^</m:mo></m:mover><m:mover><m:mi>&#923;</m:mi><m:mo>^</m:mo></m:mover><m:msup><m:mover><m:mi>Z</m:mi><m:mo>^</m:mo></m:mover><m:mi mathvariant="normal">T</m:mi></m:msup></m:math>&#160;is nearly the exact eigendecomposition of <m:math><m:mi>A</m:mi><m:mo>+</m:mo><m:mi>E</m:mi></m:math>, i.e., <m:math><m:mi>A</m:mi><m:mo>+</m:mo><m:mi>E</m:mi><m:mo>=</m:mo><m:mfenced separators=""><m:mover><m:mi>Z</m:mi><m:mo>^</m:mo></m:mover><m:mo>+</m:mo><m:mi>&#948;</m:mi><m:mover><m:mi>Z</m:mi><m:mo>^</m:mo></m:mover></m:mfenced><m:mover><m:mi>&#923;</m:mi><m:mo>^</m:mo></m:mover><m:msup><m:mfenced separators=""><m:mover><m:mi>Z</m:mi><m:mo>^</m:mo></m:mover><m:mo>+</m:mo><m:mi>&#948;</m:mi><m:mover><m:mi>Z</m:mi><m:mo>^</m:mo></m:mover></m:mfenced><m:mi mathvariant="normal">T</m:mi></m:msup></m:math>&#160;is the true eigendecomposition so that <m:math><m:mover><m:mi>Z</m:mi><m:mo>^</m:mo></m:mover><m:mo>+</m:mo><m:mi>&#948;</m:mi><m:mover><m:mi>Z</m:mi><m:mo>^</m:mo></m:mover></m:math>&#160;is orthogonal, where <m:math><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:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>A</m:mi></m:mfenced><m:mn>2</m:mn></m:msub><m:mo>&#8804;</m:mo><m:mi>p</m:mi><m:mfenced separators=""><m:mi>n</m:mi></m:mfenced><m:mi>&#949;</m:mi></m:math>&#160;and <m:math><m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>&#948;</m:mi><m:mover><m:mi>Z</m:mi><m:mo>^</m:mo></m:mover></m:mfenced><m:mn>2</m:mn></m:msub><m:mo>&#8804;</m:mo><m:mi>p</m:mi><m:mfenced separators=""><m:mi>n</m:mi></m:mfenced><m:mi>&#949;</m:mi></m:math>&#160;and <m:math><m:mi>p</m:mi><m:mfenced separators=""><m:mi>n</m:mi></m:mfenced></m:math>&#160;is a modestly growing function of <m:math><m:mi>n</m:mi></m:math>&#160;and <m:math><m:mi>&#949;</m:mi></m:math>&#160;is the <span class="bitalic">machine precision</span>.  Each computed eigenvalue <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;differs from the true <m:math><m:msub><m:mi>&#955;</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;by an amount satisfying the bound

<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:mi>p</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>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>

Thus large eigenvalues (those near <m:math>
 <m:mstyle displaystyle="true"><m:munder>
  <m:mi mathvariant="normal">max</m:mi>
  <m:mi>i</m:mi>
 </m:munder></m:mstyle><m:mspace width="0.25em"/>
 <m:mfenced open="|" close="|" separators=""><m:msub><m:mi>&#955;</m:mi><m:mi>i</m:mi></m:msub></m:mfenced>
 <m:mo>=</m:mo>
 <m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>A</m:mi></m:mfenced><m:mn>2</m:mn></m:msub>
</m:math>) are computed to high relative accuracy and small ones may not be.</div><div class="paramtext">The angular difference between the computed unit eigenvector <m:math><m:msub><m:mover><m:mi>z</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi></m:msub></m:math>&#160;and the true <m:math><m:msub><m:mi>z</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;satisfies the approximate bound

<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>z</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi></m:msub><m:mo>,</m:mo><m:msub><m:mi>z</m:mi><m:mi>i</m:mi></m:msub></m:mfenced><m:mo>&#8818;</m:mo><m:mfrac><m:mrow><m:mi>p</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>A</m:mi></m:mfenced><m:mn>2</m:mn></m:msub></m:mrow><m:msub><m:mi mathvariant="normal">gap</m:mi><m:mi>i</m:mi></m:msub></m:mfrac>
</m:math></td><td class="formula2"/></tr></table></div>

if <m:math><m:mi>p</m:mi><m:mfenced separators=""><m:mi>n</m:mi></m:mfenced><m:mi>&#949;</m:mi></m:math>&#160;is small enough, where

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:msub><m:mi mathvariant="normal">gap</m:mi><m:mi>i</m:mi></m:msub><m:mo>=</m:mo>
 <m:munder>
  <m:mi mathvariant="normal">min</m:mi>
  <m:mrow><m:mi>j</m:mi><m:mo>&#8800;</m:mo><m:mi>i</m:mi></m:mrow>
 </m:munder><m:mspace width="0.25em"/>
 <m:mfenced open="|" close="|" separators=""><m:msub><m:mi>&#955;</m:mi><m:mi>i</m:mi></m:msub><m:mo>-</m:mo><m:msub><m:mi>&#955;</m:mi><m:mi>j</m:mi></m:msub></m:mfenced>
</m:math></td><td class="formula2"/></tr></table></div>

is the <span class="italic">absolute gap</span> between <m:math><m:msub><m:mi>&#955;</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;and the nearest other eigenvalue.  Thus, if <m:math><m:msub><m:mi>&#955;</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;is close to other eigenvalues, its corresponding eigenvector <m:math><m:msub><m:mi>z</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;may be inaccurate.  The gaps may be easily obtained from the computed eigenvalues.</div><div class="paramtext">Let <m:math><m:mover><m:mi mathvariant="bold-italic">S</m:mi><m:mo>^</m:mo></m:mover></m:math>&#160;be the invariant subspace spanned by a collection of eigenvectors <m:math><m:mfenced open="{" close="}" separators=""><m:msub><m:mover><m:mi>z</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi></m:msub><m:mo>,</m:mo><m:mi>i</m:mi><m:mo>&#8712;</m:mo><m:mi mathvariant="bold-italic">I</m:mi></m:mfenced></m:math>, where <m:math><m:mi mathvariant="bold-italic">I</m:mi></m:math>&#160;is a subset of the integers from <m:math><m:mn>1</m:mn></m:math>&#160;to <m:math><m:mi>n</m:mi></m:math>.  Let <m:math><m:mi mathvariant="bold-italic">S</m:mi></m:math>&#160;be the corresponding true subspace.  Then

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>&#952;</m:mi><m:mfenced separators=""><m:mover><m:mi mathvariant="bold-italic">S</m:mi><m:mo>^</m:mo></m:mover><m:mo>,</m:mo><m:mi mathvariant="bold-italic">S</m:mi></m:mfenced><m:mo>&#8818;</m:mo><m:mfrac><m:mrow><m:mi>p</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>A</m:mi></m:mfenced><m:mn>2</m:mn></m:msub></m:mrow>
  <m:msub><m:mi mathvariant="normal">gap</m:mi><m:mi mathvariant="bold-italic">I</m:mi></m:msub>
 </m:mfrac>
</m:math></td><td class="formula2"/></tr></table></div>

where

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:msub><m:mi mathvariant="normal">gap</m:mi><m:mi mathvariant="bold-italic">I</m:mi></m:msub><m:mo>=</m:mo><m:mrow><m:mi>min</m:mi><m:mspace width="0.125em"/><m:mfenced open="{" close="}" separators=""><m:mfenced open="|" close="|" separators=""><m:msub><m:mi>&#955;</m:mi><m:mi>i</m:mi></m:msub><m:mo>-</m:mo><m:msub><m:mi>&#955;</m:mi><m:mi>j</m:mi></m:msub></m:mfenced> <m:mtext>&#8195; for &#8203;</m:mtext> <m:mi>i</m:mi><m:mo>&#8712;</m:mo><m:mi mathvariant="bold-italic">I</m:mi><m:mo>,</m:mo><m:mi>j</m:mi><m:mo>&#8713;</m:mo><m:mi mathvariant="bold-italic">I</m:mi></m:mfenced></m:mrow>
</m:math></td><td class="formula2"/></tr></table></div>

is the absolute gap between the eigenvalues in <m:math><m:mi mathvariant="bold-italic">I</m:mi></m:math>&#160;and the nearest other eigenvalue.  Thus, a cluster of close eigenvalues which is far away from any other eigenvalue may have a well determined invariant subspace <m:math><m:mover><m:mi mathvariant="bold-italic">S</m:mi><m:mo>^</m:mo></m:mover></m:math>&#160;even if its individual eigenvectors are ill-conditioned.</div><div class="paramtext">In the special case of a real symmetric tridiagonal matrix <m:math><m:mi>T</m:mi></m:math>, routines in this chapter can compute the eigenvalues and eigenvectors much more accurately.  See <a class="ref" href="#ref562">Anderson <span class="italic">et al.</span> (1999)</a> for further details.</div><h4 class="standard"><a class="sec" name="background114" id="background114"/>2.14.4&#160;&#160;The generalized symmetric-definite eigenproblem</h4>
<div class="paramtext">The three types of problem to be considered are <m:math><m:mi>A</m:mi><m:mo>-</m:mo><m:mi>&#955;</m:mi><m:mi>B</m:mi></m:math>, <m:math><m:mi>A</m:mi><m:mi>B</m:mi><m:mo>-</m:mo><m:mi>&#955;</m:mi><m:mi>I</m:mi></m:math>&#160;and <m:math><m:mi>B</m:mi><m:mi>A</m:mi><m:mo>-</m:mo><m:mi>&#955;</m:mi><m:mi>I</m:mi></m:math>.  In each case <m:math><m:mi>A</m:mi></m:math>&#160;and <m:math><m:mi>B</m:mi></m:math>&#160;are real symmetric (or complex Hermitian) and <m:math><m:mi>B</m:mi></m:math>&#160;is positive definite.  We consider each case in turn, assuming that routines in this chapter are used to transform the generalized problem to the standard symmetric problem, followed by the solution of the symmetric problem.  In all cases

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:msub><m:mi mathvariant="normal">gap</m:mi><m:mi>i</m:mi></m:msub><m:mo>=</m:mo>
 <m:munder>
  <m:mi mathvariant="normal">min</m:mi>
  <m:mrow><m:mi>j</m:mi><m:mo>&#8800;</m:mo><m:mi>i</m:mi></m:mrow>
 </m:munder><m:mspace width="0.25em"/>
 <m:mfenced open="|" close="|" separators=""><m:msub><m:mi>&#955;</m:mi><m:mi>i</m:mi></m:msub><m:mo>-</m:mo><m:msub><m:mi>&#955;</m:mi><m:mi>j</m:mi></m:msub></m:mfenced>
</m:math></td><td class="formula2"/></tr></table></div>

is the <span class="italic">absolute gap</span> between <m:math><m:msub><m:mi>&#955;</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;and the nearest other eigenvalue.
<ol class="listnumber"><li class="listnumber"><m:math><m:mi>A</m:mi><m:mo>-</m:mo><m:mi>&#955;</m:mi><m:mi>B</m:mi></m:math>.  The computed eigenvalues <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;can differ from the true eigenvalues <m:math><m:msub><m:mi>&#955;</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;by an amount

<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>&#8818;</m:mo><m:mi>p</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>B</m:mi><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msup></m:mfenced><m:mn>2</m:mn></m:msub><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>

The angular difference between the computed eigenvector <m:math><m:msub><m:mover><m:mi>z</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi></m:msub></m:math>&#160;and the true eigenvector <m:math><m:msub><m:mi>z</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;is

<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>z</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi></m:msub><m:mo>,</m:mo><m:msub><m:mi>z</m:mi><m:mi>i</m:mi></m:msub></m:mfenced>
 <m:mo>&#8818;</m:mo>
 <m:mfrac>
  <m:mrow>
   <m:mi>p</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>B</m:mi><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msup></m:mfenced><m:mn>2</m:mn></m:msub>
   <m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>A</m:mi></m:mfenced><m:mn>2</m:mn></m:msub>
   <m:msup>
    <m:mfenced separators="">
      <m:msub><m:mi>&#954;</m:mi><m:mn>2</m:mn></m:msub><m:mfenced separators=""><m:mi>B</m:mi></m:mfenced>
     </m:mfenced>
    <m:mrow><m:mn>1</m:mn><m:mo>/</m:mo><m:mn>2</m:mn></m:mrow>
   </m:msup>
  </m:mrow>
  <m:msub><m:mi mathvariant="normal">gap</m:mi><m:mi>i</m:mi></m:msub>
 </m:mfrac>
 <m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>
</li><li class="listnumber"><m:math><m:mi>A</m:mi><m:mi>B</m:mi><m:mo>-</m:mo><m:mi>&#955;</m:mi><m:mi>I</m:mi></m:math>&#160;or <m:math><m:mi>B</m:mi><m:mi>A</m:mi><m:mo>-</m:mo><m:mi>&#955;</m:mi><m:mi>I</m:mi></m:math>.  The computed eigenvalues <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;can differ from the true eigenvalues <m:math><m:msub><m:mi>&#955;</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;by an amount

<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>&#8818;</m:mo><m:mi>p</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>B</m:mi></m:mfenced><m:mn>2</m:mn></m:msub><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>

The angular difference between the computed eigenvector <m:math><m:msub><m:mover><m:mi>z</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi></m:msub></m:math>&#160;and the true eigenvector <m:math><m:msub><m:mi>z</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;is

<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>z</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi></m:msub><m:mo>,</m:mo><m:msub><m:mi>z</m:mi><m:mi>i</m:mi></m:msub></m:mfenced>
 <m:mo>&#8818;</m:mo>
 <m:mfrac>
  <m:mrow><m:mi>p</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>B</m:mi></m:mfenced><m:mn>2</m:mn></m:msub>
  <m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>A</m:mi></m:mfenced><m:mn>2</m:mn></m:msub>
  <m:msup>
   <m:mfenced separators="">
     <m:msub><m:mi>&#954;</m:mi><m:mn>2</m:mn></m:msub><m:mfenced separators=""><m:mi>B</m:mi></m:mfenced>
    </m:mfenced>
   <m:mrow><m:mn>1</m:mn><m:mo>/</m:mo><m:mn>2</m:mn></m:mrow>
  </m:msup>
  </m:mrow>
  <m:msub><m:mi mathvariant="normal">gap</m:mi><m:mi>i</m:mi></m:msub>
 </m:mfrac>
 <m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>
</li></ol>
</div><div class="paramtext">These error bounds are large when <m:math><m:mi>B</m:mi></m:math>&#160;is ill-conditioned with respect to inversion (<m:math><m:msub><m:mi>&#954;</m:mi><m:mn>2</m:mn></m:msub><m:mfenced separators=""><m:mi>B</m:mi></m:mfenced></m:math>&#160;is large).  It is often the case that the eigenvalues and eigenvectors are much better conditioned than indicated here.  One way to get tighter bounds is effective when the diagonal entries of <m:math><m:mi>B</m:mi></m:math>&#160;differ widely in magnitude, as for example with a <span class="italic">graded matrix</span>.
<ol class="listnumber"><li class="listnumber"><m:math><m:mi>A</m:mi><m:mo>-</m:mo><m:mi>&#955;</m:mi><m:mi>B</m:mi></m:math>.  Let 
<m:math>
 <m:mi>D</m:mi> <m:mo>=</m:mo>
 <m:mrow><m:mi>diag</m:mi><m:mfenced separators="">
   <m:msubsup>
    <m:mi>b</m:mi><m:mn>11</m:mn><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn><m:mo>/</m:mo><m:mn>2</m:mn></m:mrow>
   </m:msubsup>
   <m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo>
   <m:msubsup>
    <m:mi>b</m:mi>
    <m:mrow><m:mi>n</m:mi><m:mi>n</m:mi></m:mrow>
    <m:mrow><m:mo>-</m:mo><m:mn>1</m:mn><m:mo>/</m:mo><m:mn>2</m:mn></m:mrow>
   </m:msubsup>
  </m:mfenced></m:mrow>
</m:math>&#160;be a diagonal matrix.  Then replace <m:math><m:mi>B</m:mi></m:math>&#160;by <m:math><m:mi>D</m:mi><m:mi>B</m:mi><m:mi>D</m:mi></m:math>&#160;and <m:math><m:mi>A</m:mi></m:math>&#160;by <m:math><m:mi>D</m:mi><m:mi>A</m:mi><m:mi>D</m:mi></m:math>&#160;in the above bounds.</li><li class="listnumber"><m:math><m:mi>A</m:mi><m:mi>B</m:mi><m:mo>-</m:mo><m:mi>&#955;</m:mi><m:mi>I</m:mi></m:math>&#160;or <m:math><m:mi>B</m:mi><m:mi>A</m:mi><m:mo>-</m:mo><m:mi>&#955;</m:mi><m:mi>I</m:mi></m:math>.  Let <m:math><m:mi>D</m:mi><m:mo>=</m:mo><m:mrow><m:mi>diag</m:mi><m:mfenced separators=""><m:msubsup><m:mi>b</m:mi><m:mn>11</m:mn><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn><m:mo>/</m:mo><m:mn>2</m:mn></m:mrow></m:msubsup><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:msubsup><m:mi>b</m:mi><m:mrow><m:mi>n</m:mi><m:mi>n</m:mi></m:mrow>
  <m:mrow><m:mo>-</m:mo><m:mn>1</m:mn><m:mo>/</m:mo><m:mn>2</m:mn></m:mrow></m:msubsup></m:mfenced></m:mrow></m:math>&#160;be a diagonal matrix.  Then replace <m:math><m:mi>B</m:mi></m:math>&#160;by <m:math><m:mi>D</m:mi><m:mi>B</m:mi><m:mi>D</m:mi></m:math>&#160;and <m:math><m:mi>A</m:mi></m:math>&#160;by <m:math><m:msup><m:mi>D</m:mi><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msup><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>&#160;in the above bounds.</li></ol>
</div><div class="paramtext">Further details can be found in <a class="ref" href="#ref562">Anderson <span class="italic">et al.</span> (1999)</a>.</div><h4 class="standard"><a class="sec" name="background115" id="background115"/>2.14.5&#160;&#160;The nonsymmetric eigenproblem</h4>
<div class="paramtext">The nonsymmetric eigenvalue problem is more complicated than the symmetric eigenvalue problem.  In this section, we just summarize the bounds.  Further details can be found in <a class="ref" href="#ref562">Anderson <span class="italic">et al.</span> (1999)</a>.</div><div class="paramtext">We let <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;be the <m:math><m:mi>i</m:mi></m:math>th computed eigenvalue and <m:math><m:msub><m:mi>&#955;</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;the <m:math><m:mi>i</m:mi></m:math>th true eigenvalue.  Let <m:math><m:msub><m:mover><m:mi>v</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi></m:msub></m:math>&#160;be the corresponding computed right eigenvector, and <m:math><m:msub><m:mi>v</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;the true right eigenvector (so <m:math><m:mi>A</m:mi><m:msub><m:mi>v</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>v</m:mi><m:mi>i</m:mi></m:msub></m:math>).  If <m:math><m:mi mathvariant="bold-italic">I</m:mi></m:math>&#160;is a subset of the integers from <m:math><m:mn>1</m:mn></m:math>&#160;to <m:math><m:mi>n</m:mi></m:math>, we let <m:math><m:msub><m:mi>&#955;</m:mi><m:mi mathvariant="bold-italic">I</m:mi></m:msub></m:math>&#160;denote the average of the selected eigenvalues:
<m:math><m:msub><m:mi>&#955;</m:mi><m:mi mathvariant="bold-italic">I</m:mi></m:msub><m:mo>=</m:mo><m:mfenced separators=""><m:mstyle displaystyle="true"><m:munder><m:mo>&#8721;</m:mo><m:mrow><m:mi>i</m:mi><m:mo>&#8712;</m:mo><m:mi mathvariant="bold-italic">I</m:mi></m:mrow></m:munder></m:mstyle><m:mspace width="0.25em"/>
<m:msub><m:mi>&#955;</m:mi><m:mi>i</m:mi></m:msub></m:mfenced><m:mo>/</m:mo>
<m:mfenced separators=""><m:mstyle displaystyle="true"><m:munder><m:mo>&#8721;</m:mo><m:mrow><m:mi>i</m:mi><m:mo>&#8712;</m:mo><m:mi mathvariant="bold-italic">I</m:mi></m:mrow></m:munder></m:mstyle><m:mspace width="0.25em"/><m:mn>1</m:mn></m:mfenced></m:math>, and similarly for <m:math><m:msub><m:mover><m:mi>&#955;</m:mi><m:mo>^</m:mo></m:mover><m:mi mathvariant="bold-italic">I</m:mi></m:msub></m:math>.  We also let <m:math><m:msub><m:mi mathvariant="bold-italic">S</m:mi><m:mi mathvariant="bold-italic">I</m:mi></m:msub></m:math>&#160;denote the subspace spanned by <m:math><m:mfenced open="{" close="}" separators=""><m:msub><m:mi>v</m:mi><m:mi>i</m:mi></m:msub><m:mo>,</m:mo><m:mi>i</m:mi><m:mo>&#8712;</m:mo><m:mi mathvariant="bold-italic">I</m:mi></m:mfenced></m:math>; it is called a right invariant subspace because if <m:math><m:mi>v</m:mi></m:math>&#160;is any vector in <m:math><m:msub><m:mi mathvariant="bold-italic">S</m:mi><m:mi mathvariant="bold-italic">I</m:mi></m:msub></m:math>&#160;then <m:math><m:mi>A</m:mi><m:mi>v</m:mi></m:math>&#160;is also in <m:math><m:msub><m:mi mathvariant="bold-italic">S</m:mi><m:mi mathvariant="bold-italic">I</m:mi></m:msub></m:math>.  <m:math><m:msub><m:mover><m:mi mathvariant="bold-italic">S</m:mi><m:mo>^</m:mo></m:mover><m:mi mathvariant="bold-italic">I</m:mi></m:msub></m:math>&#160;is the corresponding computed subspace.</div><div class="paramtext">The algorithms for the nonsymmetric eigenproblem are normwise backward stable: they compute the exact eigenvalues, eigenvectors and invariant subspaces of slightly perturbed matrices <m:math>
 <m:mfenced separators=""><m:mi>A</m:mi><m:mo>+</m:mo><m:mi>E</m:mi></m:mfenced>
 <m:mi>E</m:mi>
</m:math>, where <m:math>
 <m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>E</m:mi></m:mfenced>
 <m:mo>&#8804;</m:mo>
 <m:mi>p</m:mi>
 <m:mfenced separators=""><m:mi>n</m:mi></m:mfenced>
 <m:mi>&#949;</m:mi>
 <m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>A</m:mi></m:mfenced>
</m:math>.  Some of the bounds are stated in terms of <m:math><m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>E</m:mi></m:mfenced><m:mn>2</m:mn></m:msub></m:math>&#160;and others in terms of <m:math><m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>E</m:mi></m:mfenced><m:mi>F</m:mi></m:msub></m:math>; one may use <m:math><m:mi>p</m:mi><m:mfenced separators=""><m:mi>n</m:mi></m:mfenced><m:mi>&#949;</m:mi></m:math>&#160;for either quantity.</div><div class="paramtext">Routines are provided so that, for each (<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:mo>,</m:mo><m:msub><m:mover><m:mi>v</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi></m:msub></m:math>) pair the two values <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>, or for a selected subset <m:math><m:mi mathvariant="bold-italic">I</m:mi></m:math>&#160;of eigenvalues the values <m:math><m:msub><m:mi>s</m:mi><m:mi mathvariant="bold-italic">I</m:mi></m:msub></m:math>&#160;and <m:math><m:msub><m:mi mathvariant="italic">sep</m:mi><m:mi mathvariant="bold-italic">I</m:mi></m:msub></m:math>&#160;can be obtained, for which the error bounds in <a class="table" href="#table2">Table 2</a> are true for sufficiently small <m:math><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>E</m:mi></m:mfenced></m:math>, (which is why they are called asymptotic):
<div class="tablediv"><a name="table2" id="table2"/><table class="standard" border="3" align="center" cellpadding="2">
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" align="left">Simple eigenvalue</td>
    <td class="libdoc" valign="top" align="left"><m:math><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>&#8818;</m:mo><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:msub><m:mi>s</m:mi><m:mi>i</m:mi></m:msub></m:math></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">Eigenvalue cluster</td>
    <td class="libdoc" valign="top" align="left"><m:math><m:mfenced open="|" close="|" separators=""><m:msub><m:mover><m:mi>&#955;</m:mi><m:mo>^</m:mo></m:mover><m:mi mathvariant="bold-italic">I</m:mi></m:msub><m:mo>-</m:mo><m:msub><m:mi>&#955;</m:mi><m:mi mathvariant="bold-italic">I</m:mi></m:msub></m:mfenced><m:mo>&#8818;</m:mo><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:msub><m:mi>s</m:mi><m:mi mathvariant="bold-italic">I</m:mi></m:msub></m:math></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">Eigenvector</td>
    <td class="libdoc" valign="top" align="left"><m:math><m:mi>&#952;</m:mi><m:mfenced separators=""><m:msub><m:mover><m:mi>v</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi></m:msub><m:mo>,</m:mo><m:msub><m:mi>v</m:mi><m:mi>i</m:mi></m:msub></m:mfenced><m:mo>&#8818;</m:mo><m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>E</m:mi></m:mfenced><m:mi>F</m:mi></m:msub><m:mo>/</m:mo><m:msub><m:mi mathvariant="italic">sep</m:mi><m:mi>i</m:mi></m:msub></m:math></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">Invariant subspace</td>
    <td class="libdoc" valign="top" align="left"><m:math><m:mi>&#952;</m:mi><m:mfenced separators=""><m:msub><m:mover><m:mi>S</m:mi><m:mo>^</m:mo></m:mover><m:mi mathvariant="bold-italic">I</m:mi></m:msub><m:mo>,</m:mo><m:msub><m:mi>S</m:mi><m:mi mathvariant="bold-italic">I</m:mi></m:msub></m:mfenced><m:mo>&#8818;</m:mo><m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>E</m:mi></m:mfenced><m:mi>F</m:mi></m:msub><m:mo>/</m:mo><m:msub><m:mi mathvariant="italic">sep</m:mi><m:mi mathvariant="bold-italic">I</m:mi></m:msub></m:math></td>
   </tr>
  </tbody>
 </table><div class="caption"><b>Table 2</b><br/>Asymptotic error bounds for the nonsymmetric eigenproblem</div></div>
</div><div class="paramtext">If the problem is ill-conditioned, the asymptotic bounds may only hold for extremely small <m:math><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>E</m:mi></m:mfenced></m:math>.  The global error bounds of <a class="table" href="#table3">Table 3</a> are guaranteed to hold for all <m:math><m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>E</m:mi></m:mfenced><m:mi>F</m:mi></m:msub><m:mo>&lt;</m:mo><m:mi>s</m:mi><m:mo>&#215;</m:mo><m:mi mathvariant="italic">sep</m:mi><m:mo>/</m:mo><m:mn>4</m:mn></m:math>:</div><div class="paramtext">
<div class="tablediv"><a name="table3" id="table3"/><table class="standard" border="3" align="center" cellpadding="2">
  
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" align="left">Simple eigenvalue</td>
    <td class="libdoc" valign="top" align="left"><m:math><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:mi>n</m:mi><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:msub><m:mi>s</m:mi><m:mi>i</m:mi></m:msub></m:math></td>
    <td class="libdoc" valign="top" align="left">Holds for all <m:math><m:mi>E</m:mi></m:math></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">Eigenvalue cluster</td>
    <td class="libdoc" valign="top" align="left"><m:math><m:mfenced open="|" close="|" separators=""><m:msub><m:mover><m:mi>&#955;</m:mi><m:mo>^</m:mo></m:mover><m:mi mathvariant="bold-italic">I</m:mi></m:msub><m:mo>-</m:mo><m:msub><m:mi>&#955;</m:mi><m:mi mathvariant="bold-italic">I</m:mi></m:msub></m:mfenced><m:mo>&#8804;</m:mo><m:mn>2</m:mn><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:msub><m:mi>s</m:mi><m:mi mathvariant="bold-italic">I</m:mi></m:msub></m:math></td>
    <td class="libdoc" valign="top" align="left">Requires <m:math><m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>E</m:mi></m:mfenced><m:mi>F</m:mi></m:msub><m:mo>&lt;</m:mo><m:msub><m:mi>s</m:mi><m:mi mathvariant="bold-italic">I</m:mi></m:msub><m:mo>&#215;</m:mo><m:msub><m:mi mathvariant="italic">sep</m:mi><m:mi mathvariant="bold-italic">I</m:mi></m:msub><m:mo>/</m:mo><m:mn>4</m:mn></m:math></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">Eigenvector</td>
    <td class="libdoc" valign="top" align="left"><m:math><m:mi>&#952;</m:mi><m:mfenced separators=""><m:msub><m:mover><m:mi>v</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi></m:msub><m:mo>,</m:mo><m:msub><m:mi>v</m:mi><m:mi>i</m:mi></m:msub></m:mfenced><m:mo>&#8804;</m:mo><m:mrow><m:mi>arctan</m:mi><m:mfenced separators=""><m:mn>2</m:mn><m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>E</m:mi></m:mfenced><m:mi>F</m:mi></m:msub><m:mo>/</m:mo><m:mfenced separators=""><m:msub><m:mi mathvariant="italic">sep</m:mi><m:mi>i</m:mi></m:msub><m:mo>-</m:mo><m:mn>4</m:mn><m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>E</m:mi></m:mfenced><m:mi>F</m:mi></m:msub><m:mo>/</m:mo><m:msub><m:mi>s</m:mi><m:mi>i</m:mi></m:msub></m:mfenced></m:mfenced></m:mrow></m:math></td>
    <td class="libdoc" valign="top" align="left">Requires <m:math><m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>E</m:mi></m:mfenced><m:mi>F</m:mi></m:msub><m:mo>&lt;</m:mo><m:msub><m:mi>s</m:mi><m:mi>i</m:mi></m:msub><m:mo>&#215;</m:mo><m:msub><m:mi mathvariant="italic">sep</m:mi><m:mi>i</m:mi></m:msub><m:mo>/</m:mo><m:mn>4</m:mn></m:math></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">Invariant subspace</td>
    <td class="libdoc" valign="top" align="left"><m:math><m:mi>&#952;</m:mi><m:mfenced separators=""><m:msub><m:mover><m:mi>S</m:mi><m:mo>^</m:mo></m:mover><m:mi mathvariant="bold-italic">I</m:mi></m:msub><m:mo>,</m:mo><m:msub><m:mi>S</m:mi><m:mi mathvariant="bold-italic">I</m:mi></m:msub></m:mfenced><m:mo>&#8804;</m:mo><m:mrow><m:mi>arctan</m:mi><m:mfenced separators=""><m:mn>2</m:mn><m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>E</m:mi></m:mfenced><m:mi>F</m:mi></m:msub><m:mo>/</m:mo><m:mfenced separators=""><m:msub><m:mi mathvariant="italic">sep</m:mi><m:mi mathvariant="bold-italic">I</m:mi></m:msub><m:mo>-</m:mo><m:mn>4</m:mn><m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>E</m:mi></m:mfenced><m:mi>F</m:mi></m:msub><m:mo>/</m:mo><m:msub><m:mi>s</m:mi><m:mi mathvariant="bold-italic">I</m:mi></m:msub></m:mfenced></m:mfenced></m:mrow></m:math></td>
    <td class="libdoc" valign="top" align="left">Requires <m:math><m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>E</m:mi></m:mfenced><m:mi>F</m:mi></m:msub><m:mo>&lt;</m:mo><m:msub><m:mi>s</m:mi><m:mi mathvariant="bold-italic">I</m:mi></m:msub><m:mo>&#215;</m:mo><m:msub><m:mi mathvariant="italic">sep</m:mi><m:mi mathvariant="bold-italic">I</m:mi></m:msub><m:mo>/</m:mo><m:mn>4</m:mn></m:math></td>
   </tr>
  </tbody>
 </table><div class="caption"><b>Table 3</b><br/>Global error bounds for the nonsymmetric eigenproblem</div></div>
</div><h4 class="standard"><a class="sec" name="background116" id="background116"/>2.14.6&#160;&#160;Balancing and condition for the nonsymmetric eigenproblem</h4>
<div class="paramtext">There are two preprocessing steps one may perform on a matrix <m:math><m:mi>A</m:mi></m:math>&#160;in order to make its eigenproblem easier.  The first is <span class="italic">permutation</span>, or reordering the rows and columns to make <m:math><m:mi>A</m:mi></m:math>&#160;more nearly upper triangular (closer to Schur form): <m:math><m:msup><m:mi>A</m:mi><m:mo>&#8242;</m:mo></m:msup><m:mo>=</m:mo><m:mi>P</m:mi><m:mi>A</m:mi><m:msup><m:mi>P</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup></m:math>, where <m:math><m:mi>P</m:mi></m:math>&#160;is a permutation matrix.  If <m:math><m:msup><m:mi>A</m:mi><m:mo>&#8242;</m:mo></m:msup></m:math>&#160;is permutable to upper triangular form (or close to it), then no floating point operations (or very few) are needed to reduce it to Schur form.  The second is <span class="italic">scaling</span> by a diagonal matrix <m:math><m:mi>D</m:mi></m:math>&#160;to make the rows and columns of <m:math><m:msup><m:mi>A</m:mi><m:mo>&#8242;</m:mo></m:msup></m:math>&#160;more nearly equal in norm: <m:math><m:msup><m:mi>A</m:mi><m:mrow><m:mo>&#8242;</m:mo><m:mo>&#8242;</m:mo></m:mrow></m:msup><m:mo>=</m:mo><m:mi>D</m:mi><m:msup><m:mi>A</m:mi><m:mo>&#8242;</m:mo></m:msup><m:msup><m:mi>D</m:mi><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msup></m:math>.  Scaling can make the matrix norm smaller with respect to the eigenvalues, and so possibly reduce the inaccuracy contributed by roundoff (see Chapter 11 of <a class="ref" href="#ref103">Wilkinson and Reinsch (1971)</a>).  We refer to these two operations as <span class="italic">balancing</span>.</div><div class="paramtext">Permuting has no effect on the condition numbers or their interpretation as described previously.  Scaling, however, does change their interpretation and further details can be found in <a class="ref" href="#ref562">Anderson <span class="italic">et al.</span> (1999)</a>.</div><h4 class="standard"><a class="sec" name="background9b1" id="background9b1"/>2.14.7&#160;&#160;The generalized nonsymmetric eigenvalue problem</h4>
<div class="paramtext">The algorithms for the generalized nonsymmetric eigenvalue problem are normwise backward stable: they compute the exact eigenvalues (as the pairs <m:math><m:mfenced separators=""><m:mi>&#945;</m:mi><m:mo>,</m:mo><m:mi>&#946;</m:mi></m:mfenced></m:math>), eigenvectors and deflating subspaces of slightly perturbed pairs <m:math><m:mfenced separators=""><m:mrow><m:mi>A</m:mi><m:mo>+</m:mo><m:mi>E</m:mi></m:mrow><m:mo>,</m:mo><m:mrow><m:mi>B</m:mi><m:mo>+</m:mo><m:mi>F</m:mi></m:mrow></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:mfenced separators=""><m:mi>E</m:mi><m:mo>,</m:mo><m:mi>F</m:mi></m:mfenced></m:mfenced><m:mi>F</m:mi></m:msub><m:mo>&#8804;</m:mo><m:mi>p</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:mfenced separators=""><m:mi>A</m:mi><m:mo>,</m:mo><m:mi>B</m:mi></m:mfenced></m:mfenced><m:mi>F</m:mi></m:msub><m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div></div><div class="paramtext">Asymptotic and global error bounds can be obtained, which are generalizations of those given in <a class="table" href="#table2">Tables 2</a> and <a class="table" href="#table3">3</a>.  See Section 4.11 of <a class="ref" href="#ref562">Anderson <span class="italic">et al.</span> (1999)</a> for details.  Routines are provided to compute estimates of reciprocal conditions numbers for eigenvalues and eigenspaces.</div><h4 class="standard"><a class="sec" name="background9b2" id="background9b2"/>2.14.8&#160;&#160;Balancing the generalized eigenvalue problem</h4>
<div class="paramtext">As with the standard nonsymmetric eigenvalue problem, there are two preprocessing steps one may perform on a matrix pair <m:math><m:mfenced separators=""><m:mi>A</m:mi><m:mo>,</m:mo><m:mi>B</m:mi></m:mfenced></m:math>&#160;in order to make its eigenproblem easier; permutation and scaling, which together are referred to as balancing, as indicated in the following two steps.
<ol class="listnumber"><li class="listnumber">The balancing routine first attempts to permute <m:math><m:mi>A</m:mi></m:math>&#160;and <m:math><m:mi>B</m:mi></m:math>&#160;to block upper triangular form by a similarity transformation:

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mtable>
 <m:mtr>
  <m:mtd><m:mi>P</m:mi><m:mi>A</m:mi><m:msup><m:mi>P</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mo>=</m:mo><m:mi>F</m:mi><m:mo>=</m:mo> <m:mfenced><m:mtable>
   <m:mtr>
     <m:mtd><m:msub><m:mi>F</m:mi><m:mn>11</m:mn></m:msub></m:mtd>
     <m:mtd><m:msub><m:mi>F</m:mi><m:mn>12</m:mn></m:msub></m:mtd>
     <m:mtd><m:msub><m:mi>F</m:mi><m:mn>13</m:mn></m:msub></m:mtd>
   </m:mtr><m:mtr>
     <m:mtd/>
     <m:mtd><m:msub><m:mi>F</m:mi><m:mn>22</m:mn></m:msub></m:mtd>
     <m:mtd><m:msub><m:mi>F</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>F</m:mi><m:mn>33</m:mn></m:msub></m:mtd>
   </m:mtr>
 </m:mtable></m:mfenced><m:mtext>,</m:mtext>
  </m:mtd>
 </m:mtr><m:mtr>
  <m:mtd/>
 </m:mtr><m:mtr>
  <m:mtd/>
 </m:mtr><m:mtr>
  <m:mtd><m:mi>P</m:mi><m:mi>B</m:mi><m:msup><m:mi>P</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mo>=</m:mo><m:mi>G</m:mi><m:mo>=</m:mo> <m:mfenced><m:mtable>
   <m:mtr>
     <m:mtd><m:msub><m:mi>G</m:mi><m:mn>11</m:mn></m:msub></m:mtd>
     <m:mtd><m:msub><m:mi>G</m:mi><m:mn>12</m:mn></m:msub></m:mtd>
     <m:mtd><m:msub><m:mi>G</m:mi><m:mn>13</m:mn></m:msub></m:mtd>
   </m:mtr><m:mtr>
     <m:mtd/>
     <m:mtd><m:msub><m:mi>G</m:mi><m:mn>22</m:mn></m:msub></m:mtd>
     <m:mtd><m:msub><m:mi>G</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>G</m:mi><m:mn>33</m:mn></m:msub></m:mtd>
   </m:mtr>
 </m:mtable></m:mfenced><m:mtext>,</m:mtext>
  </m:mtd>
 </m:mtr>
</m:mtable>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:mi>P</m:mi></m:math>&#160;is a permutation matrix, <m:math><m:msub><m:mi>F</m:mi><m:mn>11</m:mn></m:msub></m:math>, <m:math><m:msub><m:mi>F</m:mi><m:mn>33</m:mn></m:msub></m:math>, <m:math><m:msub><m:mi>G</m:mi><m:mn>11</m:mn></m:msub></m:math>&#160;and <m:math><m:msub><m:mi>G</m:mi><m:mn>33</m:mn></m:msub></m:math>&#160;are upper triangular.  Then the diagonal elements of the matrix <m:math><m:mfenced separators=""><m:msub><m:mi>F</m:mi><m:mn>11</m:mn></m:msub><m:mo>,</m:mo><m:msub><m:mi>G</m:mi><m:mn>11</m:mn></m:msub></m:mfenced></m:math>&#160;and <m:math><m:mfenced separators=""><m:msub><m:mi>G</m:mi><m:mn>33</m:mn></m:msub><m:mo>,</m:mo><m:msub><m:mi>H</m:mi><m:mn>33</m:mn></m:msub></m:mfenced></m:math>&#160;are generalized eigenvalues of <m:math><m:mfenced separators=""><m:mi>A</m:mi><m:mo>,</m:mo><m:mi>B</m:mi></m:mfenced></m:math>.  The rest of the generalized eigenvalues are given by the matrix pair <m:math><m:mfenced separators=""><m:msub><m:mi>F</m:mi><m:mn>22</m:mn></m:msub><m:mo>,</m:mo><m:msub><m:mi>G</m:mi><m:mn>22</m:mn></m:msub></m:mfenced></m:math>.  Subsequent operations to compute the eigenvalues of <m:math><m:mfenced separators=""><m:mi>A</m:mi><m:mo>,</m:mo><m:mi>B</m:mi></m:mfenced></m:math>&#160;need only be applied to the matrix <m:math><m:mfenced separators=""><m:msub><m:mi>F</m:mi><m:mn>22</m:mn></m:msub><m:mo>,</m:mo><m:msub><m:mi>G</m:mi><m:mn>22</m:mn></m:msub></m:mfenced></m:math>; this can save a significant amount of work if <m:math><m:mfenced separators=""><m:msub><m:mi>F</m:mi><m:mn>22</m:mn></m:msub><m:mo>,</m:mo><m:msub><m:mi>G</m:mi><m:mn>22</m:mn></m:msub></m:mfenced></m:math>&#160;is smaller than the original matrix pair <m:math><m:mfenced separators=""><m:mi>A</m:mi><m:mo>,</m:mo><m:mi>B</m:mi></m:mfenced></m:math>.  If no suitable permutation exists (as is often the case), then there is no gain in efficiency or accuracy.</li><li class="listnumber">The balancing routine applies a diagonal similarity transformation to <m:math><m:mfenced separators=""><m:mi>F</m:mi><m:mo>,</m:mo><m:mi>G</m:mi></m:mfenced></m:math>, to make the rows and columns of <m:math><m:mfenced separators=""><m:msub><m:mi>F</m:mi><m:mn>22</m:mn></m:msub><m:mo>,</m:mo><m:msub><m:mi>G</m:mi><m:mn>22</m:mn></m:msub></m:mfenced></m:math>&#160;as close as possible in the norm:

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mtable>
 <m:mtr>
  <m:mtd><m:mi>D</m:mi><m:mi>F</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:mo>=</m:mo> <m:mfenced><m:mtable>
   <m:mtr>
     <m:mtd><m:mi>I</m:mi></m:mtd>
     <m:mtd/>
     <m:mtd/>
   </m:mtr><m:mtr>
     <m:mtd/>
     <m:mtd><m:msub><m:mi>D</m:mi><m:mn>22</m:mn></m:msub></m:mtd>
     <m:mtd/>
   </m:mtr><m:mtr>
     <m:mtd/>
     <m:mtd/>
     <m:mtd><m:mi>I</m:mi></m:mtd>
   </m:mtr>
 </m:mtable></m:mfenced>
 <m:mfenced><m:mtable>
   <m:mtr>
     <m:mtd><m:msub><m:mi>F</m:mi><m:mn>11</m:mn></m:msub></m:mtd>
     <m:mtd><m:msub><m:mi>F</m:mi><m:mn>12</m:mn></m:msub></m:mtd>
     <m:mtd><m:msub><m:mi>F</m:mi><m:mn>13</m:mn></m:msub></m:mtd>
   </m:mtr><m:mtr>
     <m:mtd/>
     <m:mtd><m:msub><m:mi>F</m:mi><m:mn>22</m:mn></m:msub></m:mtd>
     <m:mtd><m:msub><m:mi>F</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>F</m:mi><m:mn>33</m:mn></m:msub></m:mtd>
   </m:mtr>
 </m:mtable></m:mfenced>
 <m:mfenced><m:mtable>
   <m:mtr>
     <m:mtd><m:mi>I</m:mi></m:mtd>
     <m:mtd/>
     <m:mtd/>
   </m:mtr><m:mtr>
     <m:mtd/>
     <m:mtd><m:msubsup><m:mi>D</m:mi><m:mn>22</m:mn><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msubsup></m:mtd>
     <m:mtd/>
   </m:mtr><m:mtr>
     <m:mtd/>
     <m:mtd/>
     <m:mtd><m:mi>I</m:mi></m:mtd>
   </m:mtr>
 </m:mtable></m:mfenced><m:mtext>,</m:mtext>
</m:mtd>
 </m:mtr><m:mtr>
  <m:mtd/>
 </m:mtr><m:mtr>
  <m:mtd/>
 </m:mtr><m:mtr>
  <m:mtd><m:mi>D</m:mi><m:mi>G</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:mo>=</m:mo> <m:mfenced><m:mtable>
   <m:mtr>
     <m:mtd><m:mi>I</m:mi></m:mtd>
     <m:mtd/>
     <m:mtd/>
   </m:mtr><m:mtr>
     <m:mtd/>
     <m:mtd><m:msub><m:mi>D</m:mi><m:mn>22</m:mn></m:msub></m:mtd>
     <m:mtd/>
   </m:mtr><m:mtr>
     <m:mtd/>
     <m:mtd/>
     <m:mtd><m:mi>I</m:mi></m:mtd>
   </m:mtr>
 </m:mtable></m:mfenced>
 <m:mfenced><m:mtable>
   <m:mtr>
     <m:mtd><m:msub><m:mi>G</m:mi><m:mn>11</m:mn></m:msub></m:mtd>
     <m:mtd><m:msub><m:mi>G</m:mi><m:mn>12</m:mn></m:msub></m:mtd>
     <m:mtd><m:msub><m:mi>G</m:mi><m:mn>13</m:mn></m:msub></m:mtd>
   </m:mtr><m:mtr>
     <m:mtd/>
     <m:mtd><m:msub><m:mi>G</m:mi><m:mn>22</m:mn></m:msub></m:mtd>
     <m:mtd><m:msub><m:mi>G</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>G</m:mi><m:mn>33</m:mn></m:msub></m:mtd>
   </m:mtr>
 </m:mtable></m:mfenced>
 <m:mfenced><m:mtable>
   <m:mtr>
     <m:mtd><m:mi>I</m:mi></m:mtd>
     <m:mtd/>
     <m:mtd/>
   </m:mtr><m:mtr>
     <m:mtd/>
     <m:mtd><m:msubsup><m:mi>D</m:mi><m:mn>22</m:mn><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msubsup></m:mtd>
     <m:mtd/>
   </m:mtr><m:mtr>
     <m:mtd/>
     <m:mtd/>
     <m:mtd><m:mi>I</m:mi></m:mtd>
   </m:mtr>
 </m:mtable></m:mfenced>
<m:mtext>.</m:mtext></m:mtd>
 </m:mtr>
</m:mtable>
</m:math></td><td class="formula2"/></tr></table></div>

This transformation usually improves the accuracy of computed generalized eigenvalues and eigenvectors.  However, there are exceptional occasions when this transformation increases the norm of the pencil; in this case accuracy could be lower with diagonal balancing.
 <div class="paramtext">See <a class="ref" href="#ref562">Anderson <span class="italic">et al.</span> (1999)</a> for further details.</div></li></ol>
</div><h4 class="standard"><a class="sec" name="background9b3" id="background9b3"/>2.14.9&#160;&#160;Other problems</h4>
<div class="paramtext">Error bounds for other problems such as the generalized linear least squares problem and generalized singular value decomposition can be found in <a class="ref" href="#ref562">Anderson <span class="italic">et al.</span> (1999)</a>.</div><h3 class="standard"><a class="sec" name="background12" id="background12"/>2.15&#160;&#160;Block Partitioned Algorithms</h3>
<div class="paramtext">A number of the routines in this chapter use what is termed a <span class="italic">block partitioned algorithm</span>.  This means that at each major step of the algorithm a <span class="italic">block</span> of rows or columns is updated, and much of the computation is performed by matrix-matrix operations on these blocks.  The matrix-matrix operations are performed by calls to the Level 3 BLAS
 (see <a class="chap" href="../F06/f06conts.xml">Chapter F06</a>),

which are the key to achieving high performance on many modern computers.  In the case of the <m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;algorithm for reducing an upper Hessenberg matrix to Schur form, a multishift strategy is used in order to improve performance.  See <a class="ref" href="#ref105">Golub and Van Loan (1996)</a> or <a class="ref" href="#ref562">Anderson <span class="italic">et al.</span> (1999)</a> for more about block partitioned algorithms and the multishift strategy.</div><div class="paramtext">The performance of a block partitioned algorithm varies to some extent with the <span class="bitalic">block size</span> &#8211; that is, the number of rows or columns per block.  This is a machine-dependent parameter, which is set to a suitable value when the library is implemented on each range of machines.  You do not normally need to be aware of what value is being used.  Different block sizes may be used for different routines.  Values in the range <m:math><m:mn>16</m:mn></m:math>&#160;to <m:math><m:mn>64</m:mn></m:math>&#160;are typical.</div><div class="paramtext">On more conventional machines there is often no advantage from using a block partitioned algorithm, and then the routines use an <span class="italic">unblocked</span> algorithm (effectively a block size of <m:math><m:mn>1</m:mn></m:math>), relying solely on calls to the Level 2 BLAS
 (see <a class="chap" href="../F06/f06conts.xml">Chapter F06</a> again).

</div><div class="paramtext">The only situation in which you need some awareness of the block size is when it affects the amount of workspace to be supplied to a particular routine.  This is discussed in <a class="sec" href="#recomm_43">Section 3.4.3</a>.</div><h2 class="standard"><a class="sec" name="available" id="available"/>3&#160;&#160;Recommendations on Choice and Use of Available Routines</h2><h3 class="standard"><a class="sec" name="recomm_1" id="recomm_1"/>3.1&#160;&#160;Available Routines</h3>
<div class="paramtext">The tables in the following sub-sections show the routines which are provided for performing different computations on different types of matrices.  Each entry in the table gives the NAG routine

name
 and the LAPACK double precision name

(see <a class="sec" href="#recomm_2">Section 3.2</a>).</div><div class="paramtext">Black box (or driver) routines are provided for the solution of most problems.  In a number of cases there are <span class="italic">simple drivers</span>, which just return the solution to the problem, as well as <span class="italic">expert drivers</span>, which return additional information, such as condition number estimates, and may offer additional facilities such as balancing.  The following sub-sections give tables for the driver routines.</div><h4 class="standard"><a class="sec" name="recomm_11a" id="recomm_11a"/>3.1.1&#160;&#160;Driver routines</h4><h5 class="standard"><a class="sec" name="recomm_111a" id="recomm_111a"/>3.1.1.1&#160;&#160;Linear least squares problems (LLS)</h5>
<div class="paramtext">
<div class="tablediv"><table class="standard" border="3" align="center" cellpadding="2"><tbody>
<tr>
<td class="libdoc" valign="top" align="center" style="width:24em;"><b>Operation</b></td>
<td class="libdoc" valign="top" align="center"><b>real</b></td>
<td class="libdoc" valign="top" align="center"><b>complex</b></td>
</tr><tr>
<td class="libdoc" valign="top" align="left" style="width:24em;">
 solve LLS using <m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;or <m:math><m:mi>L</m:mi><m:mi>Q</m:mi></m:math>&#160;factorization<br/>
 solve LLS using complete orthogonal factorization<br/>
 solve LLS using SVD<br/>
 solve LLS using divide-and-conquer SVD
</td>
<td class="libdoc" valign="top" align="left">
 <a class="rout" href="../F08/f08aaf.xml">F08AAF (DGELS)</a><br/>
 <a class="rout" href="../F08/f08baf.xml">F08BAF (DGELSY)</a><br/>
 <a class="rout" href="../F08/f08kaf.xml">F08KAF (DGELSS)</a><br/>
 <a class="rout" href="../F08/f08kcf.xml">F08KCF (DGELSD)</a>
</td>
<td class="libdoc" valign="top" align="left">
 <a class="rout" href="../F08/f08anf.xml">F08ANF (ZGELS)</a><br/>
 <a class="rout" href="../F08/f08bnf.xml">F08BNF (ZGELSY)</a><br/>
 <a class="rout" href="../F08/f08knf.xml">F08KNF (ZGELSS)</a><br/>
 <a class="rout" href="../F08/f08kqf.xml">F08KQF (ZGELSD)</a>
</td>
</tr>
</tbody>
</table></div>
</div><h5 class="standard"><a class="sec" name="recomm_112a" id="recomm_112a"/>3.1.1.2&#160;&#160;Generalized linear least squares problems (LSE and GLM)</h5>
<div class="paramtext">
<div class="tablediv"><table class="standard" border="3" align="center" cellpadding="2"><tbody>
<tr>
<td class="libdoc" valign="top" align="center" style="width:24em;"><b>Operation</b></td>
<td class="libdoc" valign="top" align="center"><b>real</b></td>
<td class="libdoc" valign="top" align="center"><b>complex</b></td>
</tr><tr>
<td class="libdoc" valign="top" align="left" style="width:24em;">
 solve LSE problem using GRQ<br/>
 solve GLM problem using GQR
</td>
<td class="libdoc" valign="top" align="left">
 <a class="rout" href="../F08/f08zaf.xml">F08ZAF (DGGLSE)</a><br/>
 <a class="rout" href="../F08/f08zbf.xml">F08ZBF (DGGGLM)</a>
</td>
<td class="libdoc" valign="top" align="left">
 <a class="rout" href="../F08/f08znf.xml">F08ZNF (ZGGLSE)</a><br/>
 <a class="rout" href="../F08/f08zpf.xml">F08ZPF (ZGGGLM)</a>
</td>
</tr>
</tbody>
</table></div>
</div><h5 class="standard"><a class="sec" name="recomm_113a" id="recomm_113a"/>3.1.1.3&#160;&#160;Symmetric eigenvalue problems (SEP)</h5>
<div class="paramtext">
<div class="tablediv"><table class="standard" border="3" align="center" cellpadding="2"><tbody>
<tr>
<td class="libdoc" valign="top" align="center" style="width:24em;"><b>Function and storage scheme</b></td>
<td class="libdoc" valign="top" align="center"><b>real</b></td>
<td class="libdoc" valign="top" align="center"><b>complex</b></td>
</tr><tr>
<td class="libdoc" valign="top" align="left" style="width:24em;">
 simple driver<br/>
 divide-and-conquer driver<br/>
 expert driver<br/>
 RRR driver
</td>
<td class="libdoc" valign="top" align="left">
 <a class="rout" href="../F08/f08faf.xml">F08FAF (DSYEV)</a><br/>
 <a class="rout" href="../F08/f08fcf.xml">F08FCF (DSYEVD)</a><br/>
 <a class="rout" href="../F08/f08fbf.xml">F08FBF (DSYEVX)</a><br/>
 <a class="rout" href="../F08/f08fdf.xml">F08FDF (DSYEVR)</a>
</td>
<td class="libdoc" valign="top" align="left">
 <a class="rout" href="../F08/f08fnf.xml">F08FNF (ZHEEV)</a><br/>
 <a class="rout" href="../F08/f08fqf.xml">F08FQF (ZHEEVD)</a><br/>
 <a class="rout" href="../F08/f08fpf.xml">F08FPF (ZHEEVX)</a><br/>
 <a class="rout" href="../F08/f08frf.xml">F08FRF (ZHEEVR)</a>
</td>
</tr><tr>
<td class="libdoc" valign="top" align="left" style="width:24em;">
 <b>packed storage</b> <br/>
 simple driver<br/>
 divide-and-conquer driver<br/>
 expert driver
</td>
<td class="libdoc" valign="top" align="left">
 <br/>
 <a class="rout" href="../F08/f08gaf.xml">F08GAF (DSPEV)</a><br/>
 <a class="rout" href="../F08/f08gcf.xml">F08GCF (DSPEVD)</a><br/>
 <a class="rout" href="../F08/f08gbf.xml">F08GBF (DSPEVX)</a>
</td>
<td class="libdoc" valign="top" align="left">
 <br/>
 <a class="rout" href="../F08/f08gnf.xml">F08GNF (ZHPEV)</a><br/>
 <a class="rout" href="../F08/f08gqf.xml">F08GQF (ZHPEVD)</a><br/>
 <a class="rout" href="../F08/f08gpf.xml">F08GPF (ZHPEVX)</a>
</td>
</tr><tr>
<td class="libdoc" valign="top" align="left" style="width:24em;">
 <b>band matrix</b> <br/>
 simple driver<br/>
 divide-and-conquer driver<br/>
 expert driver
</td>
<td class="libdoc" valign="top" align="left">
 <br/>
 <a class="rout" href="../F08/f08haf.xml">F08HAF (DSBEV)</a><br/>
 <a class="rout" href="../F08/f08hcf.xml">F08HCF (DSBEVD)</a><br/>
 <a class="rout" href="../F08/f08hbf.xml">F08HBF (DSBEVX)</a>
</td>
<td class="libdoc" valign="top" align="left">
 <br/>
 <a class="rout" href="../F08/f08hnf.xml">F08HNF (ZHBEV)</a><br/>
 <a class="rout" href="../F08/f08hqf.xml">F08HQF (ZHBEVD)</a><br/>
 <a class="rout" href="../F08/f08hpf.xml">F08HPF (ZHBEVX)</a>
</td>
</tr><tr>
<td class="libdoc" valign="top" align="left" style="width:24em;">
 <b>tridiagonal matrix</b> <br/>
 simple driver<br/>
 divide-and-conquer driver<br/>
 expert driver<br/>
 RRR driver
</td>
<td class="libdoc" valign="top" align="left">
 <br/>
 <a class="rout" href="../F08/f08jaf.xml">F08JAF (DSTEV)</a><br/>
 <a class="rout" href="../F08/f08jcf.xml">F08JCF (DSTEVD)</a><br/>
 <a class="rout" href="../F08/f08jbf.xml">F08JBF (DSTEVX)</a><br/>
 <a class="rout" href="../F08/f08jdf.xml">F08JDF (DSTEVR)</a>
</td>
<td class="libdoc" valign="top" align="left">&#160;</td>
</tr>
</tbody>
</table></div>
</div><h5 class="standard"><a class="sec" name="recomm_114a" id="recomm_114a"/>3.1.1.4&#160;&#160;Nonsymmetric eigenvalue problem (NEP)</h5>
<div class="paramtext">
<div class="tablediv"><table class="standard" border="3" align="center" cellpadding="2"><tbody>
<tr>
<td class="libdoc" valign="top" align="center" style="width:24em;"><b>Function and storage scheme</b></td>
<td class="libdoc" valign="top" align="center"><b>real</b></td>
<td class="libdoc" valign="top" align="center"><b>complex</b></td>
</tr><tr>
<td class="libdoc" valign="top" align="left" style="width:24em;">
 simple driver for Schur factorization<br/>
 expert driver for Schur factorization<br/>
 simple driver for eigenvalues/vectors<br/>
 expert driver for eigenvalues/vectors
</td>
<td class="libdoc" valign="top" align="left">
 <a class="rout" href="../F08/f08paf.xml">F08PAF (DGEES)</a><br/>
 <a class="rout" href="../F08/f08pbf.xml">F08PBF (DGEESX)</a><br/>
 <a class="rout" href="../F08/f08naf.xml">F08NAF (DGEEV)</a><br/>
 <a class="rout" href="../F08/f08nbf.xml">F08NBF (DGEEVX)</a>
</td>
<td class="libdoc" valign="top" align="left">
 <a class="rout" href="../F08/f08pnf.xml">F08PNF (ZGEES)</a><br/>
 <a class="rout" href="../F08/f08ppf.xml">F08PPF (ZGEESX)</a><br/>
 <a class="rout" href="../F08/f08nnf.xml">F08NNF (ZGEEV)</a><br/>
 <a class="rout" href="../F08/f08npf.xml">F08NPF (ZGEEVX)</a>
</td>
</tr>
</tbody>
</table></div>
</div><h5 class="standard"><a class="sec" name="recomm_115a" id="recomm_115a"/>3.1.1.5&#160;&#160;Singular value decomposition (SVD)</h5>
<div class="paramtext">
<div class="tablediv"><table class="standard" border="3" align="center" cellpadding="2"><tbody>
<tr>
<td class="libdoc" valign="top" align="center" style="width:24em;"><b>Function and storage scheme</b></td>
<td class="libdoc" valign="top" align="center"><b>real</b></td>
<td class="libdoc" valign="top" align="center"><b>complex</b></td>
</tr><tr>
<td class="libdoc" valign="top" align="left" style="width:24em;">
simple driver<br/>
divide-and-conquer driver<br/>
simple driver for one-sided Jacobi SVD<br/>
expert driver for one-sided Jacobi SVD
</td>
<td class="libdoc" valign="top" align="left">
<a class="rout" href="../F08/f08kbf.xml">F08KBF (DGESVD)</a><br/>
<a class="rout" href="../F08/f08kdf.xml">F08KDF (DGESDD)</a><br/>
<a class="rout" href="../F08/f08kjf.xml">F08KJF (DGESVJ)</a><br/>
<a class="rout" href="../F08/f08khf.xml">F08KHF (DGEJSV)</a></td>
<td class="libdoc" valign="top" align="left">
<a class="rout" href="../F08/f08kpf.xml">F08KPF (ZGESVD)</a><br/>
<a class="rout" href="../F08/f08krf.xml">F08KRF (ZGESDD)</a></td>
</tr>
</tbody>
</table></div>
</div><h5 class="standard"><a class="sec" name="recomm_116a" id="recomm_116a"/>3.1.1.6&#160;&#160;Generalized symmetric definite eigenvalue problems (GSEP)</h5>
<div class="paramtext">
<div class="tablediv"><table class="standard" border="3" align="center" cellpadding="2"><tbody>
<tr>
<td class="libdoc" valign="top" align="center" style="width:24em;"><b>Function and storage scheme</b></td>
<td class="libdoc" valign="top" align="center"><b>real</b></td>
<td class="libdoc" valign="top" align="center"><b>complex</b></td>
</tr><tr>
<td class="libdoc" valign="top" align="left" style="width:24em;">
 simple driver<br/>
 divide-and-conquer driver<br/>
 expert driver
</td>
<td class="libdoc" valign="top" align="left">
 <a class="rout" href="../F08/f08saf.xml">F08SAF (DSYGV)</a><br/>
 <a class="rout" href="../F08/f08scf.xml">F08SCF (DSYGVD)</a><br/>
 <a class="rout" href="../F08/f08sbf.xml">F08SBF (DSYGVX)</a>
</td>
<td class="libdoc" valign="top" align="left">
 <a class="rout" href="../F08/f08snf.xml">F08SNF (ZHEGV)</a><br/>
 <a class="rout" href="../F08/f08sqf.xml">F08SQF (ZHEGVD)</a><br/>
 <a class="rout" href="../F08/f08spf.xml">F08SPF (ZHEGVX)</a>
</td>
</tr><tr>
<td class="libdoc" valign="top" align="left" style="width:24em;">
 <b>packed storage</b> <br/>
 simple driver<br/>
 divide-and-conquer driver<br/>
 expert driver
</td>
<td class="libdoc" valign="top" align="left">
 <br/>
 <a class="rout" href="../F08/f08taf.xml">F08TAF (DSPGV)</a><br/>
 <a class="rout" href="../F08/f08tcf.xml">F08TCF (DSPGVD)</a><br/>
 <a class="rout" href="../F08/f08tbf.xml">F08TBF (DSPGVX)</a>
</td>
<td class="libdoc" valign="top" align="left">
 <br/>
 <a class="rout" href="../F08/f08tnf.xml">F08TNF (ZHPGV)</a><br/>
 <a class="rout" href="../F08/f08tqf.xml">F08TQF (ZHPGVD)</a><br/>
 <a class="rout" href="../F08/f08tpf.xml">F08TPF (ZHPGVX)</a>
</td>
</tr><tr>
<td class="libdoc" valign="top" align="left" style="width:24em;">
 <b>band matrix</b> <br/>
 simple driver<br/>
 divide-and-conquer driver<br/>
 expert driver
</td>
<td class="libdoc" valign="top" align="left">
 <br/>
 <a class="rout" href="../F08/f08uaf.xml">F08UAF (DSBGV)</a><br/>
 <a class="rout" href="../F08/f08ucf.xml">F08UCF (DSBGVD)</a><br/>
 <a class="rout" href="../F08/f08ubf.xml">F08UBF (DSBGVX)</a>
</td>
<td class="libdoc" valign="top" align="left">
 <br/>
 <a class="rout" href="../F08/f08unf.xml">F08UNF (ZHBGV)</a><br/>
 <a class="rout" href="../F08/f08uqf.xml">F08UQF (ZHBGVD)</a><br/>
 <a class="rout" href="../F08/f08upf.xml">F08UPF (ZHBGVX)</a>
</td>
</tr>
</tbody>
</table></div>
</div><h5 class="standard"><a class="sec" name="recomm_117a" id="recomm_117a"/>3.1.1.7&#160;&#160;Generalized nonsymmetric eigenvalue problem (GNEP)</h5>
<div class="paramtext">
<div class="tablediv"><table class="standard" border="3" align="center" cellpadding="2"><tbody>
<tr>
<td class="libdoc" valign="top" align="center" style="width:24em;"><b>Function and storage scheme</b></td>
<td class="libdoc" valign="top" align="center"><b>real</b></td>
<td class="libdoc" valign="top" align="center"><b>complex</b></td>
</tr><tr>
<td class="libdoc" valign="top" align="left" style="width:24em;">
 simple driver for Schur factorization<br/>
 expert driver for Schur factorization<br/>
 simple driver for eigenvalues/vectors<br/>
 expert driver for eigenvalues/vectors
</td>
<td class="libdoc" valign="top" align="left">
 <a class="rout" href="../F08/f08xaf.xml">F08XAF (DGGES)</a><br/>
 <a class="rout" href="../F08/f08xbf.xml">F08XBF (DGGESX)</a><br/>
 <a class="rout" href="../F08/f08waf.xml">F08WAF (DGGEV)</a><br/>
 <a class="rout" href="../F08/f08wbf.xml">F08WBF (DGGEVX)</a>
</td>
<td class="libdoc" valign="top" align="left">
 <a class="rout" href="../F08/f08xnf.xml">F08XNF (ZGGES)</a><br/>
 <a class="rout" href="../F08/f08xpf.xml">F08XPF (ZGGESX)</a><br/>
 <a class="rout" href="../F08/f08wnf.xml">F08WNF (ZGGEV)</a><br/>
 <a class="rout" href="../F08/f08wpf.xml">F08WPF (ZGGEVX)</a>
</td>
</tr>
</tbody>
</table></div>
</div><h5 class="standard"><a class="sec" name="recomm_118a" id="recomm_118a"/>3.1.1.8&#160;&#160;Generalized singular value decomposition (GSVD)</h5>
<div class="paramtext">
<div class="tablediv"><table class="standard" border="3" align="center" cellpadding="2"><tbody>
<tr>
<td class="libdoc" valign="top" align="center" style="width:24em;"><b>Function and storage scheme</b></td>
<td class="libdoc" valign="top" align="center"><b>real</b></td>
<td class="libdoc" valign="top" align="center"><b>complex</b></td>
</tr><tr>
<td class="libdoc" valign="top" align="left" style="width:24em;">singular values/vectors</td>
<td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08vaf.xml">F08VAF (DGGSVD)</a></td>
<td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08vnf.xml">F08VNF (ZGGSVD)</a></td>
</tr>
</tbody>
</table></div>
</div><h4 class="standard"><a class="sec" name="recomm_2a" id="recomm_2a"/>3.1.2&#160;&#160;Computational routines</h4>
<div class="paramtext">It is possible to solve problems by calling two or more routines in sequence.  Some common sequences of routines are indicated in the tables in the following sub-sections; an asterisk (<m:math><m:mo>*</m:mo></m:math>) against a routine name means that the sequence of calls is illustrated in the example program for that routine.</div><h5 class="standard"><a class="sec" name="recomm_11" id="recomm_11"/>3.1.2.1&#160;&#160;Orthogonal factorizations</h5>
<div class="paramtext">Routines are provided for <m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;factorization (with and without column pivoting), and for <m:math><m:mi>L</m:mi><m:mi>Q</m:mi></m:math>, <m:math><m:mi>Q</m:mi><m:mi>L</m:mi></m:math>&#160;and <m:math><m:mi>R</m:mi><m:mi>Q</m:mi></m:math>&#160;factorizations (without pivoting only), of a general real or complex rectangular matrix. A routine is also provided for the <m:math><m:mi>R</m:mi><m:mi>Q</m:mi></m:math>&#160;factorization of a real or complex upper trapezoidal matrix.  (LAPACK refers to this as the <m:math><m:mi>R</m:mi><m:mi>Z</m:mi></m:math>&#160;factorization.)</div><div class="paramtext">The factorization routines do not form the matrix <m:math><m:mi>Q</m:mi></m:math>&#160;explicitly, but represent it as a product of elementary reflectors (see <a class="sec" href="#recomm_36">Section 3.3.6</a>).  Additional routines are provided to generate all or part of <m:math><m:mi>Q</m:mi></m:math>&#160;explicitly if it is required, or to apply <m:math><m:mi>Q</m:mi></m:math>&#160;in its factored form to another matrix (specifically to compute one of the matrix products <m:math><m:mi>Q</m:mi><m:mi>C</m:mi></m:math>, <m:math><m:msup><m:mi>Q</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>C</m:mi></m:math>, <m:math><m:mi>C</m:mi><m:mi>Q</m:mi></m:math>&#160;or <m:math><m:mi>C</m:mi><m:msup><m:mi>Q</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup></m:math>&#160;with <m:math><m:msup><m:mi>Q</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup></m:math>&#160;replaced by <m:math><m:msup><m:mi>Q</m:mi><m:mi mathvariant="normal">H</m:mi></m:msup></m:math>&#160;if <m:math><m:mi>C</m:mi></m:math>&#160;and <m:math><m:mi>Q</m:mi></m:math>&#160;are complex).</div><div class="paramtext">
<div class="tablediv"><table class="standard" border="3" align="center" cellpadding="2">
  
  
  
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" align="left">&#160;</td>
    <td class="libdoc" valign="top" align="left"><b>Factorize without pivoting</b></td>
    <td class="libdoc" valign="top" align="left"><b>Factorize with pivoting</b></td>
    <td class="libdoc" valign="top" align="left"><b>Generate
Matrix <m:math><m:mi mathvariant="bold-italic">Q</m:mi></m:math></b></td>
    <td class="libdoc" valign="top" align="left"><b>Apply matrix <m:math><m:mi mathvariant="bold-italic">Q</m:mi></m:math></b></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left"><m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;factorization,
real matrices</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08aef.xml">F08AEF (DGEQRF)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08bff.xml">F08BFF (DGEQP3)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08aff.xml">F08AFF (DORGQR)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08agf.xml">F08AGF (DORMQR)</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left"><m:math><m:mi>L</m:mi><m:mi>Q</m:mi></m:math>&#160;factorization,
real matrices</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08ahf.xml">F08AHF (DGELQF)</a></td>
    <td class="libdoc" valign="top" align="left">&#160;</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08ajf.xml">F08AJF (DORGLQ)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08akf.xml">F08AKF (DORMLQ)</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left"><m:math><m:mi>Q</m:mi><m:mi>L</m:mi></m:math>&#160;factorization, real matrices</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08cef.xml">F08CEF (DGEQLF)</a></td>
    <td class="libdoc" valign="top" align="left">&#160;</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08cff.xml">F08CFF (DORGQL)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08cgf.xml">F08CGF (DORMQL)</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left"><m:math><m:mi>R</m:mi><m:mi>Q</m:mi></m:math>&#160;factorization, real matrices</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08chf.xml">F08CHF (DGERQF)</a></td>
    <td class="libdoc" valign="top" align="left">&#160;</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08cjf.xml">F08CJF (DORGRQ)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08ckf.xml">F08CKF (DORMRQ)</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left"><m:math><m:mi>R</m:mi><m:mi>Q</m:mi></m:math>&#160;factorization, real upper trapezoidal matrices</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08bhf.xml">F08BHF (DTZRZF)</a></td>
    <td class="libdoc" valign="top" align="left">&#160;</td>
    <td class="libdoc" valign="top" align="left">&#160;</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08bkf.xml">F08BKF (DORMRZ)</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left"><m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;factorization,
complex matrices</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08asf.xml">F08ASF (ZGEQRF)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08btf.xml">F08BTF (ZGEQP3)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08atf.xml">F08ATF (ZUNGQR)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08auf.xml">F08AUF (ZUNMQR)</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left"><m:math><m:mi>L</m:mi><m:mi>Q</m:mi></m:math>&#160;factorization,
complex matrices</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08avf.xml">F08AVF (ZGELQF)</a></td>
    <td class="libdoc" valign="top" align="left">&#160;</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08awf.xml">F08AWF (ZUNGLQ)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08axf.xml">F08AXF (ZUNMLQ)</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left"><m:math><m:mi>Q</m:mi><m:mi>L</m:mi></m:math>&#160;factorization,
complex matrices</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08csf.xml">F08CSF (ZGEQLF)</a></td>
    <td class="libdoc" valign="top" align="left">&#160;</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08ctf.xml">F08CTF (ZUNGQL)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08cuf.xml">F08CUF (ZUNMQL)</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left"><m:math><m:mi>R</m:mi><m:mi>Q</m:mi></m:math>&#160;factorization,
complex matrices</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08cvf.xml">F08CVF (ZGERQF)</a></td>
    <td class="libdoc" valign="top" align="left">&#160;</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08cwf.xml">F08CWF (ZUNGRQ)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08cxf.xml">F08CXF (ZUNMRQ)</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left"><m:math><m:mi>R</m:mi><m:mi>Q</m:mi></m:math>&#160;factorization,
complex upper trapezoidal matrices</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08bvf.xml">F08BVF (ZTZRZF)</a></td>
    <td class="libdoc" valign="top" align="left">&#160;</td>
    <td class="libdoc" valign="top" align="left">&#160;</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08bxf.xml">F08BXF (ZUNMRZ)</a></td>
   </tr>
  </tbody>
 </table></div></div><div class="paramtext">To solve linear least squares problems, as described in <a class="sec" href="#background21">Sections 2.2.1</a> or <a class="sec" href="#background23">2.2.3</a>, routines based on the <m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;factorization can be used:
<div class="left-tablediv"><table class="frame-none">
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" style="width:33em;">real data, full-rank problem</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08aef.xml">F08AEF</a>*, <a class="rout" href="../F06/f06yjf.xml">F06YJF</a>, <a class="rout" href="../F08/f08agf.xml">F08AGF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">complex data, full-rank problem</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08asf.xml">F08ASF</a>*, <a class="rout" href="../F06/f06zjf.xml">F06ZJF</a>, <a class="rout" href="../F08/f08auf.xml">F08AUF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">real data, rank-deficient problem</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08bff.xml">F08BFF</a>*, <a class="rout" href="../F06/f06yjf.xml">F06YJF</a>, <a class="rout" href="../F08/f08agf.xml">F08AGF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">complex data, rank-deficient problem</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08btf.xml">F08BTF</a>*, <a class="rout" href="../F06/f06zjf.xml">F06ZJF</a>, <a class="rout" href="../F08/f08auf.xml">F08AUF</a></td>
   </tr>
  </tbody>
 </table></div>
To find the minimum norm solution of under-determined systems of linear equations, as described in <a class="sec" href="#background22">Section 2.2.2</a>, routines based on the <m:math><m:mi>L</m:mi><m:mi>Q</m:mi></m:math>&#160;factorization can be used:
<div class="left-tablediv"><table class="frame-none">
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" style="width:33em;">real data, full-rank problem</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08ahf.xml">F08AHF</a>*, <a class="rout" href="../F06/f06yjf.xml">F06YJF</a>, <a class="rout" href="../F08/f08akf.xml">F08AKF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">complex data, full-rank problem</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08avf.xml">F08AVF</a>*, <a class="rout" href="../F06/f06zjf.xml">F06ZJF</a>, <a class="rout" href="../F08/f08axf.xml">F08AXF</a></td>
   </tr>
  </tbody>
 </table></div>
</div><h5 class="standard"><a class="sec" name="recomm_genorthfact" id="recomm_genorthfact"/>3.1.2.2&#160;&#160;Generalized orthogonal factorizations</h5>
<div class="paramtext">Routines are provided for the generalized <m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;and <m:math><m:mi>R</m:mi><m:mi>Q</m:mi></m:math>&#160;factorizations of real and complex matrix pairs.
<div class="tablediv"><table class="standard" border="3" align="center" cellpadding="2">
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" align="center">&#160;</td>
    <td class="libdoc" valign="top" align="center"><b>Factorize</b></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">Generalized <m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;factorization, real matrices</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08zef.xml">F08ZEF (DGGQRF)</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">Generalized <m:math><m:mi>R</m:mi><m:mi>Q</m:mi></m:math>&#160;factorization, real matrices</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08zff.xml">F08ZFF (DGGRQF)</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">Generalized <m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;factorization, complex matrices</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08zsf.xml">F08ZSF (ZGGQRF)</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">Generalized <m:math><m:mi>R</m:mi><m:mi>Q</m:mi></m:math>&#160;factorization, complex matrices</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08ztf.xml">F08ZTF (ZGGRQF)</a></td>
   </tr>
  </tbody>
 </table></div>
</div><h5 class="standard"><a class="sec" name="recomm_12" id="recomm_12"/>3.1.2.3&#160;&#160;Singular value problems</h5>
<div class="paramtext">Routines are provided to reduce a general real or complex rectangular matrix <m:math><m:mi>A</m:mi></m:math>&#160;to real bidiagonal form <m:math><m:mi>B</m:mi></m:math>&#160;by an orthogonal transformation <m:math><m:mi>A</m:mi><m:mo>=</m:mo><m:mi>Q</m:mi><m:mi>B</m:mi><m:msup><m:mi>P</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup></m:math>&#160;(or by a unitary transformation <m:math><m:mi>A</m:mi><m:mo>=</m:mo><m:mi>Q</m:mi><m:mi>B</m:mi><m:msup><m:mi>P</m:mi><m:mi mathvariant="normal">H</m:mi></m:msup></m:math>&#160;if <m:math><m:mi>A</m:mi></m:math>&#160;is complex).  Different routines allow a full matrix <m:math><m:mi>A</m:mi></m:math>&#160;to be stored conventionally (see <a class="sec" href="#recomm_31">Section 3.3.1</a>), or a band matrix to use band storage (see <a class="sec" href="../F07/f07intro.xml#recomm_33">Section 3.3.4</a> in  the F07 Chapter Introduction).</div><div class="paramtext">The routines for reducing full matrices do not form the matrix <m:math><m:mi>Q</m:mi></m:math>&#160;or <m:math><m:mi>P</m:mi></m:math>&#160;explicitly; additional routines are provided to generate all or part of them, or to apply them to another matrix, as with the routines for orthogonal factorizations.  Explicit generation of <m:math><m:mi>Q</m:mi></m:math>&#160;or <m:math><m:mi>P</m:mi></m:math>&#160;is required before using the bidiagonal <m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;algorithm to compute left or right singular vectors of <m:math><m:mi>A</m:mi></m:math>.</div><div class="paramtext">The routines for reducing band matrices have options to generate <m:math><m:mi>Q</m:mi></m:math>&#160;or <m:math><m:mi>P</m:mi></m:math>&#160;if required.</div><div class="paramtext">Further routines are provided to compute all or part of the singular value decomposition of a real bidiagonal matrix; the same routines can be used to compute the singular value decomposition of a real or complex matrix that has been reduced to bidiagonal form.</div><div class="paramtext">
<div class="tablediv"><table class="standard" border="3" align="center" cellpadding="2">
  
  
  
  
  
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" align="left">&#160;</td>
    <td class="libdoc" valign="top" align="left"><b>Reduce to<br/> bidiagonal<br/> form</b></td>
    <td class="libdoc" valign="top" align="left"><b>Generate<br/> matrix <m:math><m:mi mathvariant="bold-italic">Q</m:mi></m:math><br/> or <m:math><m:msup><m:mi mathvariant="bold-italic">P</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup></m:math></b></td>
    <td class="libdoc" valign="top" align="left"><b>Apply<br/> matrix <m:math><m:mi mathvariant="bold-italic">Q</m:mi></m:math><br/> or <m:math><m:mi mathvariant="bold-italic">P</m:mi></m:math></b></td>
    <td class="libdoc" valign="top" align="left"><b>Reduce band<br/>
matrix to<br/>
bidiagonal<br/>
form</b></td>
    <td class="libdoc" valign="top" align="left"><b>SVD of<br/> bidiagonal<br/> form (<m:math><m:mi mathvariant="bold-italic">QR</m:mi></m:math><br/> algorithm)</b></td>
    <td class="libdoc" valign="top" align="left"><b>SVD of<br/> bidiagonal<br/> form (divide and conquer)</b></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">real matrices</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08kef.xml">F08KEF (DGEBRD)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08kff.xml">F08KFF (DORGBR)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08kgf.xml">F08KGF (DORMBR)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08lef.xml">F08LEF (DGBBRD)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08mef.xml">F08MEF (DBDSQR)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08mdf.xml">F08MDF (DBDSDC)</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">complex matrices</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08ksf.xml">F08KSF (ZGEBRD)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08ktf.xml">F08KTF (ZUNGBR)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08kuf.xml">F08KUF (ZUNMBR)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08lsf.xml">F08LSF (ZGBBRD)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08msf.xml">F08MSF (ZBDSQR)</a></td>
    <td class="libdoc" valign="top" align="left">&#160;</td>
   </tr>
  </tbody>
 </table></div></div><div class="paramtext">Given the singular values, <a class="rout" href="../F08/f08flf.xml">F08FLF (DDISNA)</a> is provided to compute the reciprocal condition numbers for the left or right singular vectors of a real or complex matrix.</div><div class="paramtext">To compute the singular values and vectors of a rectangular matrix, as described in <a class="sec" href="#background3">Section 2.3</a>, use the following sequence of calls:</div><div class="paramtext"><b>Rectangular matrix (standard storage)</b>
<div class="left-tablediv"><table class="frame-none">
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" style="width:33em;">real matrix, singular values and vectors</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08kef.xml">F08KEF</a>, <a class="rout" href="../F08/f08kff.xml">F08KFF</a>*, <a class="rout" href="../F08/f08mef.xml">F08MEF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">complex matrix, singular values and vectors</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08ksf.xml">F08KSF</a>, <a class="rout" href="../F08/f08ktf.xml">F08KTF</a>*, <a class="rout" href="../F08/f08msf.xml">F08MSF</a></td>
   </tr>
  </tbody>
 </table></div>
</div><div class="paramtext"><b>Rectangular matrix (banded)</b>
<div class="left-tablediv"><table class="frame-none">
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" style="width:33em;">real matrix, singular values and vectors</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08lef.xml">F08LEF</a>, <a class="rout" href="../F08/f08kff.xml">F08KFF</a>, <a class="rout" href="../F08/f08mef.xml">F08MEF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">complex matrix, singular values and vectors</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08lsf.xml">F08LSF</a>, <a class="rout" href="../F08/f08ktf.xml">F08KTF</a>, <a class="rout" href="../F08/f08msf.xml">F08MSF</a></td>
   </tr>
  </tbody>
 </table></div>
</div><div class="paramtext">To use the singular value decomposition to solve a linear least squares problem, as described in <a class="sec" href="#background4">Section 2.4</a>, the following routines are required:
<div class="left-tablediv"><table class="frame-none">
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" style="width:33em;">real data</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F06/f06yaf.xml">F06YAF</a>, <a class="rout" href="../F08/f08kef.xml">F08KEF</a>, <a class="rout" href="../F08/f08kff.xml">F08KFF</a>, <a class="rout" href="../F08/f08kgf.xml">F08KGF</a>, <a class="rout" href="../F08/f08mef.xml">F08MEF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">complex data</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F06/f06zaf.xml">F06ZAF</a>, <a class="rout" href="../F08/f08ksf.xml">F08KSF</a>, <a class="rout" href="../F08/f08ktf.xml">F08KTF</a>, <a class="rout" href="../F08/f08kuf.xml">F08KUF</a>, <a class="rout" href="../F08/f08msf.xml">F08MSF</a></td>
   </tr>
  </tbody>
 </table></div>
</div><h5 class="standard"><a class="sec" name="recomm_gensingdecomp" id="recomm_gensingdecomp"/>3.1.2.4&#160;&#160;Generalized singular value decomposition</h5>
<div class="paramtext">Routines are provided to compute the generalized SVD of a real or complex matrix pair <m:math><m:mfenced separators=""><m:mi>A</m:mi><m:mo>,</m:mo><m:mi>B</m:mi></m:mfenced></m:math>&#160;in upper trapezoidal form.  Routines are also provided to reduce a general real or complex matrix pair to the required upper trapezoidal form.
<div class="tablediv"><table class="standard" border="3" align="center" cellpadding="2">
  
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" align="left">&#160;</td>
    <td class="libdoc" valign="top" align="center"><b>Reduce to trapezoidal form</b></td> 
    <td class="libdoc" valign="top" align="center"><b>Generalized SVD of trapezoidal form</b></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">real matrices</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08vef.xml">F08VEF (DGGSVP)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08yef.xml">F08YEF (DTGSJA)</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">complex matrices</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08vsf.xml">F08VSF (ZGGSVP)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08ysf.xml">F08YSF (ZTGSJA)</a></td>
   </tr>
  </tbody>
 </table></div>
</div><h5 class="standard"><a class="sec" name="recomm_13" id="recomm_13"/>3.1.2.5&#160;&#160;Symmetric eigenvalue problems</h5>
<div class="paramtext">Routines are provided to reduce a real symmetric or complex Hermitian matrix <m:math><m:mi>A</m:mi></m:math>&#160;to real tridiagonal form <m:math><m:mi>T</m:mi></m:math>&#160;by an orthogonal similarity transformation <m:math><m:mi>A</m:mi><m:mo>=</m:mo><m:mi>Q</m:mi><m:mi>T</m:mi><m:msup><m:mi>Q</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup></m:math>&#160;(or by a unitary transformation <m:math><m:mi>A</m:mi><m:mo>=</m:mo><m:mi>Q</m:mi><m:mi>T</m:mi><m:msup><m:mi>Q</m:mi><m:mi mathvariant="normal">H</m:mi></m:msup></m:math>&#160;if <m:math><m:mi>A</m:mi></m:math>&#160;is complex).  Different routines allow a full matrix <m:math><m:mi>A</m:mi></m:math>&#160;to be stored conventionally (see <a class="sec" href="../F07/f07intro.xml#recomm_31">Section 3.3.1</a> in  the F07 Chapter Introduction) or in packed storage (see <a class="sec" href="../F07/f07intro.xml#recomm32">Section 3.3.2</a> in  the F07 Chapter Introduction); or a band matrix to use band storage (see <a class="sec" href="../F07/f07intro.xml#recomm_33">Section 3.3.4</a> in  the F07 Chapter Introduction).</div><div class="paramtext">The routines for reducing full matrices do not form the matrix <m:math><m:mi>Q</m:mi></m:math>&#160;explicitly; additional routines are provided to generate <m:math><m:mi>Q</m:mi></m:math>, or to apply it to another matrix, as with the routines for orthogonal factorizations.  Explicit generation of <m:math><m:mi>Q</m:mi></m:math>&#160;is required before using the <m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;algorithm to find all the eigenvectors of <m:math><m:mi>A</m:mi></m:math>; application of <m:math><m:mi>Q</m:mi></m:math>&#160;to another matrix is required after eigenvectors of <m:math><m:mi>T</m:mi></m:math>&#160;have been found by inverse iteration, in order to transform them to eigenvectors of <m:math><m:mi>A</m:mi></m:math>.</div><div class="paramtext">The routines for reducing band matrices have an option to generate <m:math><m:mi>Q</m:mi></m:math>&#160;if required.</div><div class="paramtext">
<div class="tablediv"><table class="standard" border="3" align="center" cellpadding="2">
  
  
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" align="left">&#160;</td>
    <td class="libdoc" valign="top" align="left"><b>Reduce to tridiagonal form</b></td>
    <td class="libdoc" valign="top" align="left"><b>Generate matrix <m:math><m:mi mathvariant="bold-italic">Q</m:mi></m:math></b></td>
    <td class="libdoc" valign="top" align="left"><b>Apply matrix <m:math><m:mi mathvariant="bold-italic">Q</m:mi></m:math></b></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">real symmetric matrices</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08fef.xml">F08FEF (DSYTRD)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08fff.xml">F08FFF (DORGTR)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08fgf.xml">F08FGF (DORMTR)</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">real symmetric matrices
(packed storage)</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08gef.xml">F08GEF (DSPTRD)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08gff.xml">F08GFF (DOPGTR)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08ggf.xml">F08GGF (DOPMTR)</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">real symmetric band matrices</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08hef.xml">F08HEF (DSBTRD)</a></td>
    <td class="libdoc" valign="top" align="left">&#160;</td>
    <td class="libdoc" valign="top" align="left">&#160;</td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">complex Hermitian matrices</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08fsf.xml">F08FSF (ZHETRD)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08ftf.xml">F08FTF (ZUNGTR)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08fuf.xml">F08FUF (ZUNMTR)</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">complex Hermitian matrices
(packed storage)</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08gsf.xml">F08GSF (ZHPTRD)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08gtf.xml">F08GTF (ZUPGTR)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08guf.xml">F08GUF (ZUPMTR)</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">complex Hermitian band matrices</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08hsf.xml">F08HSF (ZHBTRD)</a></td>
    <td class="libdoc" valign="top" align="left">&#160;</td>
    <td class="libdoc" valign="top" align="left">&#160;</td>
   </tr>
  </tbody>
 </table></div>
</div><div class="paramtext">Given the eigenvalues, <a class="rout" href="../F08/f08flf.xml">F08FLF (DDISNA)</a> is provided to compute the reciprocal condition numbers for the eigenvectors of a real symmetric or complex Hermitian matrix.</div><div class="paramtext">A variety of routines are provided to compute eigenvalues and eigenvectors of the real symmetric tridiagonal matrix <m:math><m:mi>T</m:mi></m:math>, some computing all eigenvalues and eigenvectors, some computing selected eigenvalues and eigenvectors.  The same routines can be used to compute eigenvalues and eigenvectors of a real symmetric or complex Hermitian matrix which has been reduced to tridiagonal form.</div><div class="paramtext"><b>Eigenvalues and eigenvectors of real symmetric tridiagonal matrices:</b></div><div class="paramtext"><span class="italic">The original (non-reduced) matrix is Real or Complex Hermitian</span>
<div class="left-tablediv"><table class="frame-none">
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" style="width:33em;">all eigenvalues (root-free <m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;algorithm)</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08jff.xml">F08JFF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">all eigenvalues (root-free <m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;algorithm called by divide-and-conquer)</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08jcf.xml">F08JCF</a>  or <a class="rout" href="../F08/f08jhf.xml">F08JHF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">all eigenvalues (RRR)</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08jlf.xml">F08JLF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">selected eigenvalues (bisection)</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08jjf.xml">F08JJF</a></td>
   </tr>
  </tbody>
 </table></div>
</div><div class="paramtext"><span class="italic">The original (non-reduced) matrix is Real</span>
<div class="left-tablediv"><table class="frame-none">
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" style="width:33em;">all eigenvalues and eigenvectors (<m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;algorithm)</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08jef.xml">F08JEF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">all eigenvalues and eigenvectors (divide-and-conquer)</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08jcf.xml">F08JCF</a> or <a class="rout" href="../F08/f08jhf.xml">F08JHF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">all eigenvalues and eigenvectors (RRR)</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08jlf.xml">F08JLF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">all eigenvalues and eigenvectors (positive definite case)</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08jgf.xml">F08JGF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">selected eigenvectors (inverse iteration)</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08jkf.xml">F08JKF</a></td>
   </tr>
  </tbody>
 </table></div>
</div><div class="paramtext"><span class="italic">The original (non-reduced) matrix is Complex Hermitian</span>
<div class="left-tablediv"><table class="frame-none">
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" style="width:33em;">all eigenvalues and eigenvectors (<m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;algorithm)</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08jsf.xml">F08JSF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">all eigenvalues and eigenvectors (divide and conquer)</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08jvf.xml">F08JVF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">all eigenvalues and eigenvectors (RRR)</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08jyf.xml">F08JYF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">all eigenvalues and eigenvectors (positive definite case)</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08juf.xml">F08JUF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">selected eigenvectors (inverse iteration)</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08jxf.xml">F08JXF</a></td>
   </tr>
  </tbody>
 </table></div>
</div><div class="paramtext">The following sequences of calls may be used to compute various combinations of eigenvalues and eigenvectors, as described in <a class="sec" href="#background5">Section 2.7</a>.</div><div class="paramtext"><b>Sequences for computing eigenvalues and eigenvectors</b></div><div class="paramtext"><span class="italic">Real Symmetric matrix (standard storage)</span>
<div class="left-tablediv"><table class="frame-none">
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" style="width:33em;">all eigenvalues and eigenvectors (using divide-and-conquer)</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08fcf.xml">F08FCF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">all eigenvalues and eigenvectors (using <m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;algorithm)</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08fef.xml">F08FEF</a>, <a class="rout" href="../F08/f08fff.xml">F08FFF</a>*, <a class="rout" href="../F08/f08jef.xml">F08JEF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">all eigenvalues and eigenvectors (RRR)</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08fef.xml">F08FEF</a>, <a class="rout" href="../F08/f08fgf.xml">F08FGF</a>, <a class="rout" href="../F08/f08jlf.xml">F08JLF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">selected eigenvalues and eigenvectors (bisection and inverse iteration)</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08fef.xml">F08FEF</a>, <a class="rout" href="../F08/f08fgf.xml">F08FGF</a>, <a class="rout" href="../F08/f08jjf.xml">F08JJF</a>, <a class="rout" href="../F08/f08jkf.xml">F08JKF</a>*</td>
   </tr>
  </tbody>
 </table></div>
</div><div class="paramtext"><span class="italic">Real Symmetric matrix (packed storage)</span>
<div class="left-tablediv"><table class="frame-none">
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" style="width:33em;">all eigenvalues and eigenvectors (using divide-and-conquer)</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08gcf.xml">F08GCF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top">all eigenvalues and eigenvectors (using <m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;algorithm)</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08gef.xml">F08GEF</a>, <a class="rout" href="../F08/f08gff.xml">F08GFF</a>*, <a class="rout" href="../F08/f08jef.xml">F08JEF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">all eigenvalues and eigenvectors (RRR)</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08gef.xml">F08GEF</a>, <a class="rout" href="../F08/f08ggf.xml">F08GGF</a>, <a class="rout" href="../F08/f08jlf.xml">F08JLF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">selected eigenvalues and eigenvectors (bisection and inverse iteration)</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08gef.xml">F08GEF</a>, <a class="rout" href="../F08/f08ggf.xml">F08GGF</a>, <a class="rout" href="../F08/f08jjf.xml">F08JJF</a>, <a class="rout" href="../F08/f08jkf.xml">F08JKF</a>*</td>
   </tr>
  </tbody>
 </table></div>
</div><div class="paramtext"><span class="italic">Real Symmetric banded matrix</span>
<div class="left-tablediv"><table class="frame-none">
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" style="width:33em;">all eigenvalues and eigenvectors (using divide-and-conquer)</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08hcf.xml">F08HCF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">all eigenvalues and eigenvectors (using <m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;algorithm)</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08hef.xml">F08HEF</a>*, <a class="rout" href="../F08/f08jef.xml">F08JEF</a></td>
   </tr>
  </tbody>
 </table></div>
</div><div class="paramtext"><span class="italic">Complex Hermitian matrix (standard storage)</span>
<div class="left-tablediv"><table class="frame-none">
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" style="width:33em;">all eigenvalues and eigenvectors (using divide-and-conquer)</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08fqf.xml">F08FQF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">all eigenvalues and eigenvectors (using <m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;algorithm)</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08fsf.xml">F08FSF</a>, <a class="rout" href="../F08/f08ftf.xml">F08FTF</a>*, <a class="rout" href="../F08/f08jsf.xml">F08JSF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">all eigenvalues and eigenvectors (RRR)</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08fsf.xml">F08FSF</a>, <a class="rout" href="../F08/f08fuf.xml">F08FUF</a>, <a class="rout" href="../F08/f08jyf.xml">F08JYF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">selected eigenvalues and eigenvectors (bisection and inverse iteration)</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08fsf.xml">F08FSF</a>, <a class="rout" href="../F08/f08fuf.xml">F08FUF</a>, <a class="rout" href="../F08/f08jjf.xml">F08JJF</a>, <a class="rout" href="../F08/f08jxf.xml">F08JXF</a>*</td>
   </tr>
  </tbody>
 </table></div>
</div><div class="paramtext"><span class="italic">Complex Hermitian matrix (packed storage)</span>
<div class="left-tablediv"><table class="frame-none">
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" style="width:33em;">all eigenvalues and eigenvectors (using divide-and-conquer)</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08gqf.xml">F08GQF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">all eigenvalues and eigenvectors (using <m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;algorithm)</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08gsf.xml">F08GSF</a>, <a class="rout" href="../F08/f08gtf.xml">F08GTF</a>*, <a class="rout" href="../F08/f08jsf.xml">F08JSF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">all eigenvalues and eigenvectors (RRR)</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08gsf.xml">F08GSF</a>, <a class="rout" href="../F08/f08guf.xml">F08GUF</a> and <a class="rout" href="../F08/f08jyf.xml">F08JYF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">selected eigenvalues and eigenvectors (bisection and inverse iteration)</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08gsf.xml">F08GSF</a>, <a class="rout" href="../F08/f08guf.xml">F08GUF</a>, <a class="rout" href="../F08/f08jjf.xml">F08JJF</a>, <a class="rout" href="../F08/f08jxf.xml">F08JXF</a>*</td>
   </tr>
  </tbody>
 </table></div>
</div><div class="paramtext"><span class="italic">Complex Hermitian banded matrix</span>
<div class="left-tablediv"><table class="frame-none">
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" style="width:33em;">all eigenvalues and eigenvectors (using divide-and-conquer)</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08hqf.xml">F08HQF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">all eigenvalues and eigenvectors (using <m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;algorithm)</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08hsf.xml">F08HSF</a>*, <a class="rout" href="../F08/f08jsf.xml">F08JSF</a></td>
   </tr>
  </tbody>
 </table></div>
</div><h5 class="standard"><a class="sec" name="recomm_14" id="recomm_14"/>3.1.2.6&#160;&#160;Generalized symmetric-definite eigenvalue problems</h5>
<div class="paramtext">Routines are provided for reducing each of the problems <m:math><m:mi>A</m:mi><m:mi>x</m:mi><m:mo>=</m:mo><m:mi>&#955;</m:mi><m:mi>B</m:mi><m:mi>x</m:mi></m:math>, <m:math><m:mi>A</m:mi><m:mi>B</m:mi><m:mi>x</m:mi><m:mo>=</m:mo><m:mi>&#955;</m:mi><m:mi>x</m:mi></m:math>&#160;or <m:math><m:mi>B</m:mi><m:mi>A</m:mi><m:mi>x</m:mi><m:mo>=</m:mo><m:mi>&#955;</m:mi><m:mi>x</m:mi></m:math>&#160;to an equivalent standard eigenvalue problem <m:math><m:mi>C</m:mi><m:mi>y</m:mi><m:mo>=</m:mo><m:mi>&#955;</m:mi><m:mi>y</m:mi></m:math>.  Different routines allow the matrices to be stored either conventionally or in packed storage.  The positive definite matrix <m:math><m:mi>B</m:mi></m:math>&#160;must first be factorized using a routine from <a class="chap" href="../F07/f07conts.xml">Chapter F07</a>.  There is also a routine which reduces the problem <m:math><m:mi>A</m:mi><m:mi>x</m:mi><m:mo>=</m:mo><m:mi>&#955;</m:mi><m:mi>B</m:mi><m:mi>x</m:mi></m:math>&#160;where <m:math><m:mi>A</m:mi></m:math>&#160;and <m:math><m:mi>B</m:mi></m:math>&#160;are banded, to an equivalent banded standard eigenvalue problem; this uses a split Cholesky factorization for which a routine in <a class="chap" href="../F08/f08conts.xml">Chapter F08</a> is provided.</div><div class="paramtext">
<div class="tablediv"><table class="standard" border="3" align="center" cellpadding="2">
  
  
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" align="left">&#160;</td>
    <td class="libdoc" valign="top" align="left"><b>Reduce to standard problem</b></td>
    <td class="libdoc" valign="top" align="left"><b>Reduce to standard problem
(packed storage)</b></td>
    <td class="libdoc" valign="top" align="left"><b>Reduce to standard problem
(band matrices)</b></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">real symmetric matrices</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08sef.xml">F08SEF (DSYGST)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08tef.xml">F08TEF (DSPGST)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08uef.xml">F08UEF (DSBGST)</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">complex Hermitian matrices</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08ssf.xml">F08SSF (ZHEGST)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08tsf.xml">F08TSF (ZHPGST)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08usf.xml">F08USF (ZHBGST)</a></td>
   </tr>
  </tbody>
 </table></div>
</div><div class="paramtext">The equivalent standard problem can then be solved using the routines discussed in <a class="sec" href="#recomm_13">Section 3.1.2.5</a>.  For example, to compute all the eigenvalues, the following routines must be called:
<div class="left-tablediv"><table class="frame-none">
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" style="width:33em;">real symmetric-definite problem</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F07/f07fdf.xml">F07FDF</a>, <a class="rout" href="../F08/f08sef.xml">F08SEF</a>*, <a class="rout" href="../F08/f08fef.xml">F08FEF</a>, <a class="rout" href="../F08/f08jff.xml">F08JFF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">real symmetric-definite problem, packed storage</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F07/f07gdf.xml">F07GDF</a>, <a class="rout" href="../F08/f08tef.xml">F08TEF</a>*, <a class="rout" href="../F08/f08gef.xml">F08GEF</a>, <a class="rout" href="../F08/f08jff.xml">F08JFF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">real symmetric-definite banded problem</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08uff.xml">F08UFF</a>*, <a class="rout" href="../F08/f08uef.xml">F08UEF</a>*, <a class="rout" href="../F08/f08hef.xml">F08HEF</a>, <a class="rout" href="../F08/f08jff.xml">F08JFF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">complex Hermitian-definite problem</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F07/f07frf.xml">F07FRF</a>, <a class="rout" href="../F08/f08ssf.xml">F08SSF</a>*, <a class="rout" href="../F08/f08fsf.xml">F08FSF</a>, <a class="rout" href="../F08/f08jff.xml">F08JFF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">complex Hermitian-definite problem, packed storage</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F07/f07grf.xml">F07GRF</a>, <a class="rout" href="../F08/f08tsf.xml">F08TSF</a>*, <a class="rout" href="../F08/f08gsf.xml">F08GSF</a>, <a class="rout" href="../F08/f08jff.xml">F08JFF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">complex Hermitian-definite banded problem</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08utf.xml">F08UTF</a>*, <a class="rout" href="../F08/f08usf.xml">F08USF</a>*, <a class="rout" href="../F08/f08hsf.xml">F08HSF</a>, <a class="rout" href="../F08/f08jff.xml">F08JFF</a></td>
   </tr>
  </tbody>
 </table></div>
If eigenvectors are computed, the eigenvectors of the equivalent standard problem must be transformed back to those of the original generalized problem, as indicated in <a class="sec" href="#background6">Section 2.8</a>; routines from 
<a class="chap" href="../F06/f06conts.xml">Chapter F06</a>
 
may be used for this.</div><h5 class="standard"><a class="sec" name="recomm_15" id="recomm_15"/>3.1.2.7&#160;&#160;Nonsymmetric eigenvalue problems</h5>
<div class="paramtext">Routines are provided to reduce a general real or complex matrix <m:math><m:mi>A</m:mi></m:math>&#160;to upper Hessenberg form <m:math><m:mi>H</m:mi></m:math>&#160;by an orthogonal similarity transformation <m:math><m:mi>A</m:mi><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">T</m:mi></m:msup></m:math>&#160;(or by a unitary transformation <m:math><m:mi>A</m:mi><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>&#160;if <m:math><m:mi>A</m:mi></m:math>&#160;is complex).</div><div class="paramtext">These routines do not form the matrix <m:math><m:mi>Q</m:mi></m:math>&#160;explicitly; additional routines are provided to generate <m:math><m:mi>Q</m:mi></m:math>, or to apply it to another matrix, as with the routines for orthogonal factorizations.  Explicit generation of <m:math><m:mi>Q</m:mi></m:math>&#160;is required before using the <m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;algorithm on <m:math><m:mi>H</m:mi></m:math>&#160;to compute the Schur vectors; application of <m:math><m:mi>Q</m:mi></m:math>&#160;to another matrix is needed after eigenvectors of <m:math><m:mi>H</m:mi></m:math>&#160;have been computed by inverse iteration, in order to transform them to eigenvectors of <m:math><m:mi>A</m:mi></m:math>.</div><div class="paramtext">Routines are also provided to balance the matrix before reducing it to Hessenberg form, as described in <a class="sec" href="#background116">Section 2.14.6</a>.  Companion routines are required to transform Schur vectors or eigenvectors of the balanced matrix to those of the original matrix.</div><div class="paramtext">
<div class="tablediv"><table class="standard" border="3" align="center" cellpadding="2">
  
  
  
  
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" align="left">&#160;</td>
    <td class="libdoc" valign="top" align="left"><b>Reduce to Hessenberg form</b></td>
    <td class="libdoc" valign="top" align="left"><b>Generate matrix <m:math><m:mi mathvariant="bold-italic">Q</m:mi></m:math></b></td>
    <td class="libdoc" valign="top" align="left"><b>Apply matrix <m:math><m:mi mathvariant="bold-italic">Q</m:mi></m:math></b></td>
    <td class="libdoc" valign="top" align="left"><b>Balance</b></td>
    <td class="libdoc" valign="top" align="left"><b>Back&#173;transform vectors after balancing</b></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">real matrices</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08nef.xml">F08NEF (DGEHRD)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08nff.xml">F08NFF (DORGHR)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08ngf.xml">F08NGF (DORMHR)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08nhf.xml">F08NHF (DGEBAL)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08njf.xml">F08NJF (DGEBAK)</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">complex matrices</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08nsf.xml">F08NSF (ZGEHRD)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08ntf.xml">F08NTF (ZUNGHR)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08nuf.xml">F08NUF (ZUNMHR)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08nvf.xml">F08NVF (ZGEBAL)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08nwf.xml">F08NWF (ZGEBAK)</a></td>
   </tr>
  </tbody>
 </table></div>
</div><div class="paramtext">Routines are provided to compute the eigenvalues and all or part of the Schur factorization of an upper Hessenberg matrix.  Eigenvectors may be computed either from the upper Hessenberg form by inverse iteration, or from the Schur form by back-substitution; these approaches are equally satisfactory for computing individual eigenvectors, but the latter may provide a more accurate basis for a subspace spanned by several eigenvectors.</div><div class="paramtext">Additional routines estimate the sensitivities of computed eigenvalues and eigenvectors, as discussed in <a class="sec" href="#background115">Section 2.14.5</a>.</div><div class="paramtext">
<div class="tablediv"><table class="standard" border="3" align="center" cellpadding="2">
  
  
  
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" align="left">&#160;</td>
    <td class="libdoc" valign="top" align="left"><b>Eigenvalues and Schur factorization
(<m:math><m:mi mathvariant="bold-italic">QR</m:mi></m:math>&#160;algorithm)</b></td>
    <td class="libdoc" valign="top" align="left"><b>Eigenvectors from
Hessenberg form (inverse iteration)</b></td>
    <td class="libdoc" valign="top" align="left"><b>Eigenvectors from Schur factorization</b></td>
    <td class="libdoc" valign="top" align="left"><b>Sensitivities of eigenvalues and eigenvectors</b></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">real matrices</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08pef.xml">F08PEF (DHSEQR)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08pkf.xml">F08PKF (DHSEIN)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08qkf.xml">F08QKF (DTREVC)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08qlf.xml">F08QLF (DTRSNA)</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">complex matrices</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08psf.xml">F08PSF (ZHSEQR)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08pxf.xml">F08PXF (ZHSEIN)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08qxf.xml">F08QXF (ZTREVC)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08qyf.xml">F08QYF (ZTRSNA)</a></td>
   </tr>
  </tbody>
 </table></div>
</div><div class="paramtext">Finally routines are provided for reordering the Schur factorization, so that eigenvalues appear in any desired order on the diagonal of the Schur form.  The routines <a class="rout" href="../F08/f08qff.xml">F08QFF (DTREXC)</a> and <a class="rout" href="../F08/f08qtf.xml">F08QTF (ZTREXC)</a> simply swap two diagonal elements or blocks, and may need to be called repeatedly to achieve a desired order.  The routines <a class="rout" href="../F08/f08qgf.xml">F08QGF (DTRSEN)</a> and <a class="rout" href="../F08/f08quf.xml">F08QUF (ZTRSEN)</a> perform the whole reordering process for the important special case where a specified cluster of eigenvalues is to appear at the top of the Schur form; if the Schur vectors are reordered at the same time, they yield an orthonormal basis for the invariant subspace corresponding to the specified cluster of eigenvalues.  These routines can also compute the sensitivities of the cluster of eigenvalues and the invariant subspace.</div><div class="paramtext">
<div class="tablediv"><table class="standard" border="3" align="center" cellpadding="2">
  
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" align="left">&#160;</td>
    <td class="libdoc" valign="top" align="left"><b>Reorder Schur factorization</b></td>
    <td class="libdoc" valign="top" align="left"><b>Reorder Schur factorization, 
find basis for invariant 
subspace and estimate 
sensitivities</b></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">real matrices</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08qff.xml">F08QFF (DTREXC)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08qgf.xml">F08QGF (DTRSEN)</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">complex matrices</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08qtf.xml">F08QTF (ZTREXC)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08quf.xml">F08QUF (ZTRSEN)</a></td>
   </tr>
  </tbody>
 </table></div>
</div><div class="paramtext">The following sequences of calls may be used to compute various combinations of eigenvalues, Schur vectors and eigenvectors, as described in <a class="sec" href="#background9">Section 2.11</a>:
<div class="left-tablediv"><table class="frame-none">
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" style="width:33em;">real matrix, all eigenvalues and Schur factorization</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08nef.xml">F08NEF</a>, <a class="rout" href="../F08/f08nff.xml">F08NFF</a>*, <a class="rout" href="../F08/f08pef.xml">F08PEF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">real matrix, all eigenvalues and selected eigenvectors</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08nef.xml">F08NEF</a>, <a class="rout" href="../F08/f08ngf.xml">F08NGF</a>, <a class="rout" href="../F08/f08pef.xml">F08PEF</a>, <a class="rout" href="../F08/f08pkf.xml">F08PKF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">real matrix, all eigenvalues and eigenvectors (with balancing)</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08nhf.xml">F08NHF</a>*, <a class="rout" href="../F08/f08nef.xml">F08NEF</a>, <a class="rout" href="../F08/f08nff.xml">F08NFF</a>, <a class="rout" href="../F08/f08njf.xml">F08NJF</a>, <a class="rout" href="../F08/f08pef.xml">F08PEF</a>, <a class="rout" href="../F08/f08pkf.xml">F08PKF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">complex matrix, all eigenvalues and Schur factorization</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08nsf.xml">F08NSF</a>, <a class="rout" href="../F08/f08ntf.xml">F08NTF</a>*, <a class="rout" href="../F08/f08psf.xml">F08PSF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">complex matrix, all eigenvalues and selected eigenvectors</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08nsf.xml">F08NSF</a>, <a class="rout" href="../F08/f08nuf.xml">F08NUF</a>, <a class="rout" href="../F08/f08psf.xml">F08PSF</a>, <a class="rout" href="../F08/f08pxf.xml">F08PXF</a>*</td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">complex matrix, all eigenvalues and eigenvectors (with balancing)</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08nvf.xml">F08NVF</a>*, <a class="rout" href="../F08/f08nsf.xml">F08NSF</a>, <a class="rout" href="../F08/f08ntf.xml">F08NTF</a>, <a class="rout" href="../F08/f08nwf.xml">F08NWF</a>, <a class="rout" href="../F08/f08psf.xml">F08PSF</a>, <a class="rout" href="../F08/f08pxf.xml">F08PXF</a></td>
   </tr>
  </tbody>
 </table></div>
</div><h5 class="standard"><a class="sec" name="recomm_15a" id="recomm_15a"/>3.1.2.8&#160;&#160;Generalized nonsymmetric eigenvalue problems</h5>
<div class="paramtext">Routines are provided to reduce a real or complex matrix pair <m:math><m:mfenced separators=""><m:msub><m:mi>A</m:mi><m:mn>1</m:mn></m:msub><m:mo>,</m:mo><m:msub><m:mi>R</m:mi><m:mn>1</m:mn></m:msub></m:mfenced></m:math>,
where <m:math><m:msub><m:mi>A</m:mi><m:mn>1</m:mn></m:msub></m:math>&#160;is general and <m:math><m:msub><m:mi>R</m:mi><m:mn>1</m:mn></m:msub></m:math>&#160;is upper triangular, to generalized upper
Hessenberg form by orthogonal transformations <m:math><m:msub><m:mi>A</m:mi><m:mn>1</m:mn></m:msub><m:mo>=</m:mo><m:msub><m:mi>Q</m:mi><m:mn>1</m:mn></m:msub><m:mi>H</m:mi><m:msubsup><m:mi>Z</m:mi><m:mn>1</m:mn><m:mi mathvariant="normal">T</m:mi></m:msubsup></m:math>,
<m:math><m:msub><m:mi>R</m:mi><m:mn>1</m:mn></m:msub><m:mo>=</m:mo><m:msub><m:mi>Q</m:mi><m:mn>1</m:mn></m:msub><m:mi>R</m:mi><m:msubsup><m:mi>Z</m:mi><m:mn>1</m:mn><m:mi mathvariant="normal">T</m:mi></m:msubsup></m:math>,
(or by unitary transformations <m:math><m:msub><m:mi>A</m:mi><m:mn>1</m:mn></m:msub><m:mo>=</m:mo><m:msub><m:mi>Q</m:mi><m:mn>1</m:mn></m:msub><m:mi>H</m:mi><m:msubsup><m:mi>Z</m:mi><m:mn>1</m:mn><m:mi mathvariant="normal">H</m:mi></m:msubsup></m:math>,
<m:math><m:mi>R</m:mi><m:mo>=</m:mo><m:msub><m:mi>Q</m:mi><m:mn>1</m:mn></m:msub><m:msub><m:mi>R</m:mi><m:mn>1</m:mn></m:msub><m:msubsup><m:mi>Z</m:mi><m:mn>1</m:mn><m:mi mathvariant="normal">H</m:mi></m:msubsup></m:math>,
in the complex case).  These routines can optionally return <m:math><m:msub><m:mi>Q</m:mi><m:mn>1</m:mn></m:msub></m:math>&#160;and/or <m:math><m:msub><m:mi>Z</m:mi><m:mn>1</m:mn></m:msub></m:math>.  Note that to transform a general matrix pair <m:math><m:mfenced separators=""><m:mi>A</m:mi><m:mo>,</m:mo><m:mi>B</m:mi></m:mfenced></m:math>&#160;to the form <m:math><m:mfenced separators=""><m:msub><m:mi>A</m:mi><m:mn>1</m:mn></m:msub><m:mo>,</m:mo><m:msub><m:mi>R</m:mi><m:mn>1</m:mn></m:msub></m:mfenced></m:math>&#160;a <m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;factorization of <m:math><m:mi>B</m:mi></m:math>&#160;(<m:math><m:mi>B</m:mi><m:mo>=</m:mo><m:mover><m:mi>Q</m:mi><m:mo>~</m:mo></m:mover><m:msub><m:mi>R</m:mi><m:mn>1</m:mn></m:msub></m:math>) should first be performed and the matrix <m:math><m:msub><m:mi>A</m:mi><m:mn>1</m:mn></m:msub></m:math>&#160;obtained as <m:math><m:msub><m:mi>A</m:mi><m:mn>1</m:mn></m:msub><m:mo>=</m:mo><m:msup><m:mover><m:mi>Q</m:mi><m:mo>~</m:mo></m:mover><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>A</m:mi></m:math>&#160;(see <a class="sec" href="#recomm_11">Section 3.1.2.1</a> above).</div><div class="paramtext">Routines are also provided to balance a general matrix pair before reducing it to generalized Hessenberg form, as described in <a class="sec" href="#background9b2">Section 2.14.8</a>.  Companion routines are provided to transform vectors of the balanced pair to those of the original matrix pair.
<div class="tablediv"><table class="standard" border="3" align="center" cellpadding="2">
  
  
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" align="left">&#160;</td>
    <td class="libdoc" valign="top" align="left"><b>Reduce to generalized
Hessenberg form</b></td>
    <td class="libdoc" valign="top" align="left"><b>Balance</b></td>
    <td class="libdoc" valign="top" align="left"><b>Backtransform vectors after balancing</b></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">real matrices</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08wef.xml">F08WEF (DGGHRD)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08whf.xml">F08WHF (DGGBAL)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08wjf.xml">F08WJF (DGGBAK)</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">complex matrices</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08wsf.xml">F08WSF (ZGGHRD)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08wvf.xml">F08WVF (ZGGBAL)</a></td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08wwf.xml">F08WWF (ZGGBAK)</a></td>
   </tr>
  </tbody>
 </table></div>
</div><div class="paramtext">Routines are provided to compute the eigenvalues (as the pairs <m:math><m:mfenced separators=""><m:mi>&#945;</m:mi><m:mo>,</m:mo><m:mi>&#946;</m:mi></m:mfenced></m:math>) and all or part of the generalized Schur factorization of a generalized upper Hessenberg matrix pair.  Eigenvectors may be computed from the generalized Schur form by back-substitution.</div><div class="paramtext">Additional routines estimate the sensitivities of computed eigenvalues and eigenvectors.</div><div class="paramtext">
<div class="tablediv"><table class="standard" border="3" align="center" cellpadding="2">
  
  
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top">&#160;</td>
    <td class="libdoc" valign="top"><b>Eigenvalues and generalized
Schur factorization
(<m:math><m:mi mathvariant="bold-italic">QZ</m:mi></m:math>&#160;algorithm)</b></td>
    <td class="libdoc" valign="top"><b>Eigenvectors from generalized
Schur factorization</b></td>
    <td class="libdoc" valign="top"><b>Sensitivities of eigenvalues and eigenvectors</b></td>
   </tr><tr>
    <td class="libdoc" valign="top">real matrices</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08xef.xml">F08XEF (DHGEQZ)</a></td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08ykf.xml">F08YKF (DTGEVC)</a></td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08ylf.xml">F08YLF (DTGSNA)</a></td>
   </tr><tr>
    <td class="libdoc" valign="top">complex matrices</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08xsf.xml">F08XSF (ZHGEQZ)</a></td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08yxf.xml">F08YXF (ZTGEVC)</a></td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08yyf.xml">F08YYF (ZTGSNA)</a></td>
   </tr>
  </tbody>
 </table></div></div><div class="paramtext">Finally, routines are provided for reordering the generalized Schur factorization so that eigenvalues appear in any desired order on the diagonal of the generalized Schur form.  <a class="rout" href="../F08/f08yff.xml">F08YFF (DTGEXC)</a> and <a class="rout" href="../F08/f08ytf.xml">F08YTF (ZTGEXC)</a> simply swap two diagonal elements or blocks, and may need to be called repeatedly to achieve a desired order.  <a class="rout" href="../F08/f08ygf.xml">F08YGF (DTGSEN)</a> and <a class="rout" href="../F08/f08yuf.xml">F08YUF (ZTGSEN)</a> perform the whole reordering process for the important special case where a specified cluster of eigenvalues is to appear at the top of the generalized Schur form; if the Schur vectors are reordered at the same time, they yield an orthonormal basis for the deflating subspace corresponding to the specified cluster of eigenvalues.  These routines can also compute the sensitivities of the cluster of eigenvalues and the deflating subspace.
<div class="tablediv"><table class="standard" border="3" align="center" cellpadding="2">
  
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top">&#160;</td>
    <td class="libdoc" valign="top"><b>Reorder generalized Schur factorization</b></td>
    <td class="libdoc" valign="top"><b>Reorder generalized Schur factorization, find basis for deflating subspace and estimate sensitivites</b></td>
   </tr><tr>
    <td class="libdoc" valign="top">real matrices</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08yff.xml">F08YFF (DTGEXC)</a></td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08ygf.xml">F08YGF (DTGSEN)</a></td>
   </tr><tr>
    <td class="libdoc" valign="top">complex matrices</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08ytf.xml">F08YTF (ZTGEXC)</a></td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08yuf.xml">F08YUF (ZTGSEN)</a></td>
   </tr>
  </tbody>
 </table></div>
</div><div class="paramtext">The following sequences of calls may be used to compute various combinations of eigenvalues, generalized Schur vectors and eigenvectors
<div class="left-tablediv"><table class="frame-none">
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" style="width:33em;">real matrix pair, all eigenvalues (with balancing)</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08aef.xml">F08AEF</a>, <a class="rout" href="../F08/f08agf.xml">F08AGF</a>, <a class="rout" href="../F08/f08wef.xml">F08WEF</a>, <a class="rout" href="../F08/f08whf.xml">F08WHF</a>, <a class="rout" href="../F08/f08xef.xml">F08XEF</a>*</td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">real matrix pair, all eigenvalues and generalized Schur factorization</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08aef.xml">F08AEF</a>, <a class="rout" href="../F08/f08aff.xml">F08AFF</a>, <a class="rout" href="../F08/f08agf.xml">F08AGF</a>, <a class="rout" href="../F08/f08wef.xml">F08WEF</a>, <a class="rout" href="../F08/f08xef.xml">F08XEF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">real matrix pair, all eigenvalues and eigenvectors (with balancing)</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F06/f06qff.xml">F06QFF</a>, <a class="rout" href="../F06/f06qhf.xml">F06QHF</a>, <a class="rout" href="../F08/f08aef.xml">F08AEF</a>, <a class="rout" href="../F08/f08aff.xml">F08AFF</a>, <a class="rout" href="../F08/f08agf.xml">F08AGF</a>, <a class="rout" href="../F08/f08wef.xml">F08WEF</a>, <a class="rout" href="../F08/f08whf.xml">F08WHF</a>, <a class="rout" href="../F08/f08xef.xml">F08XEF</a>, <a class="rout" href="../F08/f08ykf.xml">F08YKF</a>*, <a class="rout" href="../F08/f08wjf.xml">F08WJF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">complex matrix pair, all eigenvalues (with balancing)</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08asf.xml">F08ASF</a>, <a class="rout" href="../F08/f08auf.xml">F08AUF</a>, <a class="rout" href="../F08/f08wsf.xml">F08WSF</a>, <a class="rout" href="../F08/f08wvf.xml">F08WVF</a>, <a class="rout" href="../F08/f08xsf.xml">F08XSF</a>*</td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">complex matrix pair, all eigenvalues and generalized Schur factorization</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F08/f08asf.xml">F08ASF</a>, <a class="rout" href="../F08/f08atf.xml">F08ATF</a>, <a class="rout" href="../F08/f08auf.xml">F08AUF</a>, <a class="rout" href="../F08/f08wsf.xml">F08WSF</a>, <a class="rout" href="../F08/f08xsf.xml">F08XSF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" style="width:33em;">complex matrix pair, all eigenvalues and eigenvectors (with balancing)</td>
    <td class="libdoc" valign="top"><a class="rout" href="../F06/f06tff.xml">F06TFF</a>, <a class="rout" href="../F06/f06thf.xml">F06THF</a>, <a class="rout" href="../F08/f08asf.xml">F08ASF</a>, <a class="rout" href="../F08/f08atf.xml">F08ATF</a>, <a class="rout" href="../F08/f08auf.xml">F08AUF</a>, <a class="rout" href="../F08/f08wsf.xml">F08WSF</a>, <a class="rout" href="../F08/f08wvf.xml">F08WVF</a>, <a class="rout" href="../F08/f08xsf.xml">F08XSF</a>, <a class="rout" href="../F08/f08yxf.xml">F08YXF</a>*, <a class="rout" href="../F08/f08wwf.xml">F08WWF</a></td>
   </tr>
  </tbody>
 </table></div>
</div><h5 class="standard"><a class="sec" name="recomm_16" id="recomm_16"/>3.1.2.9&#160;&#160;The Sylvester equation and the generalized Sylvester equation</h5>
<div class="paramtext">Routines are provided to solve the real or complex Sylvester equation <m:math><m:mi>A</m:mi><m:mi>X</m:mi><m:mo>&#177;</m:mo><m:mi>X</m:mi><m:mi>B</m:mi><m:mo>=</m:mo><m:mi>C</m:mi></m:math>, where <m:math><m:mi>A</m:mi></m:math>&#160;and <m:math><m:mi>B</m:mi></m:math>&#160;are upper quasi-triangular if real, or upper triangular if complex.  To solve the general form of the Sylvester equation in which <m:math><m:mi>A</m:mi></m:math>&#160;and <m:math><m:mi>B</m:mi></m:math>&#160;are general square matrices, <m:math><m:mi>A</m:mi></m:math>&#160;and <m:math><m:mi>B</m:mi></m:math>&#160;must be reduced to upper (quasi-) triangular form by the Schur factorization, using routines described in <a class="sec" href="#recomm_15">Section 3.1.2.7</a>.  For more details, see the documents for the routines listed below.</div><div class="paramtext">
<div class="tablediv"><table class="standard" border="3" align="center" cellpadding="2">
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" align="left">&#160;</td>
    <td class="libdoc" valign="top" align="left"><b>Solve the Sylvester equation</b></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">real matrices</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08qhf.xml">F08QHF (DTRSYL)</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">complex matrices</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08qvf.xml">F08QVF (ZTRSYL)</a></td>
   </tr>
  </tbody>
 </table></div>
</div><div class="paramtext">Routines are also provided to solve the real or complex generalized Sylvester equations

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>A</m:mi><m:mi>R</m:mi><m:mo>-</m:mo><m:mi>L</m:mi><m:mi>B</m:mi><m:mo>=</m:mo><m:mi>C</m:mi>
 <m:mtext>, &#8195; &#8203;</m:mtext>
 <m:mi>D</m:mi><m:mi>R</m:mi><m:mo>-</m:mo><m:mi>L</m:mi><m:mi>E</m:mi><m:mo>=</m:mo><m:mi>F</m:mi>
 <m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

where the pairs <m:math><m:mfenced separators=""><m:mi>A</m:mi><m:mo>,</m:mo><m:mi>D</m:mi></m:mfenced></m:math>&#160;and <m:math><m:mfenced separators=""><m:mi>B</m:mi><m:mo>,</m:mo><m:mi>E</m:mi></m:mfenced></m:math>&#160;are in generalized Schur form.  To solve the general form of the generalized Sylvester equation in which <m:math><m:mfenced separators=""><m:mi>A</m:mi><m:mo>,</m:mo><m:mi>D</m:mi></m:mfenced></m:math>&#160;and <m:math><m:mfenced separators=""><m:mi>B</m:mi><m:mo>,</m:mo><m:mi>E</m:mi></m:mfenced></m:math>&#160;are general matrix pairs, <m:math><m:mfenced separators=""><m:mi>A</m:mi><m:mo>,</m:mo><m:mi>D</m:mi></m:mfenced></m:math>&#160;and <m:math><m:mfenced separators=""><m:mi>B</m:mi><m:mo>,</m:mo><m:mi>E</m:mi></m:mfenced></m:math>&#160;must first be reduced to generalized Schur form.
<div class="tablediv"><table class="standard" border="3" align="center" cellpadding="2">
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" align="left">&#160;</td>
    <td class="libdoc" valign="top" align="left"><b>Solve the generalized Sylvester equation</b></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">real matrices</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08yhf.xml">F08YHF (DTGSYL)</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">complex matrices</td>
    <td class="libdoc" valign="top" align="left"><a class="rout" href="../F08/f08yvf.xml">F08YVF (ZTGSYL)</a></td>
   </tr>
  </tbody>
 </table></div>
</div><h3 class="standard"><a class="sec" name="recomm_2" id="recomm_2"/>3.2&#160;&#160;NAG Names and LAPACK Names</h3>
<div class="paramtext">As well as the NAG routine name (beginning F08), the tables in <a class="sec" href="#recomm_1">Section 3.1</a> show the LAPACK routine names in double precision.</div><div class="paramtext">The routines may be called either by their NAG or LAPACK names. When using the NAG Library, the double precision form of the LAPACK name must be used (beginning with D- or Z-).</div><div class="paramtext">References to <a class="chap" href="../F08/f08conts.xml">Chapter F08</a> routines in the manual normally include the LAPACK double precision names, for example <a class="rout" href="../F08/f08aef.xml">F08AEF (DGEQRF)</a>.  The LAPACK routine names follow a simple 
scheme (which is similar to that used for the BLAS in <a class="chap" href="../F06/f06conts.xml">Chapter F06</a>).
  
Each name has the structure <b>XYYZZZ</b>, where the components have the following meanings:
<table class="standard-100"><tr>
<td style="width:1.5em;" valign="baseline">&#8211;</td>
<td valign="top">the initial letter <b>X</b> indicates the data type (real or complex) and precision:
 <table class="standard-100"><tr>
<td style="width:2.1em;" valign="baseline">S</td>
<td valign="top">&#8211; real, single precision (in Fortran 77, <span class="mono">REAL</span>)</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">D</td>
<td valign="top">&#8211; real, double precision (in Fortran 77, <span class="mono">DOUBLE PRECISION</span>)</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">C</td>
<td valign="top">&#8211; complex, single precision (in Fortran 77, <span class="mono">COMPLEX</span>)</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">Z</td>
<td valign="top">&#8211; complex, double precision (in Fortran 77, <span class="mono">COMPLEX*16 or DOUBLE COMPLEX</span>)</td>
</tr></table></td>
</tr><tr>
<td style="width:1.5em;" valign="baseline">&#8211;</td>
<td valign="top">the second and third letters <b>YY</b> indicate the type of the matrix <m:math><m:mi>A</m:mi></m:math>&#160;or matrix pair <m:math><m:mfenced separators=""><m:mi>A</m:mi><m:mo>,</m:mo><m:mi>B</m:mi></m:mfenced></m:math>&#160;(and in some cases the storage scheme):
 <table class="standard-100"><tr>
<td style="width:2.1em;" valign="baseline">BD</td>
<td valign="top">&#8211; bidiagonal</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">DI</td>
<td valign="top">&#8211; diagonal</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">GB</td>
<td valign="top">&#8211; general band</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">GE</td>
<td valign="top">&#8211; general</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">GG</td>
<td valign="top">&#8211; general pair (<m:math><m:mi>B</m:mi></m:math>&#160;may be triangular)</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">HG</td>
<td valign="top">&#8211; generalized upper Hessenberg</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">HS</td>
<td valign="top">&#8211; upper Hessenberg</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">OP</td>
<td valign="top">&#8211; (real) orthogonal (packed storage)</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">UP</td>
<td valign="top">&#8211; (complex) unitary (packed storage)</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">OR</td>
<td valign="top">&#8211; (real) orthogonal</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">UN</td>
<td valign="top">&#8211; (complex) unitary</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">PT</td>
<td valign="top">&#8211; symmetric or Hermitian positive definite tridiagonal</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">SB</td>
<td valign="top">&#8211; (real) symmetric band</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">HB</td>
<td valign="top">&#8211; (complex) Hermitian band</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">SP</td>
<td valign="top">&#8211; symmetric (packed storage)</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">HP</td>
<td valign="top">&#8211; Hermitian (packed storage)</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">ST</td>
<td valign="top">&#8211; (real) symmetric tridiagonal</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">SY</td>
<td valign="top">&#8211; symmetric</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">HE</td>
<td valign="top">&#8211; Hermitian</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">TG</td>
<td valign="top">&#8211; triangular pair (one may be quasi-triangular)</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">TR</td>
<td valign="top">&#8211; triangular (or quasi-triangular)</td>
</tr></table></td>
</tr><tr>
<td style="width:1.5em;" valign="baseline">&#8211;</td>
<td valign="top">the last three letters <b>ZZZ</b> indicate the computation performed.  For example, QRF is a <m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;factorization.</td>
</tr></table>
</div><div class="paramtext">Thus the routine <a class="rout" href="../F08/f08aef.xml">DGEQRF</a> performs a <m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;factorization of a real general 
matrix; the corresponding routine for a complex general matrix is <a class="rout" href="../F08/f08asf.xml">ZGEQRF</a>.</div><h3 class="standard"><a class="sec" name="recomm_3" id="recomm_3"/>3.3&#160;&#160;Matrix Storage Schemes</h3>
<div class="paramtext">In this chapter the following storage schemes are used for matrices:
<ul class="listind"><li class="listind">&#8211; conventional storage in a two-dimensional array;</li><li class="listind">&#8211; packed storage for symmetric or Hermitian matrices;</li><li class="listind">&#8211; packed storage for orthogonal or unitary matrices;</li><li class="listind">&#8211; band storage for general, symmetric or Hermitian band matrices;</li><li class="listind">&#8211; storage of bidiagonal, symmetric or Hermitian tridiagonal matrices in two one-dimensional arrays.</li></ul>
</div><div class="paramtext">These storage schemes are compatible with those used in 
<a class="chap" href="../F06/f06conts.xml">Chapters F06</a> and <a class="chap" href="../F07/f07conts.xml">F07</a>,
 
but different schemes for packed, band and tridiagonal storage are used in a few older routines in <a class="chap" href="../F01/f01conts.xml">Chapters F01</a>, <a class="chap" href="../F02/f02conts.xml">F02</a>, <a class="chap" href="../F03/f03conts.xml">F03</a> and <a class="chap" href="../F04/f04conts.xml">F04</a>.</div><h4 class="standard"><a class="sec" name="recomm_31" id="recomm_31"/>3.3.1&#160;&#160;Conventional storage</h4>
<div class="paramtext">Please see <a class="sec" href="../F07/f07intro.xml#recomm_31">Section 3.3.1</a> in  the F07 Chapter Introduction for full details.</div><h4 class="standard"><a class="sec" name="recomm_32" id="recomm_32"/>3.3.2&#160;&#160;Packed storage</h4>
<div class="paramtext">Please see <a class="sec" href="../F07/f07intro.xml#recomm32">Section 3.3.2</a> in  the F07 Chapter Introduction for full details.</div><h4 class="standard"><a class="sec" name="recomm_33" id="recomm_33"/>3.3.3&#160;&#160;Band storage</h4>
<div class="paramtext">Please see <a class="sec" href="../F07/f07intro.xml#recomm_33">Section 3.3.4</a> in  the F07 Chapter Introduction for full details.</div><h4 class="standard"><a class="sec" name="recomm_34" id="recomm_34"/>3.3.4&#160;&#160;Tridiagonal and bidiagonal matrices</h4>
<div class="paramtext">A symmetric tridiagonal or bidiagonal matrix is stored in two one-dimensional arrays, one of length <m:math><m:mi>n</m:mi></m:math>&#160;containing the diagonal elements, and one of length <m:math><m:mi>n</m:mi><m:mo>-</m:mo><m:mn>1</m:mn></m:math>&#160;containing the off-diagonal elements.  (Older routines in <a class="chap" href="../F02/f02conts.xml">Chapter F02</a> store the off-diagonal elements in elements <m:math><m:mn>2</m:mn><m:mo>:</m:mo><m:mi>n</m:mi></m:math>&#160;of a vector of length <m:math><m:mi>n</m:mi></m:math>.)</div><h4 class="standard"><a class="sec" name="recomm_35" id="recomm_35"/>3.3.5&#160;&#160;Real diagonal elements of complex matrices</h4>
<div class="paramtext">Please see <a class="sec" href="../F07/f07intro.xml#recomm_35">Section 3.3.6</a> in  the F07 Chapter Introduction for full details.</div><h4 class="standard"><a class="sec" name="recomm_36" id="recomm_36"/>3.3.6&#160;&#160;Representation of orthogonal or unitary matrices</h4>
<div class="paramtext">A real orthogonal or complex unitary matrix (usually denoted <m:math><m:mi>Q</m:mi></m:math>) is often represented in the NAG Library as a product of <span class="italic">elementary reflectors</span> &#8211; also referred to as <span class="italic">elementary Householder matrices</span> (usually denoted <m:math><m:msub><m:mi>H</m:mi><m:mi>i</m:mi></m:msub></m:math>).  For example,

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>Q</m:mi>
 <m:mo>=</m:mo><m:msub><m:mi>H</m:mi><m:mn>1</m:mn></m:msub><m:msub><m:mi>H</m:mi><m:mn>2</m:mn></m:msub><m:mo>&#8943;</m:mo><m:msub><m:mi>H</m:mi><m:mi>k</m:mi></m:msub><m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

You need not be aware of the details, because routines are provided to work with this representation, either to generate all or part of <m:math><m:mi>Q</m:mi></m:math>&#160;explicitly, or to multiply a given matrix by <m:math><m:mi>Q</m:mi></m:math>&#160;or <m:math><m:msup><m:mi>Q</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup></m:math>&#160;(<m:math><m:msup><m:mi>Q</m:mi><m:mi mathvariant="normal">H</m:mi></m:msup></m:math>&#160;in the complex case) without forming <m:math><m:mi>Q</m:mi></m:math>&#160;explicitly.</div><div class="paramtext">Nevertheless, the following further details may occasionally be useful.</div><div class="paramtext">An elementary reflector (or elementary Householder matrix) <m:math><m:mi>H</m:mi></m:math>&#160;of order <m:math><m:mi>n</m:mi></m:math>&#160;is a unitary matrix of the form

<div class="formula-eqn"><a name="eqn4" id="eqn4"/><table class="formula-eqn"><tr><td class="formula-eqn"><m:math display="block">
<m:mi>H</m:mi><m:mo>=</m:mo><m:mi>I</m:mi><m:mo>-</m:mo><m:mi>&#964;</m:mi><m:mi>v</m:mi><m:msup><m:mi>v</m:mi><m:mi mathvariant="normal">H</m:mi></m:msup>
</m:math></td><td class="formula-eqn2">
      (4)
     </td></tr></table></div>

where <m:math><m:mi>&#964;</m:mi></m:math>&#160;is a scalar, and <m:math><m:mi>v</m:mi></m:math>&#160;is an <m:math><m:mi>n</m:mi></m:math>&#160;element vector, with <m:math><m:msup><m:mfenced open="|" close="|" separators=""><m:mi>&#964;</m:mi></m:mfenced><m:mn>2</m:mn></m:msup><m:msup><m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>v</m:mi></m:mfenced><m:mn>2</m:mn></m:msub><m:mn>2</m:mn></m:msup><m:mo>=</m:mo><m:mn>2</m:mn><m:mo>&#215;</m:mo><m:mrow><m:mi>Re</m:mi><m:mfenced separators=""><m:mi>&#964;</m:mi></m:mfenced></m:mrow></m:math>; <m:math><m:mi>v</m:mi></m:math>&#160;is often referred to as the <span class="italic">Householder vector</span>.  Often <m:math><m:mi>v</m:mi></m:math>&#160;has several leading or trailing zero elements, but for the purpose of this discussion assume that <m:math><m:mi>H</m:mi></m:math>&#160;has no such special structure.</div><div class="paramtext">There is some redundancy in the representation <m:math><m:mfenced separators=""><m:mn>4</m:mn></m:mfenced></m:math>, which can be removed in various ways.  The representation used in <a class="chap" href="../F08/f08conts.xml">Chapter F08</a> and in LAPACK (which differs from those used in some of the routines in 
<a class="chap" href="../F01/f01conts.xml">Chapters F01</a>, <a class="chap" href="../F02/f02conts.xml">F02</a>, <a class="chap" href="../F04/f04conts.xml">F04</a> and <a class="chap" href="../F06/f06conts.xml">F06</a>)
 
sets <m:math><m:msub><m:mi>v</m:mi><m:mn>1</m:mn></m:msub><m:mo>=</m:mo><m:mn>1</m:mn></m:math>; hence <m:math><m:msub><m:mi>v</m:mi><m:mn>1</m:mn></m:msub></m:math>&#160;need not be stored.  In real arithmetic, <m:math><m:mn>1</m:mn><m:mo>&#8804;</m:mo><m:mi>&#964;</m:mi><m:mo>&#8804;</m:mo><m:mn>2</m:mn></m:math>, except that <m:math><m:mi>&#964;</m:mi><m:mo>=</m:mo><m:mn>0</m:mn></m:math>&#160;implies <m:math><m:mi>H</m:mi><m:mo>=</m:mo><m:mi>I</m:mi></m:math>.</div><div class="paramtext">In complex arithmetic, <m:math><m:mi>&#964;</m:mi></m:math>&#160;may be complex, and satisfies <m:math><m:mn>1</m:mn><m:mo>&#8804;</m:mo><m:mrow><m:mi>Re</m:mi><m:mfenced separators=""><m:mi>&#964;</m:mi></m:mfenced></m:mrow><m:mo>&#8804;</m:mo><m:mn>2</m:mn></m:math>&#160;and <m:math><m:mfenced open="|" close="|" separators=""><m:mi>&#964;</m:mi><m:mo>-</m:mo><m:mn>1</m:mn></m:mfenced><m:mo>&#8804;</m:mo><m:mn>1</m:mn></m:math>.  Thus a complex <m:math><m:mi>H</m:mi></m:math>&#160;is not Hermitian (as it is in other representations), but it is unitary, which is the important property.  The advantage of allowing <m:math><m:mi>&#964;</m:mi></m:math>&#160;to be complex is that, given an arbitrary complex vector <m:math><m:mi>x</m:mi><m:mo>,</m:mo><m:mi>H</m:mi></m:math>&#160;can be computed so that

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:msup><m:mi>H</m:mi><m:mi mathvariant="normal">H</m:mi></m:msup><m:mi>x</m:mi><m:mo>=</m:mo><m:mi>&#946;</m:mi><m:msup><m:mfenced separators=""><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>0</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:mn>0</m:mn></m:mfenced><m:mi mathvariant="normal">T</m:mi></m:msup>
</m:math></td><td class="formula2"/></tr></table></div>

with <span class="italic">real</span>
<m:math><m:mi>&#946;</m:mi></m:math>.  This is useful, for example, when reducing a complex Hermitian matrix to real symmetric tridiagonal form, or a complex rectangular matrix to real bidiagonal form.</div><h3 class="standard"><a class="sec" name="recomm_4" id="recomm_4"/>3.4&#160;&#160;Parameter Conventions</h3><h4 class="standard"><a class="sec" name="recomm_41" id="recomm_41"/>3.4.1&#160;&#160;Option parameters</h4>
<div class="paramtext">Most routines in this chapter have one or more option parameters, of type CHARACTER.  The descriptions in Section 5 of the routine documents refer only to upper case values (for example <m:math><m:mi mathvariant="normal">UPLO</m:mi><m:mo>=</m:mo><m:mtext>'U'</m:mtext></m:math>&#160;or <m:math><m:mi mathvariant="normal">UPLO</m:mi><m:mo>=</m:mo><m:mtext>'L'</m:mtext></m:math>); however in every case, the corresponding lower case characters may be supplied (with the same meaning).  Any other value is illegal.</div><div class="paramtext">A longer character string can be passed as the actual parameter, making the calling program more readable, but only the first character is significant.
(This is a feature of Fortran 77.)  For example:

<pre class="verbatim">
 CALL SSYTRD ('Upper',...)
</pre></div><h4 class="standard"><a class="sec" name="recomm_42" id="recomm_42"/>3.4.2&#160;&#160;Problem dimensions</h4>
<div class="paramtext">It is permissible for the problem dimensions (for example, M or N) to be passed as zero, in which case the computation (or part of it) is skipped.  Negative dimensions are regarded as an error.</div><h4 class="standard"><a class="sec" name="recomm_43" id="recomm_43"/>3.4.3&#160;&#160;Length of work arrays</h4>
<div class="paramtext">A number of routines implementing block algorithms require workspace sufficient to hold one block of rows or columns of the matrix if they are to achieve optimum levels of performance &#8211; for example, workspace of size <m:math><m:mi>n</m:mi><m:mo>&#215;</m:mo><m:mi>n</m:mi><m:mi>b</m:mi></m:math>, where <m:math><m:mi>n</m:mi><m:mi>b</m:mi></m:math>&#160;is the optimal block size.  In such cases, the actual declared length of the work array must be passed as a separate argument LWORK, which immediately follows WORK in the argument-list.</div><div class="paramtext">The routine will still perform correctly when less workspace is provided: it simply uses the largest block size allowed by the amount of workspace supplied, as long as this is likely to give better performance than the unblocked algorithm.  On exit, <m:math><m:mrow><m:mi mathvariant="normal">WORK</m:mi><m:mfenced separators="," open="(" close=")"><m:mn>1</m:mn></m:mfenced></m:mrow></m:math>&#160;contains the minimum value of LWORK which would allow the routine to use the optimal block size; this value of LWORK can be used for subsequent runs.</div><div class="paramtext">If LWORK indicates that there is insufficient workspace to perform the unblocked algorithm, this is regarded as an illegal value of LWORK, and is treated like any other illegal parameter value (see <a class="sec" href="#recomm_44">Section 3.4.4</a>).</div><div class="paramtext">If you are in doubt how much workspace to supply and are concerned to achieve optimal performance, supply a generous amount (assume a block size of <m:math><m:mn>64</m:mn></m:math>, say), and then examine the value of <m:math><m:mrow><m:mi mathvariant="normal">WORK</m:mi><m:mfenced separators="," open="(" close=")"><m:mn>1</m:mn></m:mfenced></m:mrow></m:math>&#160;on exit.</div><h4 class="standard"><a class="sec" name="recomm_44" id="recomm_44"/>3.4.4&#160;&#160;Error-handling and the diagnostic parameter INFO</h4>
<div class="paramtext">Routines in this chapter do not use the usual NAG Library error-handling mechanism, involving the parameter IFAIL.  Instead they have a diagnostic parameter INFO.  (Thus they preserve complete compatibility with the LAPACK specification.)</div><div class="paramtext">Whereas IFAIL is an <span class="italic">Input/Output</span> parameter and must be set before calling a routine, INFO is purely an <span class="italic">Output</span> parameter and need not be set before entry.</div><div class="paramtext">INFO indicates the success or failure of the computation, as follows:
<ul class="listind"><li class="listind"><m:math><m:mi mathvariant="normal">INFO</m:mi><m:mo>=</m:mo><m:mn>0</m:mn></m:math>: successful termination;</li><li class="listind"><m:math><m:mi mathvariant="normal">INFO</m:mi><m:mo>&gt;</m:mo><m:mn>0</m:mn></m:math>: failure in the course of computation, control returned to the calling program.</li></ul>
</div><div class="paramtext">If the routine document specifies that the routine may terminate with <m:math><m:mi mathvariant="normal">INFO</m:mi><m:mo>&gt;</m:mo><m:mn>0</m:mn></m:math>, then it is <b>essential to test INFO on exit</b> from the routine.  (This corresponds to a <span class="italic">soft failure</span> in terms of the usual NAG error-handling terminology.)  No error message is output.</div><div class="paramtext">All routines check that input parameters such as N or LDA or option parameters of type CHARACTER have permitted values.  If an illegal value of the <m:math><m:mi>i</m:mi></m:math>th parameter is detected, INFO is set to <m:math><m:mrow><m:mo>-</m:mo><m:mi>i</m:mi></m:mrow></m:math>, a message is output, and execution of the program is terminated.  (This corresponds to a <span class="italic">hard failure</span> in the usual NAG terminology.) In some implementations, especially when linking to vendor versions of LAPACK, execution of the program may continue, in which case, it is essential to test INFO on exit from the routine.</div><h2 class="standard"><a class="sec" name="dtree" id="dtree"/>4&#160;&#160;Decision Trees</h2>
<div class="paramtext">The following decision trees are principally for the computation (general purpose) routines.  See <a class="sec" href="#recomm_111a">Section 3.1.1.1</a> for tables of the driver (black box) routines.</div><h3 class="standard"><a class="sec" name="dtree1" id="dtree1"/>4.1&#160;&#160;General Purpose Routines (eigenvalues and eigenvectors)</h3>
<h3 class="sec"><a name="tree1" id="tree1"/>Tree 1: Real Symmetric Eigenvalue Problems
</h3>
<table class="dtree">
<tr>
<td class="dtentry">Are eigenvalues only required?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Are all the eigenvalues required?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Is <m:math><m:mi>A</m:mi></m:math>&#160;tridiagonal?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F08/f08jcf.xml">F08JCF</a> or <a class="rout" href="../F08/f08jff.xml">F08JFF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/><td class="dtnobar">|</td>
<td/>
<td class="dtentry">Is <m:math><m:mi>A</m:mi></m:math>&#160;band matrix?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">(<a class="rout" href="../F08/f08hef.xml">F08HEF</a> and <a class="rout" href="../F08/f08jff.xml">F08JFF</a>) or
                 <a class="rout" href="../F08/f08hcf.xml">F08HCF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/><td class="dtnobar">|</td>
<td/>
<td class="dtentry">Is one triangle of <m:math><m:mi>A</m:mi></m:math>&#160;stored as a linear array?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">(<a class="rout" href="../F08/f08gef.xml">F08GEF</a> and <a class="rout" href="../F08/f08jff.xml">F08JFF</a>) or
                   <a class="rout" href="../F08/f08gcf.xml">F08GCF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/><td class="dtnobar">|</td>
<td/>
<td class="dtentry">(<a class="rout" href="../F08/f08fef.xml">F08FEF</a> and <a class="rout" href="../F08/f08jff.xml">F08JFF</a>) or
                   <a class="rout" href="../F08/f08faf.xml">F08FAF</a> or <a class="rout" href="../F08/f08fcf.xml">F08FCF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry">Is <m:math><m:mi>A</m:mi></m:math>&#160;tridiagonal?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F08/f08jjf.xml">F08JJF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry">Is <m:math><m:mi>A</m:mi></m:math>&#160;a band matrix?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F08/f08hef.xml">F08HEF</a> and <a class="rout" href="../F08/f08jjf.xml">F08JJF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry">Is one triangle of <m:math><m:mi>A</m:mi></m:math>&#160;stored as a linear array?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F08/f08gef.xml">F08GEF</a> and <a class="rout" href="../F08/f08jjf.xml">F08JJF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry">(<a class="rout" href="../F08/f08fef.xml">F08FEF</a> and <a class="rout" href="../F08/f08jjf.xml">F08JJF</a>) or <a class="rout" href="../F08/f08fbf.xml">F08FBF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry">Are all eigenvalues and eigenvectors required?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Is <m:math><m:mi>A</m:mi></m:math>&#160;tridiagonal?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F08/f08jef.xml">F08JEF</a>, <a class="rout" href="../F08/f08jcf.xml">F08JCF</a>, <a class="rout" href="../F08/f08jhf.xml">F08JHF</a> or <a class="rout" href="../F08/f08jlf.xml">F08JLF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry">Is <m:math><m:mi>A</m:mi></m:math>&#160;a band matrix?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">(<a class="rout" href="../F08/f08hef.xml">F08HEF</a> and <a class="rout" href="../F08/f08jef.xml">F08JEF</a>) or
                 <a class="rout" href="../F08/f08hcf.xml">F08HCF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry">Is one triangle of <m:math><m:mi>A</m:mi></m:math>&#160;stored as a linear array?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">(<a class="rout" href="../F08/f08gef.xml">F08GEF</a>, <a class="rout" href="../F08/f08gff.xml">F08GFF</a> and <a class="rout" href="../F08/f08jef.xml">F08JEF</a>)  or
                   <a class="rout" href="../F08/f08gcf.xml">F08GCF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry">(<a class="rout" href="../F08/f08fef.xml">F08FEF</a>, <a class="rout" href="../F08/f08fff.xml">F08FFF</a> and <a class="rout" href="../F08/f08jef.xml">F08JEF</a>) or
                   <a class="rout" href="../F08/f08faf.xml">F08FAF</a> or <a class="rout" href="../F08/f08fcf.xml">F08FCF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry">Is <m:math><m:mi>A</m:mi></m:math>&#160;tridiagonal?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F08/f08jjf.xml">F08JJF</a> and <a class="rout" href="../F08/f08jkf.xml">F08JKF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry">Is one triangle of <m:math><m:mi>A</m:mi></m:math>&#160;stored as a linear array?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F08/f08gef.xml">F08GEF</a>, <a class="rout" href="../F08/f08jjf.xml">F08JJF</a>, <a class="rout" href="../F08/f08jkf.xml">F08JKF</a> and <a class="rout" href="../F08/f08ggf.xml">F08GGF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry">(<a class="rout" href="../F08/f08fef.xml">F08FEF</a>, <a class="rout" href="../F08/f08jjf.xml">F08JJF</a>, <a class="rout" href="../F08/f08jkf.xml">F08JKF</a> and <a class="rout" href="../F08/f08fgf.xml">F08FGF</a>) or <a class="rout" href="../F08/f08fbf.xml">F08FBF</a></td></tr></table><h3 class="sec"><a name="tree2" id="tree2"/>Tree 2: Real Generalized Symmetric-definite Eigenvalue Problems
</h3>
<table class="dtree">
<tr>
<td class="dtentry">Are eigenvalues only required?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Are all the eigenvalues required?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Are <m:math><m:mi>A</m:mi></m:math>&#160;and <m:math><m:mi>B</m:mi></m:math>&#160;band matrices?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F08/f08uff.xml">F08UFF</a>, <a class="rout" href="../F08/f08uef.xml">F08UEF</a>, <a class="rout" href="../F08/f08hef.xml">F08HEF</a> and <a class="rout" href="../F08/f08jff.xml">F08JFF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/><td class="dtnobar">|</td>
<td/>
<td class="dtentry">Are <m:math><m:mi>A</m:mi></m:math>&#160;and <m:math><m:mi>B</m:mi></m:math>&#160;stored with one triangle as a linear array?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F07/f07gdf.xml">F07GDF</a>, <a class="rout" href="../F08/f08tef.xml">F08TEF</a>, <a class="rout" href="../F08/f08gef.xml">F08GEF</a> and <a class="rout" href="../F08/f08jff.xml">F08JFF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/><td class="dtnobar">|</td>
<td/>
<td class="dtentry"><a class="rout" href="../F07/f07fdf.xml">F07FDF</a>, <a class="rout" href="../F08/f08sef.xml">F08SEF</a>, <a class="rout" href="../F08/f08fef.xml">F08FEF</a> and <a class="rout" href="../F08/f08jff.xml">F08JFF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry">Are <m:math><m:mi>A</m:mi></m:math>&#160;and <m:math><m:mi>B</m:mi></m:math>&#160;band matrices?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F08/f08uff.xml">F08UFF</a>, <a class="rout" href="../F08/f08uef.xml">F08UEF</a>, <a class="rout" href="../F08/f08hef.xml">F08HEF</a> and <a class="rout" href="../F08/f08jjf.xml">F08JJF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry">Are <m:math><m:mi>A</m:mi></m:math>&#160;and <m:math><m:mi>B</m:mi></m:math>&#160;stored with one triangle as a linear array?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F07/f07gdf.xml">F07GDF</a>, <a class="rout" href="../F08/f08tef.xml">F08TEF</a>, <a class="rout" href="../F08/f08gef.xml">F08GEF</a> and <a class="rout" href="../F08/f08jjf.xml">F08JJF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry"><a class="rout" href="../F07/f07fdf.xml">F07FDF</a>, <a class="rout" href="../F08/f08sef.xml">F08SEF</a>, <a class="rout" href="../F08/f08gef.xml">F08GEF</a> and <a class="rout" href="../F08/f08jjf.xml">F08JJF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry">Are all eigenvalues and eigenvectors required?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Are <m:math><m:mi>A</m:mi></m:math>&#160;and <m:math><m:mi>B</m:mi></m:math>&#160;stored with one triangle as a linear array?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F07/f07gdf.xml">F07GDF</a>, <a class="rout" href="../F08/f08tef.xml">F08TEF</a>, <a class="rout" href="../F08/f08gef.xml">F08GEF</a>, <a class="rout" href="../F08/f08gff.xml">F08GFF</a>, <a class="rout" href="../F08/f08jef.xml">F08JEF</a> and <a class="rout" href="../F06/f06plf.xml">F06PLF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry"><a class="rout" href="../F07/f07fdf.xml">F07FDF</a>, <a class="rout" href="../F08/f08sef.xml">F08SEF</a>, <a class="rout" href="../F08/f08fef.xml">F08FEF</a>, <a class="rout" href="../F08/f08fff.xml">F08FFF</a>, <a class="rout" href="../F08/f08jef.xml">F08JEF</a> and <a class="rout" href="../F06/f06yjf.xml">F06YJF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry">Are <m:math><m:mi>A</m:mi></m:math>&#160;and <m:math><m:mi>B</m:mi></m:math>&#160;band matrices?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F08/f08uff.xml">F08UFF</a>, <a class="rout" href="../F08/f08uef.xml">F08UEF</a>, <a class="rout" href="../F08/f08hef.xml">F08HEF</a>, <a class="rout" href="../F08/f08jkf.xml">F08JKF</a> and <a class="rout" href="../F06/f06yjf.xml">F06YJF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry">Are <m:math><m:mi>A</m:mi></m:math>&#160;and <m:math><m:mi>B</m:mi></m:math>&#160;stored with one triangle as a linear array?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F07/f07gdf.xml">F07GDF</a>, <a class="rout" href="../F08/f08tef.xml">F08TEF</a>, <a class="rout" href="../F08/f08gef.xml">F08GEF</a>, <a class="rout" href="../F08/f08jjf.xml">F08JJF</a>, <a class="rout" href="../F08/f08jkf.xml">F08JKF</a>, <a class="rout" href="../F08/f08ggf.xml">F08GGF</a> and <a class="rout" href="../F06/f06plf.xml">F06PLF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry"><a class="rout" href="../F07/f07fdf.xml">F07FDF</a>, <a class="rout" href="../F08/f08sef.xml">F08SEF</a>, <a class="rout" href="../F08/f08fef.xml">F08FEF</a>, <a class="rout" href="../F08/f08jjf.xml">F08JJF</a>, <a class="rout" href="../F08/f08jkf.xml">F08JKF</a>, <a class="rout" href="../F08/f08fgf.xml">F08FGF</a> and <a class="rout" href="../F06/f06yjf.xml">F06YJF</a></td></tr></table><div class="paramtext"><b>Note:</b> the routines for band matrices only handle the problem <m:math><m:mi>A</m:mi><m:mi>x</m:mi><m:mo>=</m:mo><m:mi>&#955;</m:mi><m:mi>B</m:mi><m:mi>x</m:mi></m:math>; the other routines handle all three types of problems (<m:math><m:mi>A</m:mi><m:mi>x</m:mi><m:mo>=</m:mo><m:mi>&#955;</m:mi><m:mi>B</m:mi><m:mi>x</m:mi></m:math>, <m:math><m:mi>A</m:mi><m:mi>B</m:mi><m:mi>x</m:mi><m:mo>=</m:mo><m:mi>&#955;</m:mi><m:mi>x</m:mi></m:math>&#160;or <m:math><m:mi>B</m:mi><m:mi>A</m:mi><m:mi>x</m:mi><m:mo>=</m:mo><m:mi>&#955;</m:mi><m:mi>x</m:mi></m:math>) except that, if the problem is <m:math><m:mi>B</m:mi><m:mi>A</m:mi><m:mi>x</m:mi><m:mo>=</m:mo><m:mi>&#955;</m:mi><m:mi>x</m:mi></m:math>&#160;and eigenvectors are required, <a class="rout" href="../F06/f06phf.xml">F06PHF</a> must be used instead of <a class="rout" href="../F06/f06plf.xml">F06PLF</a> and <a class="rout" href="../F06/f06yff.xml">F06YFF</a> instead of <a class="rout" href="../F06/f06yjf.xml">F06YJF</a>.</div>
<h3 class="sec"><a name="tree3" id="tree3"/>Tree 3: Real Nonsymmetric Eigenvalue Problems
</h3>
<table class="dtree">
<tr>
<td class="dtentry">Are eigenvalues required?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Is <m:math><m:mi>A</m:mi></m:math>&#160;an upper Hessenberg matrix?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F08/f08pef.xml">F08PEF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry"><a class="rout" href="../F08/f08naf.xml">F08NAF</a> or <a class="rout" href="../F08/f08nbf.xml">F08NBF</a> or (<a class="rout" href="../F08/f08nhf.xml">F08NHF</a>, <a class="rout" href="../F08/f08nef.xml">F08NEF</a> and <a class="rout" href="../F08/f08pef.xml">F08PEF</a>)</td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry">Is the Schur factorization of <m:math><m:mi>A</m:mi></m:math>&#160;required?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Is <m:math><m:mi>A</m:mi></m:math>&#160;an upper Hessenberg matrix?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F08/f08pef.xml">F08PEF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry"><a class="rout" href="../F08/f08nbf.xml">F08NBF</a> or (<a class="rout" href="../F08/f08nef.xml">F08NEF</a>, <a class="rout" href="../F08/f08nff.xml">F08NFF</a>, <a class="rout" href="../F08/f08pef.xml">F08PEF</a> or <a class="rout" href="../F08/f08njf.xml">F08NJF</a>)</td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry">Are all eigenvectors required?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Is <m:math><m:mi>A</m:mi></m:math>&#160;an upper Hessenberg matrix?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F08/f08pef.xml">F08PEF</a> or <a class="rout" href="../F08/f08qkf.xml">F08QKF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry"><a class="rout" href="../F08/f08naf.xml">F08NAF</a> or <a class="rout" href="../F08/f08nbf.xml">F08NBF</a> or (<a class="rout" href="../F08/f08nhf.xml">F08NHF</a>, <a class="rout" href="../F08/f08nef.xml">F08NEF</a>, <a class="rout" href="../F08/f08nff.xml">F08NFF</a>, <a class="rout" href="../F08/f08pef.xml">F08PEF</a>, <a class="rout" href="../F08/f08qkf.xml">F08QKF</a> or <a class="rout" href="../F08/f08njf.xml">F08NJF</a>)</td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry">Is <m:math><m:mi>A</m:mi></m:math>&#160;an upper Hessenberg matrix?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F08/f08pef.xml">F08PEF</a> or <a class="rout" href="../F08/f08pkf.xml">F08PKF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry"><a class="rout" href="../F08/f08nhf.xml">F08NHF</a>, <a class="rout" href="../F08/f08nef.xml">F08NEF</a>, <a class="rout" href="../F08/f08pef.xml">F08PEF</a>, <a class="rout" href="../F08/f08pkf.xml">F08PKF</a>, <a class="rout" href="../F08/f08ngf.xml">F08NGF</a> or <a class="rout" href="../F08/f08njf.xml">F08NJF</a></td></tr></table><h3 class="sec"><a name="tree4" id="tree4"/>Tree 4: Real Generalized Nonsymmetric Eigenvalue Problems
</h3>
<table class="dtree">
<tr>
<td class="dtentry">Are eigenvalues only required?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Are <m:math><m:mi>A</m:mi></m:math>&#160;and <m:math><m:mi>B</m:mi></m:math>&#160;in generalized upper Hessenberg form?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F08/f08xef.xml">F08XEF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry"><a class="rout" href="../F08/f08whf.xml">F08WHF</a>, <a class="rout" href="../F08/f08aef.xml">F08AEF</a>, <a class="rout" href="../F08/f08agf.xml">F08AGF</a>, <a class="rout" href="../F08/f08wef.xml">F08WEF</a> and <a class="rout" href="../F08/f08xef.xml">F08XEF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry">Is the generalized Schur factorization of <m:math><m:mi>A</m:mi></m:math>&#160;and <m:math><m:mi>B</m:mi></m:math>&#160;required?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Are <m:math><m:mi>A</m:mi></m:math>&#160;and <m:math><m:mi>B</m:mi></m:math>&#160;in generalized upper Hessenberg form?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F08/f08xef.xml">F08XEF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry"><a class="rout" href="../F08/f08aef.xml">F08AEF</a>, <a class="rout" href="../F08/f08agf.xml">F08AGF</a>, <a class="rout" href="../F06/f06qhf.xml">F06QHF</a>, <a class="rout" href="../F06/f06qff.xml">F06QFF</a>, <a class="rout" href="../F08/f08aff.xml">F08AFF</a>, <a class="rout" href="../F08/f08wef.xml">F08WEF</a>, <a class="rout" href="../F08/f08xef.xml">F08XEF</a> and <a class="rout" href="../F08/f08ykf.xml">F08YKF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry">Are <m:math><m:mi>A</m:mi></m:math>&#160;and <m:math><m:mi>B</m:mi></m:math>&#160;in generalized upper Hessenberg form?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F08/f08xef.xml">F08XEF</a> and <a class="rout" href="../F08/f08ykf.xml">F08YKF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry"><a class="rout" href="../F08/f08whf.xml">F08WHF</a>, <a class="rout" href="../F08/f08aef.xml">F08AEF</a>, <a class="rout" href="../F08/f08agf.xml">F08AGF</a>, <a class="rout" href="../F06/f06qhf.xml">F06QHF</a>, <a class="rout" href="../F06/f06qff.xml">F06QFF</a>, <a class="rout" href="../F08/f08aff.xml">F08AFF</a>, <a class="rout" href="../F08/f08wef.xml">F08WEF</a>, <a class="rout" href="../F08/f08xef.xml">F08XEF</a>, <a class="rout" href="../F08/f08ykf.xml">F08YKF</a> and <a class="rout" href="../F08/f08wjf.xml">F08WJF</a></td></tr></table><h3 class="sec"><a name="tree5" id="tree5"/>Tree 5: Complex Hermitian Eigenvalue Problems
</h3>
<table class="dtree">
<tr>
<td class="dtentry">Are eigenvalues only required?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Are all the eigenvalues required?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Is <m:math><m:mi>A</m:mi></m:math>&#160;a band matrix?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">(<a class="rout" href="../F08/f08hsf.xml">F08HSF</a> and <a class="rout" href="../F08/f08jff.xml">F08JFF</a>) or
               <a class="rout" href="../F08/f08hqf.xml">F08HQF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/><td class="dtnobar">|</td>
<td/>
<td class="dtentry">Is one triangle of <m:math><m:mi>A</m:mi></m:math>&#160;stored as a linear array?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">(<a class="rout" href="../F08/f08gsf.xml">F08GSF</a> and <a class="rout" href="../F08/f08jff.xml">F08JFF</a>) or
                 <a class="rout" href="../F08/f08gqf.xml">F08GQF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/><td class="dtnobar">|</td>
<td/>
<td class="dtentry">(<a class="rout" href="../F08/f08fsf.xml">F08FSF</a> and <a class="rout" href="../F08/f08jff.xml">F08JFF</a>) or
                 <a class="rout" href="../F08/f08fqf.xml">F08FQF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry">Is <m:math><m:mi>A</m:mi></m:math>&#160;a band matrix?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F08/f08hsf.xml">F08HSF</a> and <a class="rout" href="../F08/f08jjf.xml">F08JJF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry">Is one triangle of <m:math><m:mi>A</m:mi></m:math>&#160;stored as a linear array?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F08/f08gsf.xml">F08GSF</a> and <a class="rout" href="../F08/f08jjf.xml">F08JJF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry"><a class="rout" href="../F08/f08fsf.xml">F08FSF</a> and <a class="rout" href="../F08/f08jjf.xml">F08JJF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry">Are all eigenvalues and eigenvectors required?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Is <m:math><m:mi>A</m:mi></m:math>&#160;a band matrix?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">(<a class="rout" href="../F08/f08hsf.xml">F08HSF</a> and <a class="rout" href="../F08/f08jsf.xml">F08JSF</a>) or
               <a class="rout" href="../F08/f08hqf.xml">F08HQF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry">Is one triangle of <m:math><m:mi>A</m:mi></m:math>&#160;stored as a linear array?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">(<a class="rout" href="../F08/f08gsf.xml">F08GSF</a>, <a class="rout" href="../F08/f08gtf.xml">F08GTF</a> and <a class="rout" href="../F08/f08jsf.xml">F08JSF</a>) or
                 <a class="rout" href="../F08/f08gqf.xml">F08GQF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry">(<a class="rout" href="../F08/f08fsf.xml">F08FSF</a>, <a class="rout" href="../F08/f08ftf.xml">F08FTF</a> and <a class="rout" href="../F08/f08jsf.xml">F08JSF</a>) or
                 <a class="rout" href="../F08/f08fqf.xml">F08FQF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry">Is one triangle of <m:math><m:mi>A</m:mi></m:math>&#160;stored as a linear array?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F08/f08gsf.xml">F08GSF</a>, <a class="rout" href="../F08/f08jjf.xml">F08JJF</a>, <a class="rout" href="../F08/f08jxf.xml">F08JXF</a> and <a class="rout" href="../F08/f08guf.xml">F08GUF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry"><a class="rout" href="../F08/f08fsf.xml">F08FSF</a>, <a class="rout" href="../F08/f08jjf.xml">F08JJF</a>, <a class="rout" href="../F08/f08jxf.xml">F08JXF</a> and <a class="rout" href="../F08/f08fuf.xml">F08FUF</a></td></tr></table><h3 class="sec"><a name="tree6" id="tree6"/>Tree 6: Complex Generalized Hermitian-definite Eigenvalue Problems
</h3>
<table class="dtree">
<tr>
<td class="dtentry">Are eigenvalues only required?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Are all eigenvalues required?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Are <m:math><m:mi>A</m:mi></m:math>&#160;and <m:math><m:mi>B</m:mi></m:math>&#160;stored with one triangle as a linear array?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F07/f07grf.xml">F07GRF</a>, <a class="rout" href="../F08/f08tsf.xml">F08TSF</a>, <a class="rout" href="../F08/f08gsf.xml">F08GSF</a> and <a class="rout" href="../F08/f08jff.xml">F08JFF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/><td class="dtnobar">|</td>
<td/>
<td class="dtentry"><a class="rout" href="../F07/f07frf.xml">F07FRF</a>, <a class="rout" href="../F08/f08ssf.xml">F08SSF</a>, <a class="rout" href="../F08/f08fsf.xml">F08FSF</a> and <a class="rout" href="../F08/f08jff.xml">F08JFF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry">Are <m:math><m:mi>A</m:mi></m:math>&#160;and <m:math><m:mi>B</m:mi></m:math>&#160;stored with one triangle as a linear array?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F07/f07grf.xml">F07GRF</a>, <a class="rout" href="../F08/f08tsf.xml">F08TSF</a>, <a class="rout" href="../F08/f08gsf.xml">F08GSF</a> and <a class="rout" href="../F08/f08jjf.xml">F08JJF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry"><a class="rout" href="../F07/f07frf.xml">F07FRF</a>, <a class="rout" href="../F08/f08ssf.xml">F08SSF</a>, <a class="rout" href="../F08/f08gsf.xml">F08GSF</a> and <a class="rout" href="../F08/f08jjf.xml">F08JJF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry">Are all eigenvalues and eigenvectors required?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Are <m:math><m:mi>A</m:mi></m:math>&#160;and <m:math><m:mi>B</m:mi></m:math>&#160;stored with one triangle as a linear array?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F07/f07grf.xml">F07GRF</a>, <a class="rout" href="../F08/f08tsf.xml">F08TSF</a>, <a class="rout" href="../F08/f08gsf.xml">F08GSF</a>, <a class="rout" href="../F08/f08gtf.xml">F08GTF</a> and <a class="rout" href="../F06/f06psf.xml">F06PSF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry"><a class="rout" href="../F07/f07frf.xml">F07FRF</a>, <a class="rout" href="../F08/f08ssf.xml">F08SSF</a>, <a class="rout" href="../F08/f08fsf.xml">F08FSF</a>, <a class="rout" href="../F08/f08ftf.xml">F08FTF</a>, <a class="rout" href="../F08/f08jsf.xml">F08JSF</a> and <a class="rout" href="../F06/f06zjf.xml">F06ZJF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry">Are <m:math><m:mi>A</m:mi></m:math>&#160;and <m:math><m:mi>B</m:mi></m:math>&#160;stored with one triangle as a linear array?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F07/f07grf.xml">F07GRF</a>, <a class="rout" href="../F08/f08tsf.xml">F08TSF</a>, <a class="rout" href="../F08/f08gsf.xml">F08GSF</a>, <a class="rout" href="../F08/f08jjf.xml">F08JJF</a>, <a class="rout" href="../F08/f08jxf.xml">F08JXF</a>, <a class="rout" href="../F08/f08guf.xml">F08GUF</a> and <a class="rout" href="../F06/f06slf.xml">F06SLF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry"><a class="rout" href="../F07/f07frf.xml">F07FRF</a>, <a class="rout" href="../F08/f08ssf.xml">F08SSF</a>, <a class="rout" href="../F08/f08fsf.xml">F08FSF</a>, <a class="rout" href="../F08/f08jjf.xml">F08JJF</a>, <a class="rout" href="../F08/f08jxf.xml">F08JXF</a>, <a class="rout" href="../F08/f08fuf.xml">F08FUF</a> and <a class="rout" href="../F06/f06zjf.xml">F06ZJF</a></td></tr></table><h3 class="sec"><a name="tree7" id="tree7"/>Tree 7: Complex non-Hermitian Eigenvalue Problems
</h3>
<table class="dtree">
<tr>
<td class="dtentry">Are eigenvalues only required?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Is <m:math><m:mi>A</m:mi></m:math>&#160;an upper Hessenberg matrix?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F08/f08psf.xml">F08PSF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry"><a class="rout" href="../F08/f08nvf.xml">F08NVF</a>, <a class="rout" href="../F08/f08nsf.xml">F08NSF</a> and <a class="rout" href="../F08/f08psf.xml">F08PSF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry">Is the Schur factorization of <m:math><m:mi>A</m:mi></m:math>&#160;required?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Is <m:math><m:mi>A</m:mi></m:math>&#160;an upper Hessenberg matrix?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F08/f08psf.xml">F08PSF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry"><a class="rout" href="../F08/f08nsf.xml">F08NSF</a>, <a class="rout" href="../F08/f08ntf.xml">F08NTF</a>, <a class="rout" href="../F08/f08psf.xml">F08PSF</a> and <a class="rout" href="../F08/f08nwf.xml">F08NWF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry">Are all eigenvectors required?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Is <m:math><m:mi>A</m:mi></m:math>&#160;an upper Hessenberg matrix?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F08/f08psf.xml">F08PSF</a> and <a class="rout" href="../F08/f08qxf.xml">F08QXF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry"><a class="rout" href="../F08/f08nvf.xml">F08NVF</a>, <a class="rout" href="../F08/f08nsf.xml">F08NSF</a>, <a class="rout" href="../F08/f08ntf.xml">F08NTF</a>, <a class="rout" href="../F08/f08psf.xml">F08PSF</a>, <a class="rout" href="../F08/f08qxf.xml">F08QXF</a> and <a class="rout" href="../F08/f08nwf.xml">F08NWF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry">Is <m:math><m:mi>A</m:mi></m:math>&#160;an upper Hessenberg matrix?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F08/f08psf.xml">F08PSF</a> and <a class="rout" href="../F08/f08pxf.xml">F08PXF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry"><a class="rout" href="../F08/f08nvf.xml">F08NVF</a>, <a class="rout" href="../F08/f08nsf.xml">F08NSF</a>, <a class="rout" href="../F08/f08psf.xml">F08PSF</a>, <a class="rout" href="../F08/f08pxf.xml">F08PXF</a>, <a class="rout" href="../F08/f08nuf.xml">F08NUF</a> and <a class="rout" href="../F08/f08nwf.xml">F08NWF</a></td></tr></table><h3 class="sec"><a name="tree8" id="tree8"/>Tree 8: Complex Generalized non-Hermitian Eigenvalue Problems
</h3>
<table class="dtree">
<tr>
<td class="dtentry">Are eigenvalues only required?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Are <m:math><m:mi>A</m:mi></m:math>&#160;and <m:math><m:mi>B</m:mi></m:math>&#160;in generalized upper Hessenberg form?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F08/f08xsf.xml">F08XSF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry"><a class="rout" href="../F08/f08wvf.xml">F08WVF</a>, <a class="rout" href="../F08/f08asf.xml">F08ASF</a>, <a class="rout" href="../F08/f08auf.xml">F08AUF</a>, <a class="rout" href="../F08/f08wsf.xml">F08WSF</a> and <a class="rout" href="../F08/f08xsf.xml">F08XSF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry">Is the generalized Schur factorization of <m:math><m:mi>A</m:mi></m:math>&#160;and <m:math><m:mi>B</m:mi></m:math>&#160;required?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Are <m:math><m:mi>A</m:mi></m:math>&#160;and <m:math><m:mi>B</m:mi></m:math>&#160;in generalized upper Hessenberg form?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F08/f08xsf.xml">F08XSF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry"><a class="rout" href="../F08/f08asf.xml">F08ASF</a>, <a class="rout" href="../F08/f08auf.xml">F08AUF</a>, <a class="rout" href="../F06/f06thf.xml">F06THF</a>, <a class="rout" href="../F06/f06tff.xml">F06TFF</a>, <a class="rout" href="../F08/f08atf.xml">F08ATF</a>, <a class="rout" href="../F08/f08wsf.xml">F08WSF</a>, <a class="rout" href="../F08/f08xsf.xml">F08XSF</a> and <a class="rout" href="../F08/f08yxf.xml">F08YXF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry">Are <m:math><m:mi>A</m:mi></m:math>&#160;and <m:math><m:mi>B</m:mi></m:math>&#160;in generalized upper Hessenberg form?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F08/f08xsf.xml">F08XSF</a> and <a class="rout" href="../F08/f08yxf.xml">F08YXF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry"><a class="rout" href="../F08/f08wvf.xml">F08WVF</a>, <a class="rout" href="../F08/f08asf.xml">F08ASF</a>, <a class="rout" href="../F08/f08auf.xml">F08AUF</a>, <a class="rout" href="../F06/f06thf.xml">F06THF</a>, <a class="rout" href="../F06/f06tff.xml">F06TFF</a>, <a class="rout" href="../F08/f08atf.xml">F08ATF</a>, <a class="rout" href="../F08/f08wsf.xml">F08WSF</a>, <a class="rout" href="../F08/f08xsf.xml">F08XSF</a>, <a class="rout" href="../F08/f08yxf.xml">F08YXF</a> and <a class="rout" href="../F08/f08wwf.xml">F08WWF</a></td></tr></table><h3 class="standard"><a class="sec" name="dtree2" id="dtree2"/>4.2&#160;&#160;General Purpose Routines (singular value decomposition)</h3>
<h3 class="sec"><a name="tree9" id="tree9"/>Tree 9</h3>
<table class="dtree">
<tr>
<td class="dtentry">Is <m:math><m:mi>A</m:mi></m:math>&#160;a complex matrix?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Is <m:math><m:mi>A</m:mi></m:math>&#160;banded?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F08/f08lsf.xml">F08LSF</a> and <a class="rout" href="../F08/f08msf.xml">F08MSF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry">Are singular values only required?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F08/f08ksf.xml">F08KSF</a> and <a class="rout" href="../F08/f08msf.xml">F08MSF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry"><a class="rout" href="../F08/f08ksf.xml">F08KSF</a>, <a class="rout" href="../F08/f08ktf.xml">F08KTF</a> and <a class="rout" href="../F08/f08msf.xml">F08MSF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry">Is <m:math><m:mi>A</m:mi></m:math>&#160;bidiagonal?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F08/f08mef.xml">F08MEF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry">Is <m:math><m:mi>A</m:mi></m:math>&#160;banded?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F08/f08lef.xml">F08LEF</a> and <a class="rout" href="../F08/f08mef.xml">F08MEF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry">Are singular values only required?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F08/f08kef.xml">F08KEF</a> and <a class="rout" href="../F08/f08mef.xml">F08MEF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry"><a class="rout" href="../F08/f08kef.xml">F08KEF</a>, <a class="rout" href="../F08/f08kff.xml">F08KFF</a> and <a class="rout" href="../F08/f08mef.xml">F08MEF</a></td></tr></table><h2 class="standard"><a class="sec" name="index" id="index"/>5&#160;&#160;Functionality Index</h2>
<div>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Backtransformation&#160;of&#160;eigenvectors&#160;from&#160;those&#160;of&#160;balanced&#160;forms:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;complex&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08nwf.xml">F08NWF&#160;(ZGEBAK)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;real&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08njf.xml">F08NJF&#160;(DGEBAK)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Backtransformation&#160;of&#160;generalized&#160;eigenvectors&#160;from&#160;those&#160;of&#160;balanced&#160;forms:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;complex&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08wwf.xml">F08WWF&#160;(ZGGBAK)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;real&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08wjf.xml">F08WJF&#160;(DGGBAK)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Balancing:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;complex&#160;general&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08nvf.xml">F08NVF&#160;(ZGEBAL)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;complex&#160;general&#160;matrix&#160;pair</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08wvf.xml">F08WVF&#160;(ZGGBAL)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;real&#160;general&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08nhf.xml">F08NHF&#160;(DGEBAL)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;real&#160;general&#160;matrix&#160;pair</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08whf.xml">F08WHF&#160;(DGGBAL)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Eigenvalue&#160;problems&#160;for&#160;condensed&#160;forms&#160;of&#160;matrices:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;complex&#160;Hermitian&#160;matrix:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;eigenvalues&#160;and&#160;eigenvectors:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;band&#160;matrix:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;eigenvectors&#160;by&#160;a&#160;divide-and-conquer&#160;algorithm,&#160;using&#160;packed&#160;storage</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08hqf.xml">F08HQF&#160;(ZHBEVD)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;eigenvectors&#160;by&#160;root-free&#160;<span><i>Q</i><i>R</i></span>&#160;algorithm</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08hnf.xml">F08HNF&#160;(ZHBEV)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;eigenvectors&#160;by&#160;root-free&#160;<span><i>Q</i><i>R</i></span>&#160;algorithm or selected eigenvalues and eigenvectors by bisection and inverse iteration</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08hpf.xml">F08HPF&#160;(ZHBEVX)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;general&#160;matrix:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;eigenvectors&#160;by&#160;a&#160;divide-and-conquer&#160;algorithm</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08fqf.xml">F08FQF&#160;(ZHEEVD)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;eigenvectors&#160;by&#160;a&#160;divide-and-conquer&#160;algorithm,&#160;using&#160;packed&#160;storage</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08gqf.xml">F08GQF&#160;(ZHPEVD)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;eigenvectors&#160;by&#160;root-free&#160;<span><i>Q</i><i>R</i></span>&#160;algorithm</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08fnf.xml">F08FNF&#160;(ZHEEV)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;eigenvectors&#160;by&#160;root-free&#160;<span><i>Q</i><i>R</i></span>&#160;algorithm, using packed storage</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08gnf.xml">F08GNF&#160;(ZHPEV)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;eigenvectors&#160;by&#160;root-free&#160;<span><i>Q</i><i>R</i></span>&#160;algorithm or selected eigenvalues and eigenvectors by bisection and inverse iteration</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08fpf.xml">F08FPF&#160;(ZHEEVX)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;eigenvectors&#160;by&#160;root-free&#160;<span><i>Q</i><i>R</i></span>&#160;algorithm or selected eigenvalues and eigenvectors by bisection and inverse iteration, using packed storage</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08gpf.xml">F08GPF&#160;(ZHPEVX)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;eigenvectors&#160;using&#160;Relatively&#160;Robust&#160;Representations&#160;or&#160;selected&#160;eigenvalues&#160;and&#160;eigenvectors&#160;by&#160;bisection&#160;and&#160;inverse&#160;iteration</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08frf.xml">F08FRF&#160;(ZHEEVR)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;eigenvalues&#160;only:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;band&#160;matrix:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;by&#160;the&#160;Pal&#8211;Walker&#8211;Kahan&#160;variant&#160;of&#160;the&#160;<span><i>Q</i><i>L</i></span>&#160;or <span><i>Q</i><i>R</i></span>&#160;algorithm</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08hnf.xml">F08HNF&#160;(ZHBEV)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;by&#160;the&#160;Pal&#8211;Walker&#8211;Kahan&#160;variant&#160;of&#160;the&#160;<span><i>Q</i><i>L</i></span>&#160;or <span><i>Q</i><i>R</i></span>&#160;algorithm, or selected eigenvalues by bisection</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08hpf.xml">F08HPF&#160;(ZHBEVX)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;by&#160;the&#160;Pal&#8211;Walker&#8211;Kahan&#160;variant&#160;of&#160;the&#160;<span><i>Q</i><i>L</i></span>&#160;or <span><i>Q</i><i>R</i></span>&#160;algorithm, using packed storage</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08hqf.xml">F08HQF&#160;(ZHBEVD)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;general&#160;matrix:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;by&#160;the&#160;Pal&#8211;Walker&#8211;Kahan&#160;variant&#160;of&#160;the&#160;<span><i>Q</i><i>L</i></span>&#160;or <span><i>Q</i><i>R</i></span>&#160;algorithm</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08fnf.xml">F08FNF&#160;(ZHEEV)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;by&#160;the&#160;Pal&#8211;Walker&#8211;Kahan&#160;variant&#160;of&#160;the&#160;<span><i>Q</i><i>L</i></span>&#160;or <span><i>Q</i><i>R</i></span>&#160;algorithm, or selected eigenvalues by bisection</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08fpf.xml">F08FPF&#160;(ZHEEVX)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;by&#160;the&#160;Pal&#8211;Walker&#8211;Kahan&#160;variant&#160;of&#160;the&#160;<span><i>Q</i><i>L</i></span>&#160;or <span><i>Q</i><i>R</i></span>&#160;algorithm, or selected eigenvalues by bisection, using packed storage</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08gpf.xml">F08GPF&#160;(ZHPEVX)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;by&#160;the&#160;Pal&#8211;Walker&#8211;Kahan&#160;variant&#160;of&#160;the&#160;<span><i>Q</i><i>L</i></span>&#160;or <span><i>Q</i><i>R</i></span>&#160;algorithm, using packed storage</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08gnf.xml">F08GNF&#160;(ZHPEV)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;complex&#160;upper&#160;Hessenberg&#160;matrix,&#160;reduced&#160;from&#160;complex&#160;general&#160;matrix:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;eigenvalues&#160;and&#160;Schur&#160;factorization</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08psf.xml">F08PSF&#160;(ZHSEQR)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;selected&#160;right&#160;and/or&#160;left&#160;eigenvectors&#160;by&#160;inverse&#160;iteration</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08pxf.xml">F08PXF&#160;(ZHSEIN)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;real&#160;bidiagonal&#160;matrix:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;singular&#160;value&#160;decomposition:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;after&#160;reduction&#160;from&#160;complex&#160;general&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08msf.xml">F08MSF&#160;(ZBDSQR)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;after&#160;reduction&#160;from&#160;real&#160;general&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08mef.xml">F08MEF&#160;(DBDSQR)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;after&#160;reduction&#160;from&#160;real&#160;general&#160;matrix,&#160;using&#160;divide-and-conquer</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08mdf.xml">F08MDF&#160;(DBDSDC)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;real&#160;symmetric&#160;matrix:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;eigenvalues&#160;and&#160;eigenvectors:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;band&#160;matrix:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;eigenvectors&#160;by&#160;a&#160;divide-and-conquer&#160;algorithm</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08hcf.xml">F08HCF&#160;(DSBEVD)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;eigenvectors&#160;by&#160;root-free&#160;<span><i>Q</i><i>R</i></span>&#160;algorithm</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08haf.xml">F08HAF&#160;(DSBEV)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;eigenvectors&#160;by&#160;root-free&#160;<span><i>Q</i><i>R</i></span>&#160;algorithm or selected eigenvalues and eigenvectors by bisection and inverse iteration</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08hbf.xml">F08HBF&#160;(DSBEVX)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;general&#160;matrix:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;eigenvectors&#160;by&#160;a&#160;divide-and-conquer&#160;algorithm</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08fcf.xml">F08FCF&#160;(DSYEVD)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;eigenvectors&#160;by&#160;a&#160;divide-and-conquer&#160;algorithm,&#160;using&#160;packed&#160;storage</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08gcf.xml">F08GCF&#160;(DSPEVD)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;eigenvectors&#160;by&#160;root-free&#160;<span><i>Q</i><i>R</i></span>&#160;algorithm</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08faf.xml">F08FAF&#160;(DSYEV)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;eigenvectors&#160;by&#160;root-free&#160;<span><i>Q</i><i>R</i></span>&#160;algorithm, using packed storage</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08gaf.xml">F08GAF&#160;(DSPEV)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;eigenvectors&#160;by&#160;root-free&#160;<span><i>Q</i><i>R</i></span>&#160;algorithm or selected eigenvalues and eigenvectors by bisection and inverse iteration</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08fbf.xml">F08FBF&#160;(DSYEVX)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;eigenvectors&#160;by&#160;root-free&#160;<span><i>Q</i><i>R</i></span>&#160;algorithm or selected eigenvalues and eigenvectors by bisection and inverse iteration, using packed storage</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08gbf.xml">F08GBF&#160;(DSPEVX)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;eigenvectors&#160;using&#160;Relatively&#160;Robust&#160;Representations&#160;or&#160;selected&#160;eigenvalues&#160;and&#160;eigenvectors&#160;by&#160;bisection&#160;and&#160;inverse&#160;iteration</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08fdf.xml">F08FDF&#160;(DSYEVR)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;eigenvalues&#160;only:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;band&#160;matrix:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;by&#160;the&#160;Pal&#8211;Walker&#8211;Kahan&#160;variant&#160;of&#160;the&#160;<span><i>Q</i><i>L</i></span>&#160;or <span><i>Q</i><i>R</i></span>&#160;algorithm</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08haf.xml">F08HAF&#160;(DSBEV)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;by&#160;the&#160;Pal&#8211;Walker&#8211;Kahan&#160;variant&#160;of&#160;the&#160;<span><i>Q</i><i>L</i></span>&#160;or <span><i>Q</i><i>R</i></span>&#160;algorithm, or selected eigenvalues by bisection</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08hbf.xml">F08HBF&#160;(DSBEVX)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;general&#160;matrix:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;by&#160;the&#160;Pal&#8211;Walker&#8211;Kahan&#160;variant&#160;of&#160;the&#160;<span><i>Q</i><i>L</i></span>&#160;or <span><i>Q</i><i>R</i></span>&#160;algorithm</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08faf.xml">F08FAF&#160;(DSYEV)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;by&#160;the&#160;Pal&#8211;Walker&#8211;Kahan&#160;variant&#160;of&#160;the&#160;<span><i>Q</i><i>L</i></span>&#160;or <span><i>Q</i><i>R</i></span>&#160;algorithm, or selected eigenvalues by bisection</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08fbf.xml">F08FBF&#160;(DSYEVX)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;by&#160;the&#160;Pal&#8211;Walker&#8211;Kahan&#160;variant&#160;of&#160;the&#160;<span><i>Q</i><i>L</i></span>&#160;or <span><i>Q</i><i>R</i></span>&#160;algorithm, or selected eigenvalues by bisection, using packed storage</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08gbf.xml">F08GBF&#160;(DSPEVX)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;by&#160;the&#160;Pal&#8211;Walker&#8211;Kahan&#160;variant&#160;of&#160;the&#160;<span><i>Q</i><i>L</i></span>&#160;or <span><i>Q</i><i>R</i></span>&#160;algorithm, using packed storage</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08gaf.xml">F08GAF&#160;(DSPEV)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;real&#160;symmetric&#160;tridiagonal&#160;matrix:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;eigenvalues&#160;and&#160;eigenvectors:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;after&#160;reduction&#160;from&#160;complex&#160;Hermitian&#160;matrix:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;eigenvectors</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08jsf.xml">F08JSF&#160;(ZSTEQR)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;eigenvectors,&#160;positive&#160;definite&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08juf.xml">F08JUF&#160;(ZPTEQR)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;eigenvectors,&#160;using&#160;divide-and-conquer</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08jvf.xml">F08JVF&#160;(ZSTEDC)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;eigenvectors,&#160;using&#160;Relatively&#160;Robust&#160;Representations</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08jyf.xml">F08JYF&#160;(ZSTEGR)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;selected&#160;eigenvectors&#160;by&#160;inverse&#160;iteration</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08jxf.xml">F08JXF&#160;(ZSTEIN)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;eigenvectors</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08jef.xml">F08JEF&#160;(DSTEQR)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;eigenvectors,&#160;by&#160;divide-and-conquer</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08jhf.xml">F08JHF&#160;(DSTEDC)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;eigenvectors,&#160;positive&#160;definite&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08jgf.xml">F08JGF&#160;(DPTEQR)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;eigenvectors,&#160;using&#160;Relatively&#160;Robust&#160;Representations</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08jlf.xml">F08JLF&#160;(DSTEGR)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;eigenvectors&#160;by&#160;a&#160;divide-and-conquer&#160;algorithm</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08jcf.xml">F08JCF&#160;(DSTEVD)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;eigenvectors&#160;by&#160;root-free&#160;<span><i>Q</i><i>R</i></span>&#160;algorithm</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08jaf.xml">F08JAF&#160;(DSTEV)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;eigenvectors&#160;by&#160;root-free&#160;<span><i>Q</i><i>R</i></span>&#160;algorithm or selected eigenvalues and eigenvectors by bisection and inverse iteration</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08jbf.xml">F08JBF&#160;(DSTEVX)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;eigenvectors&#160;using&#160;Relatively&#160;Robust&#160;Representations&#160;or&#160;selected&#160;eigenvalues&#160;and&#160;eigenvectors&#160;by&#160;bisection&#160;and&#160;inverse&#160;iteration</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08jdf.xml">F08JDF&#160;(DSTEVR)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;selected&#160;eigenvectors&#160;by&#160;inverse&#160;iteration</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08jkf.xml">F08JKF&#160;(DSTEIN)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;eigenvalues&#160;only:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;by&#160;root-free&#160;<span><i>Q</i><i>R</i></span>&#160;algorithm</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08jff.xml">F08JFF&#160;(DSTERF)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;by&#160;the&#160;Pal&#8211;Walker&#8211;Kahan&#160;variant&#160;of&#160;the&#160;<span><i>Q</i><i>L</i></span>&#160;or <span><i>Q</i><i>R</i></span>&#160;algorithm</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08jaf.xml">F08JAF&#160;(DSTEV)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;by&#160;the&#160;Pal&#8211;Walker&#8211;Kahan&#160;variant&#160;of&#160;the&#160;<span><i>Q</i><i>L</i></span>&#160;or <span><i>Q</i><i>R</i></span>&#160;algorithm, or selected eigenvalues by bisection</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08jbf.xml">F08JBF&#160;(DSTEVX)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;selected&#160;eigenvalues&#160;by&#160;bisection</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08jjf.xml">F08JJF&#160;(DSTEBZ)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;real&#160;upper&#160;Hessenberg&#160;matrix,&#160;reduced&#160;from&#160;real&#160;general&#160;matrix:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;eigenvalues&#160;and&#160;Schur&#160;factorization</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08pef.xml">F08PEF&#160;(DHSEQR)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;selected&#160;right&#160;and/or&#160;left&#160;eigenvectors&#160;by&#160;inverse&#160;iteration</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08pkf.xml">F08PKF&#160;(DHSEIN)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Eigenvalue&#160;problems&#160;for&#160;nonsymmetric&#160;matrices:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;complex&#160;matrix:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues,&#160;Schur&#160;form,&#160;Schur&#160;vectors&#160;and&#160;reciprocal&#160;condition&#160;numbers</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08ppf.xml">F08PPF&#160;(ZGEESX)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues,&#160;Schur&#160;form&#160;and&#160;Schur&#160;vectors</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08pnf.xml">F08PNF&#160;(ZGEES)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;left/right&#160;eigenvectors</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08nnf.xml">F08NNF&#160;(ZGEEV)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;left/right&#160;eigenvectors,&#160;plus&#160;balancing&#160;transformation&#160;and&#160;reciprocal&#160;condition&#160;numbers</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08npf.xml">F08NPF&#160;(ZGEEVX)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;real&#160;matrix:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues,&#160;real&#160;Schur&#160;form,&#160;Schur&#160;vectors&#160;and&#160;reciprocal&#160;condition&#160;numbers</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08pbf.xml">F08PBF&#160;(DGEESX)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues,&#160;real&#160;Schur&#160;form&#160;and&#160;Schur&#160;vectors</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08paf.xml">F08PAF&#160;(DGEES)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;left/right&#160;eigenvectors</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08naf.xml">F08NAF&#160;(DGEEV)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;left/right&#160;eigenvectors,&#160;plus&#160;balancing&#160;transformation&#160;and&#160;reciprocal&#160;condition&#160;numbers&#160;</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08nbf.xml">F08NBF&#160;(DGEEVX)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Eigenvalues&#160;and&#160;generalized&#160;Schur&#160;factorization,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;complex&#160;generalized&#160;upper&#160;Hessenberg&#160;form</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08xsf.xml">F08XSF&#160;(ZHGEQZ)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;real&#160;generalized&#160;upper&#160;Hessenberg&#160;form</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08xef.xml">F08XEF&#160;(DHGEQZ)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>General&#160;Gauss&#8211;Markov&#160;linear&#160;model:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;solves&#160;a&#160;complex&#160;general&#160;Gauss&#8211;Markov&#160;linear&#160;model&#160;problem</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08zpf.xml">F08ZPF&#160;(ZGGGLM)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;solves&#160;a&#160;real&#160;general&#160;Gauss&#8211;Markov&#160;linear&#160;model&#160;problem</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08zbf.xml">F08ZBF&#160;(DGGGLM)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Generalized&#160;eigenvalue&#160;problems&#160;for&#160;condensed&#160;forms&#160;of&#160;matrices:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;complex&#160;Hermitian-definite&#160;eigenproblems:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;banded&#160;matrices:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;eigenvectors&#160;by&#160;a&#160;divide-and-conquer&#160;algorithm</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08uqf.xml">F08UQF&#160;(ZHBGVD)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;eigenvectors&#160;by&#160;reduction&#160;to&#160;tridiagonal&#160;form</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08unf.xml">F08UNF&#160;(ZHBGV)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;selected&#160;eigenvalues&#160;and&#160;eigenvectors&#160;by&#160;reduction&#160;to&#160;tridiagonal&#160;form</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08upf.xml">F08UPF&#160;(ZHBGVX)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;general&#160;matrices:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;eigenvectors&#160;by&#160;a&#160;divide-and-conquer&#160;algorithm</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08sqf.xml">F08SQF&#160;(ZHEGVD)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;eigenvectors&#160;by&#160;a&#160;divide-and-conquer&#160;algorithm,&#160;packed&#160;storage&#160;format</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08tqf.xml">F08TQF&#160;(ZHPGVD)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;eigenvectors&#160;by&#160;reduction&#160;to&#160;tridiagonal&#160;form</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08snf.xml">F08SNF&#160;(ZHEGV)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;eigenvectors&#160;by&#160;reduction&#160;to&#160;tridiagonal&#160;form,&#160;packed&#160;storage&#160;format</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08tnf.xml">F08TNF&#160;(ZHPGV)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;selected&#160;eigenvalues&#160;and&#160;eigenvectors&#160;by&#160;reduction&#160;to&#160;tridiagonal&#160;form</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08spf.xml">F08SPF&#160;(ZHEGVX)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;selected&#160;eigenvalues&#160;and&#160;eigenvectors&#160;by&#160;reduction&#160;to&#160;tridiagonal&#160;form,&#160;packed&#160;storage&#160;format</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08tpf.xml">F08TPF&#160;(ZHPGVX)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;real&#160;symmetric-definite&#160;eigenproblems:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;banded&#160;matrices:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;eigenvectors&#160;by&#160;a&#160;divide-and-conquer&#160;algorithm</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08ucf.xml">F08UCF&#160;(DSBGVD)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;eigenvectors&#160;by&#160;reduction&#160;to&#160;tridiagonal&#160;form</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08uaf.xml">F08UAF&#160;(DSBGV)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;selected&#160;eigenvalues&#160;and&#160;eigenvectors&#160;by&#160;reduction&#160;to&#160;tridiagonal&#160;form</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08ubf.xml">F08UBF&#160;(DSBGVX)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;general&#160;matrices:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;eigenvectors&#160;by&#160;a&#160;divide-and-conquer&#160;algorithm</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08scf.xml">F08SCF&#160;(DSYGVD)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;eigenvectors&#160;by&#160;a&#160;divide-and-conquer&#160;algorithm,&#160;packed&#160;storage&#160;format</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08tcf.xml">F08TCF&#160;(DSPGVD)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;eigenvectors&#160;by&#160;reduction&#160;to&#160;tridiagonal&#160;form</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08saf.xml">F08SAF&#160;(DSYGV)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;eigenvectors&#160;by&#160;reduction&#160;to&#160;tridiagonal&#160;form,&#160;packed&#160;storage&#160;format</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08taf.xml">F08TAF&#160;(DSPGV)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;selected&#160;eigenvalues&#160;and&#160;eigenvectors&#160;by&#160;reduction&#160;to&#160;tridiagonal&#160;form</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08sbf.xml">F08SBF&#160;(DSYGVX)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;selected&#160;eigenvalues&#160;and&#160;eigenvectors&#160;by&#160;reduction&#160;to&#160;tridiagonal&#160;form,&#160;packed&#160;storage&#160;format</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08tbf.xml">F08TBF&#160;(DSPGVX)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Generalized&#160;eigenvalue&#160;problems&#160;for&#160;nonsymmetric&#160;matrix&#160;pairs:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;complex&#160;nonsymmetric&#160;matrix&#160;pairs:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues,&#160;generalized&#160;Schur&#160;form,&#160;Schur&#160;vectors&#160;and&#160;reciprocal&#160;condition&#160;numbers</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08xpf.xml">F08XPF&#160;(ZGGESX)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues,&#160;generalized&#160;Schur&#160;form&#160;and&#160;Schur&#160;vectors</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08xnf.xml">F08XNF&#160;(ZGGES)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;left/right&#160;eigenvectors</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08wnf.xml">F08WNF&#160;(ZGGEV)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;left/right&#160;eigenvectors,&#160;plus&#160;the&#160;balancing&#160;transformation&#160;and&#160;reciprocal&#160;condition&#160;numbers</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08wpf.xml">F08WPF&#160;(ZGGEVX)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;real&#160;nonsymmetric&#160;matrix&#160;pairs:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues,&#160;generalized&#160;real&#160;Schur&#160;form&#160;and&#160;left/right&#160;Schur&#160;vectors</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08xaf.xml">F08XAF&#160;(DGGES)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues,&#160;generalized&#160;real&#160;Schur&#160;form&#160;and&#160;left/right&#160;Schur&#160;vectors,&#160;plus&#160;reciprocal&#160;condition&#160;numbers</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08xbf.xml">F08XBF&#160;(DGGESX)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;left/right&#160;eigenvectors</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08waf.xml">F08WAF&#160;(DGGEV)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;all&#160;eigenvalues&#160;and&#160;left/right&#160;eigenvectors,&#160;plus&#160;the&#160;balancing&#160;transformation&#160;and&#160;reciprocal&#160;condition&#160;numbers</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08wbf.xml">F08WBF&#160;(DGGEVX)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Generalized&#160;<span><i>Q</i><i>R</i></span>&#160;factorization:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;complex&#160;matrices:</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08zsf.xml">F08ZSF&#160;(ZGGQRF)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;real&#160;matrices:</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08zef.xml">F08ZEF&#160;(DGGQRF)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Generalized&#160;<span><i>R</i><i>Q</i></span>&#160;factorization:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;complex&#160;matrices:</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08ztf.xml">F08ZTF&#160;(ZGGRQF)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;real&#160;matrices:</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08zff.xml">F08ZFF&#160;(DGGRQF)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Generalized&#160;singular&#160;value&#160;decomposition</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;after&#160;reduction&#160;from&#160;complex&#160;general&#160;matrix:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;complex&#160;triangular&#160;or&#160;trapezoidal&#160;matrix&#160;pair</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08ysf.xml">F08YSF&#160;(ZTGSJA)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;after&#160;reduction&#160;from&#160;real&#160;general&#160;matrix:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;real&#160;triangular&#160;or&#160;trapezoidal&#160;matrix&#160;pair</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08yef.xml">F08YEF&#160;(DTGSJA)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;complex&#160;matrix&#160;pair</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08vnf.xml">F08VNF&#160;(ZGGSVD)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;real&#160;matrix&#160;pair</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08vaf.xml">F08VAF&#160;(DGGSVD)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;reduction&#160;of&#160;a&#160;pair&#160;of&#160;general&#160;matrices&#160;to&#160;triangular&#160;or&#160;trapezoidal&#160;form:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;complex&#160;matrices</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08vsf.xml">F08VSF&#160;(ZGGSVP)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;real&#160;matrices</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08vef.xml">F08VEF&#160;(DGGSVP)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>least&#160;squares&#160;problems:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;complex&#160;matrices:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;apply&#160;orthogonal&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08bxf.xml">F08BXF&#160;(ZUNMRZ)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;minimum&#160;norm&#160;solution&#160;using&#160;a&#160;complete&#160;orthogonal&#160;factorization</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08bnf.xml">F08BNF&#160;(ZGELSY)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;minimum&#160;norm&#160;solution&#160;using&#160;the&#160;singular&#160;value&#160;decomposition</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08knf.xml">F08KNF&#160;(ZGELSS)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;minimum&#160;norm&#160;solution&#160;using&#160;the&#160;singular&#160;value&#160;decomposition&#160;(divide-and-conquer)</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08kqf.xml">F08KQF&#160;(ZGELSD)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;reduction&#160;of&#160;upper&#160;trapezoidal&#160;matrix&#160;to&#160;upper&#160;triangular&#160;form</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08bvf.xml">F08BVF&#160;(ZTZRZF)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;real&#160;matrices:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;apply&#160;orthogonal&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08bkf.xml">F08BKF&#160;(DORMRZ)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;minimum&#160;norm&#160;solution&#160;using&#160;a&#160;complete&#160;orthogonal&#160;factorization</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08baf.xml">F08BAF&#160;(DGELSY)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;minimum&#160;norm&#160;solution&#160;using&#160;the&#160;singular&#160;value&#160;decomposition</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08kaf.xml">F08KAF&#160;(DGELSS)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;minimum&#160;norm&#160;solution&#160;using&#160;the&#160;singular&#160;value&#160;decomposition&#160;(divide-and-conquer)</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08kcf.xml">F08KCF&#160;(DGELSD)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;reduction&#160;of&#160;upper&#160;trapezoidal&#160;matrix&#160;to&#160;upper&#160;triangular&#160;form</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08bhf.xml">F08BHF&#160;(DTZRZF)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>least&#160;squares&#160;problems&#160;with&#160;linear&#160;equality&#160;constraints</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;complex&#160;matrices:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;minimum&#160;norm&#160;solution&#160;subject&#160;to&#160;linear&#160;equality&#160;constraints&#160;using&#160;a&#160;generalized&#160;<span><i>R</i><i>Q</i></span>&#160;factorization</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08znf.xml">F08ZNF&#160;(ZGGLSE)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;real&#160;matrices:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;minimum&#160;norm&#160;solution&#160;subject&#160;to&#160;linear&#160;equality&#160;constraints&#160;using&#160;a&#160;generalized&#160;<span><i>R</i><i>Q</i></span>&#160;factorization</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08zaf.xml">F08ZAF&#160;(DGGLSE)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Left&#160;and&#160;right&#160;eigenvectors&#160;of&#160;a&#160;pair&#160;of&#160;matrices:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;complex&#160;upper&#160;triangular&#160;matrices</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08yxf.xml">F08YXF&#160;(ZTGEVC)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;real&#160;quasi-triangular&#160;matrices</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08ykf.xml">F08YKF&#160;(DTGEVC)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr><span><i>L</i><i>Q</i></span>&#160;factorization and related operations:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;complex&#160;matrices:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;apply&#160;unitary&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08axf.xml">F08AXF&#160;(ZUNMLQ)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;factorization</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08avf.xml">F08AVF&#160;(ZGELQF)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;form&#160;all&#160;or&#160;part&#160;of&#160;unitary&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08awf.xml">F08AWF&#160;(ZUNGLQ)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;real&#160;matrices:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;apply&#160;orthogonal&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08akf.xml">F08AKF&#160;(DORMLQ)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;factorization</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08ahf.xml">F08AHF&#160;(DGELQF)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;form&#160;all&#160;or&#160;part&#160;of&#160;orthogonal&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08ajf.xml">F08AJF&#160;(DORGLQ)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Operations&#160;on&#160;eigenvectors&#160;of&#160;a&#160;real&#160;symmetric&#160;or&#160;complex&#160;Hermitian&#160;matrix,&#160;or&#160;singular&#160;vectors&#160;of&#160;a&#160;general&#160;matrix:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;estimate&#160;condition&#160;numbers</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08flf.xml">F08FLF&#160;(DDISNA)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Operations&#160;on&#160;generalized&#160;Schur&#160;factorization&#160;of&#160;a&#160;general&#160;matrix&#160;pair:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;complex&#160;matrix:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;estimate&#160;condition&#160;numbers&#160;of&#160;eigenvalues&#160;and/or&#160;eigenvectors</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08yyf.xml">F08YYF&#160;(ZTGSNA)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;re-order&#160;Schur&#160;factorization</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08ytf.xml">F08YTF&#160;(ZTGEXC)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;re-order&#160;Schur&#160;factorization,&#160;compute&#160;generalized&#160;eigenvalues&#160;and&#160;condition&#160;numbers</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08yuf.xml">F08YUF&#160;(ZTGSEN)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;real&#160;matrix:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;estimate&#160;condition&#160;numbers&#160;of&#160;eigenvalues&#160;and/or&#160;eigenvectors</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08ylf.xml">F08YLF&#160;(DTGSNA)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;re-order&#160;Schur&#160;factorization</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08yff.xml">F08YFF&#160;(DTGEXC)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;re-order&#160;Schur&#160;factorization,&#160;compute&#160;generalized&#160;eigenvalues&#160;and&#160;condition&#160;numbers</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08ygf.xml">F08YGF&#160;(DTGSEN)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Operations&#160;on&#160;Schur&#160;factorization&#160;of&#160;a&#160;general&#160;matrix:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;complex&#160;matrix:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;compute&#160;left&#160;and/or&#160;right&#160;eigenvectors</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08qxf.xml">F08QXF&#160;(ZTREVC)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;estimate&#160;sensitivities&#160;of&#160;eigenvalues&#160;and/or&#160;eigenvectors</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08qyf.xml">F08QYF&#160;(ZTRSNA)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;re-order&#160;Schur&#160;factorization</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08qtf.xml">F08QTF&#160;(ZTREXC)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;re-order&#160;Schur&#160;factorization,&#160;compute&#160;basis&#160;of&#160;invariant&#160;subspace,&#160;and&#160;estimate&#160;sensitivities</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08quf.xml">F08QUF&#160;(ZTRSEN)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;real&#160;matrix:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;compute&#160;left&#160;and/or&#160;right&#160;eigenvectors</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08qkf.xml">F08QKF&#160;(DTREVC)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;estimate&#160;sensitivities&#160;of&#160;eigenvalues&#160;and/or&#160;eigenvectors</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08qlf.xml">F08QLF&#160;(DTRSNA)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;re-order&#160;Schur&#160;factorization</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08qff.xml">F08QFF&#160;(DTREXC)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;re-order&#160;Schur&#160;factorization,&#160;compute&#160;basis&#160;of&#160;invariant&#160;subspace,&#160;and&#160;estimate&#160;sensitivities</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08qgf.xml">F08QGF&#160;(DTRSEN)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Overdetermined&#160;and&#160;underdetermined&#160;linear&#160;systems</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;complex&#160;matrices:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;solves&#160;an&#160;overdetermined&#160;or&#160;undetermined&#160;complex&#160;linear&#160;system</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08anf.xml">F08ANF&#160;(ZGELS)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;real&#160;matrices:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;solves&#160;an&#160;overdetermined&#160;or&#160;undetermined&#160;real&#160;linear&#160;system</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08aaf.xml">F08AAF&#160;(DGELS)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr><span><i>Q</i><i>L</i></span>&#160;factorization and related operations:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;complex&#160;matrices:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;apply&#160;unitary&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08cuf.xml">F08CUF&#160;(ZUNMQL)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;factorization</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08csf.xml">F08CSF&#160;(ZGEQLF)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;form&#160;all&#160;or&#160;part&#160;of&#160;unitary&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08ctf.xml">F08CTF&#160;(ZUNGQL)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;real&#160;matrices:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;apply&#160;orthogonal&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08cgf.xml">F08CGF&#160;(DORMQL)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;factorization</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08cef.xml">F08CEF&#160;(DGEQLF)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;form&#160;all&#160;or&#160;part&#160;of&#160;orthogonal&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08cff.xml">F08CFF&#160;(DORGQL)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr><span><i>Q</i><i>R</i></span>&#160;factorization and related operations:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;complex&#160;matrices:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;apply&#160;unitary&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08auf.xml">F08AUF&#160;(ZUNMQR)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;factorization</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08asf.xml">F08ASF&#160;(ZGEQRF)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;factorization,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;with&#160;column&#160;pivoting,&#160;using&#160;BLAS-3</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08btf.xml">F08BTF&#160;(ZGEQP3)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;factorization,&#160;with&#160;column&#160;pivoting</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08bsf.xml">F08BSF&#160;(ZGEQPF)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;form&#160;all&#160;or&#160;part&#160;of&#160;unitary&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08atf.xml">F08ATF&#160;(ZUNGQR)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;real&#160;matrices:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;apply&#160;orthogonal&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08agf.xml">F08AGF&#160;(DORMQR)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;factorization</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08aef.xml">F08AEF&#160;(DGEQRF)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;factorization,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;with&#160;column&#160;pivoting,&#160;using&#160;BLAS-3</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08bff.xml">F08BFF&#160;(DGEQP3)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;factorization,&#160;with&#160;column&#160;pivoting</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08bef.xml">F08BEF&#160;(DGEQPF)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;form&#160;all&#160;or&#160;part&#160;of&#160;orthogonal&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08aff.xml">F08AFF&#160;(DORGQR)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Reduction&#160;of&#160;a&#160;pair&#160;of&#160;general&#160;matrices&#160;to&#160;generalized&#160;upper&#160;Hessenberg&#160;form,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;orthogonal&#160;reduction,&#160;real&#160;matrices</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08wef.xml">F08WEF&#160;(DGGHRD)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;unitary&#160;reduction,&#160;complex&#160;matrices</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08wsf.xml">F08WSF&#160;(ZGGHRD)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Reduction&#160;of&#160;eigenvalue&#160;problems&#160;to&#160;condensed&#160;forms,&#160;and&#160;related&#160;operations:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;complex&#160;general&#160;matrix&#160;to&#160;upper&#160;Hessenberg&#160;form:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;apply&#160;orthogonal&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08nuf.xml">F08NUF&#160;(ZUNMHR)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;form&#160;orthogonal&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08ntf.xml">F08NTF&#160;(ZUNGHR)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;reduce&#160;to&#160;Hessenberg&#160;form</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08nsf.xml">F08NSF&#160;(ZGEHRD)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;complex&#160;Hermitian&#160;band&#160;matrix&#160;to&#160;real&#160;symmetric&#160;tridiagonal&#160;form</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08hsf.xml">F08HSF&#160;(ZHBTRD)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;complex&#160;Hermitian&#160;matrix&#160;to&#160;real&#160;symmetric&#160;tridiagonal&#160;form:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;apply&#160;unitary&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08fuf.xml">F08FUF&#160;(ZUNMTR)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;apply&#160;unitary&#160;matrix,&#160;packed&#160;storage</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08guf.xml">F08GUF&#160;(ZUPMTR)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;form&#160;unitary&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08ftf.xml">F08FTF&#160;(ZUNGTR)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;form&#160;unitary&#160;matrix,&#160;packed&#160;storage</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08gtf.xml">F08GTF&#160;(ZUPGTR)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;reduce&#160;to&#160;tridiagonal&#160;form</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08fsf.xml">F08FSF&#160;(ZHETRD)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;reduce&#160;to&#160;tridiagonal&#160;form,&#160;packed&#160;storage</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08gsf.xml">F08GSF&#160;(ZHPTRD)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;complex&#160;rectangular&#160;band&#160;matrix&#160;to&#160;real&#160;upper&#160;bidiagonal&#160;form</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08lsf.xml">F08LSF&#160;(ZGBBRD)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;complex&#160;rectangular&#160;matrix&#160;to&#160;real&#160;bidiagonal&#160;form:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;apply&#160;unitary&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08kuf.xml">F08KUF&#160;(ZUNMBR)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;form&#160;unitary&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08ktf.xml">F08KTF&#160;(ZUNGBR)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;reduce&#160;to&#160;bidiagonal&#160;form</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08ksf.xml">F08KSF&#160;(ZGEBRD)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;real&#160;general&#160;matrix&#160;to&#160;upper&#160;Hessenberg&#160;form:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;apply&#160;orthogonal&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08ngf.xml">F08NGF&#160;(DORMHR)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;form&#160;orthogonal&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08nff.xml">F08NFF&#160;(DORGHR)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;reduce&#160;to&#160;Hessenberg&#160;form</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08nef.xml">F08NEF&#160;(DGEHRD)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;real&#160;rectangular&#160;band&#160;matrix&#160;to&#160;upper&#160;bidiagonal&#160;form</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08lef.xml">F08LEF&#160;(DGBBRD)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;real&#160;rectangular&#160;matrix&#160;to&#160;bidiagonal&#160;form:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;apply&#160;orthogonal&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08kgf.xml">F08KGF&#160;(DORMBR)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;form&#160;orthogonal&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08kff.xml">F08KFF&#160;(DORGBR)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;reduce&#160;to&#160;bidiagonal&#160;form</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08kef.xml">F08KEF&#160;(DGEBRD)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;real&#160;symmetric&#160;band&#160;matrix&#160;to&#160;symmetric&#160;tridiagonal&#160;form</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08hef.xml">F08HEF&#160;(DSBTRD)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;real&#160;symmetric&#160;matrix&#160;to&#160;symmetric&#160;tridiagonal&#160;form:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;apply&#160;orthogonal&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08fgf.xml">F08FGF&#160;(DORMTR)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;apply&#160;orthogonal&#160;matrix,&#160;packed&#160;storage</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08ggf.xml">F08GGF&#160;(DOPMTR)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;form&#160;orthogonal&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08fff.xml">F08FFF&#160;(DORGTR)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;form&#160;orthogonal&#160;matrix,&#160;packed&#160;storage</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08gff.xml">F08GFF&#160;(DOPGTR)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;reduce&#160;to&#160;tridiagonal&#160;form</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08fef.xml">F08FEF&#160;(DSYTRD)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;reduce&#160;to&#160;tridiagonal&#160;form,&#160;packed&#160;storage</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08gef.xml">F08GEF&#160;(DSPTRD)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Reduction&#160;of&#160;generalized&#160;eigenproblems&#160;to&#160;standard&#160;eigenproblems:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;complex&#160;Hermitian-definite&#160;banded&#160;generalized&#160;eigenproblem&#160;<span><i>A</i><i>x</i><span>&#160;=&#160;</span><i>&#955;</i><i>B</i><i>x</i></span></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08usf.xml">F08USF&#160;(ZHBGST)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;complex&#160;Hermitian-definite&#160;generalized&#160;eigenproblem&#160;<span><i>A</i><i>x</i><span>&#160;=&#160;</span><i>&#955;</i><i>B</i><i>x</i></span>, <span><i>A</i><i>B</i><i>x</i><span>&#160;=&#160;</span><i>&#955;</i><i>x</i></span>&#160;or <span><i>B</i><i>A</i><i>x</i><span>&#160;=&#160;</span><i>&#955;</i><i>x</i></span></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08ssf.xml">F08SSF&#160;(ZHEGST)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;complex&#160;Hermitian-definite&#160;generalized&#160;eigenproblem&#160;<span><i>A</i><i>x</i><span>&#160;=&#160;</span><i>&#955;</i><i>B</i><i>x</i></span>, <span><i>A</i><i>B</i><i>x</i><span>&#160;=&#160;</span><i>&#955;</i><i>x</i></span>&#160;or <span><i>B</i><i>A</i><i>x</i><span>&#160;=&#160;</span><i>&#955;</i><i>x</i></span>, packed storage</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08tsf.xml">F08TSF&#160;(ZHPGST)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;real&#160;symmetric-definite&#160;banded&#160;generalized&#160;eigenproblem&#160;<span><i>A</i><i>x</i><span>&#160;=&#160;</span><i>&#955;</i><i>B</i><i>x</i></span></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08uef.xml">F08UEF&#160;(DSBGST)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;real&#160;symmetric-definite&#160;generalized&#160;eigenproblem&#160;<span><i>A</i><i>x</i><span>&#160;=&#160;</span><i>&#955;</i><i>B</i><i>x</i></span>, <span><i>A</i><i>B</i><i>x</i><span>&#160;=&#160;</span><i>&#955;</i><i>x</i></span>&#160;or <span><i>B</i><i>A</i><i>x</i><span>&#160;=&#160;</span><i>&#955;</i><i>x</i></span></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08sef.xml">F08SEF&#160;(DSYGST)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;real&#160;symmetric-definite&#160;generalized&#160;eigenproblem&#160;<span><i>A</i><i>x</i><span>&#160;=&#160;</span><i>&#955;</i><i>B</i><i>x</i></span>, <span><i>A</i><i>B</i><i>x</i><span>&#160;=&#160;</span><i>&#955;</i><i>x</i></span>&#160;or <span><i>B</i><i>A</i><i>x</i><span>&#160;=&#160;</span><i>&#955;</i><i>x</i></span>, packed storage</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08tef.xml">F08TEF&#160;(DSPGST)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr><span><i>R</i><i>Q</i></span>&#160;factorization and related operations:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;complex&#160;matrices:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;apply&#160;unitary&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08cxf.xml">F08CXF&#160;(ZUNMRQ)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;factorization</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08cvf.xml">F08CVF&#160;(ZGERQF)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;form&#160;all&#160;or&#160;part&#160;of&#160;unitary&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08cwf.xml">F08CWF&#160;(ZUNGRQ)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;real&#160;matrices:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;apply&#160;orthogonal&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08ckf.xml">F08CKF&#160;(DORMRQ)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;factorization</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08chf.xml">F08CHF&#160;(DGERQF)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;form&#160;all&#160;or&#160;part&#160;of&#160;orthogonal&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08cjf.xml">F08CJF&#160;(DORGRQ)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Singular&#160;value&#160;decomposition</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;complex&#160;matrix:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;using&#160;a&#160;divide-and-conquer&#160;algorithm</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08krf.xml">F08KRF&#160;(ZGESDD)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;using&#160;bidiagonal&#160;<span><i>Q</i><i>R</i></span>&#160;iteration</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08kpf.xml">F08KPF&#160;(ZGESVD)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;real&#160;matrix:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;preconditioned&#160;Jacobi&#160;SVD&#160;using&#160;fast&#160;scaled&#160;rotations&#160;and&#160;de&#160;Rijks&#160;pivoting</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08khf.xml">F08KHF&#160;(DGEJSV)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;using&#160;a&#160;divide-and-conquer&#160;algorithm</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08kdf.xml">F08KDF&#160;(DGESDD)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;using&#160;bidiagonal&#160;<span><i>Q</i><i>R</i></span>&#160;iteration</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08kbf.xml">F08KBF&#160;(DGESVD)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;using&#160;fast&#160;scaled&#160;rotation&#160;and&#160;de&#160;Rijks&#160;pivoting</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08kjf.xml">F08KJF&#160;(DGESVJ)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Solve&#160;generalized&#160;Sylvester&#160;equation:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;complex&#160;matrices</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08yvf.xml">F08YVF&#160;(ZTGSYL)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;real&#160;matrices</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08yhf.xml">F08YHF&#160;(DTGSYL)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Solve&#160;reduced&#160;form&#160;of&#160;Sylvester&#160;matrix&#160;equation:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;complex&#160;matrices</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08qvf.xml">F08QVF&#160;(ZTRSYL)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;real&#160;matrices</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08qhf.xml">F08QHF&#160;(DTRSYL)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Split&#160;Cholesky&#160;factorization:</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;complex&#160;Hermitian&#160;positive&#160;definite&#160;band&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08utf.xml">F08UTF&#160;(ZPBSTF)</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;real&#160;symmetric&#160;positive&#160;definite&#160;band&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F08/f08uff.xml">F08UFF&#160;(DPBSTF)</a></nobr></td></tr></table></div><h2 class="standard"><a class="sec" name="auxindex" id="auxindex"/>6&#160;&#160;Auxiliary Routines Associated with Library Routine Parameters</h2>
<div class="tablediv"><table class="wdrn"><tbody><tr><td class="libdoc" valign="top" align="left">F08PAZ</td><td class="libdoc" valign="top" align="left">nagf_lapack_dgees_dummy_select<br/>See the description of the argument 
    SELECT in <a class="rout" href="../F08/f08paf.xml">F08PAF (DGEES)</a> and <a class="rout" href="../F08/f08pbf.xml">F08PBF (DGEESX)</a>.</td></tr>
<tr><td class="libdoc" valign="top" align="left">F08PNZ</td><td class="libdoc" valign="top" align="left">nagf_lapack_zgees_dummy_select<br/>See the description of the argument 
    SELECT in <a class="rout" href="../F08/f08pnf.xml">F08PNF (ZGEES)</a> and <a class="rout" href="../F08/f08ppf.xml">F08PPF (ZGEESX)</a>.</td></tr>
<tr><td class="libdoc" valign="top" align="left">F08XAZ</td><td class="libdoc" valign="top" align="left">nagf_lapack_dgges_dummy_selctg<br/>See the description of the argument 
      SELCTG in <a class="rout" href="../F08/f08xaf.xml">F08XAF (DGGES)</a> and <a class="rout" href="../F08/f08xbf.xml">F08XBF (DGGESX)</a>.</td></tr>
<tr><td class="libdoc" valign="top" align="left">F08XNZ</td><td class="libdoc" valign="top" align="left">nagf_lapack_zgges_dummy_selctg<br/>See the description of the argument 
    SELCTG in <a class="rout" href="../F08/f08xnf.xml">F08XNF (ZGGES)</a> and <a class="rout" href="../F08/f08xpf.xml">F08XPF (ZGGESX)</a>.</td></tr></tbody></table></div><h2 class="standard"><a class="sec" name="withdrawn" id="withdrawn"/>7&#160;&#160;Routines Withdrawn or Scheduled for Withdrawal</h2>
<div class="paramtext">None.</div><h2 class="standard"><a class="sec" name="references" id="references"/>8&#160;&#160;References</h2><div class="paramtext"><a name="ref562" id="ref562"/>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 </div>
<div class="paramtext"><a name="ref527" id="ref527"/>Arioli M, Duff I S and de Rijk P P M (1989)  On the augmented system approach to sparse least-squares problems <i>Numer. Math.</i> <b>55</b> 667&#8211;684 </div>
<div class="paramtext"><a name="ref454" id="ref454"/>Demmel J W and Kahan W (1990)  Accurate singular values of bidiagonal matrices <i>SIAM J. Sci. Statist. Comput.</i> <b>11</b> 873&#8211;912 </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>
<div class="paramtext"><a name="ref107" id="ref107"/>Moler C B and Stewart G W (1973)  An algorithm for generalized matrix eigenproblems <i>SIAM J. Numer. Anal.</i> <b>10</b> 241&#8211;256 </div>
<div class="paramtext"><a name="ref111" id="ref111"/>Parlett B N (1998)  <i>The Symmetric Eigenvalue Problem</i> SIAM, Philadelphia </div>
<div class="paramtext"><a name="ref612" id="ref612"/>Stewart G W and Sun J-G (1990)  <i>Matrix Perturbation Theory</i> Academic Press, London </div>
<div class="paramtext"><a name="ref707" id="ref707"/>Ward R C (1981)  Balancing the generalized eigenvalue problem <i>SIAM J. Sci. Stat. Comp.</i> <b>2</b> 141&#8211;152 </div>
<div class="paramtext"><a name="ref003" id="ref003"/>Wilkinson J H (1965)  <i>The Algebraic Eigenvalue Problem</i> Oxford University Press, Oxford </div>
<div class="paramtext"><a name="ref103" id="ref103"/>Wilkinson J H and Reinsch C (1971)  <i>Handbook for Automatic Computation II, Linear Algebra</i> Springer&#8211;Verlag </div><hr/><div><a class="chap" href="f08conts.xml">F08 Chapter Contents</a></div><div><a class="chapint" href="../../pdf/F08/f08intro.pdf">F08 Chapter Introduction (PDF version)</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>