
<?xml-stylesheet type="text/xsl" href="../styles/pmathml.xsl"?>

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:dsi="http://www.w3.org/1999/xlink" xml:space="preserve"><head><title>
  NAG C Library, Mark 7 : 
  f07</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 href="../../pdf/F07/f07_intro.pdf">f07 Chapter Introduction (pdf version)</a></div><div><a href="f07_conts.xml">Chapter Contents</a></div>
<div><a href="../mark7.xml">NAG C Library Contents</a></div><hr/><h1 class="libdoc">NAG C Library  Chapter Introduction<br/><br/>f07 &#8212; Linear Equations (LAPACK)</h1>
<div class="toc"><h3>Contents</h3>
<h2 class="toc"><a class="rtnref" href="#scope">1&#160;&#160;Scope of the Chapter</a></h2>
<h2 class="toc"><a class="rtnref" href="#background">2&#160;&#160;Background to the Problems</a></h2>
<h3 class="toc"><a class="rtnref" href="#background1">2.1&#160;&#160;Notation</a></h3>
<h3 class="toc"><a class="rtnref" href="#background2">2.2&#160;&#160;Matrix Factorizations</a></h3>
<h3 class="toc"><a class="rtnref" href="#background3">2.3&#160;&#160;Solution of Systems of Equations</a></h3>
<h3 class="toc"><a class="rtnref" href="#background4">2.4&#160;&#160;Sensitivity and Error Analysis</a></h3>
<h4 class="toc"><a class="rtnref" href="#background41">2.4.1&#160;&#160;Normwise error bounds</a></h4>
<h4 class="toc"><a class="rtnref" href="#background42">2.4.2&#160;&#160;Estimating condition numbers</a></h4>
<h4 class="toc"><a class="rtnref" href="#background43">2.4.3&#160;&#160;Componentwise error bounds</a></h4>
<h4 class="toc"><a class="rtnref" href="#background44">2.4.4&#160;&#160;Iterative refinement of the solution</a></h4>
<h3 class="toc"><a class="rtnref" href="#background5">2.5&#160;&#160;Matrix Inversion</a></h3>
<h3 class="toc"><a class="rtnref" href="#background6">2.6&#160;&#160;Packed Storage</a></h3>
<h3 class="toc"><a class="rtnref" href="#background7">2.7&#160;&#160;Band Matrices</a></h3>
<h3 class="toc"><a class="rtnref" href="#background8">2.8&#160;&#160;Block Algorithms</a></h3>
<h2 class="toc"><a class="rtnref" href="#available">3&#160;&#160;Recommendations on Choice and Use of Available Functions</a></h2>
<h3 class="toc"><a class="rtnref" href="#recomm_1">3.1&#160;&#160;Available Functions</a></h3>
<h3 class="toc"><a class="rtnref" href="#recomm_2">3.2&#160;&#160;NAG Names and LAPACK Names</a></h3>
<h3 class="toc"><a class="rtnref" href="#recomm_3">3.3&#160;&#160;Matrix Storage Schemes</a></h3>
<h4 class="toc"><a class="rtnref" href="#recomm_31">3.3.1&#160;&#160;Conventional storage</a></h4>
<h4 class="toc"><a class="rtnref" href="#recomm_32">3.3.2&#160;&#160;Packed storage</a></h4>
<h4 class="toc"><a class="rtnref" href="#recomm_33">3.3.3&#160;&#160;Band storage</a></h4>
<h4 class="toc"><a class="rtnref" href="#recomm_34">3.3.4&#160;&#160;Unit triangular matrices</a></h4>
<h4 class="toc"><a class="rtnref" href="#recomm_35">3.3.5&#160;&#160;Real diagonal elements of complex matrices</a></h4>
<h3 class="toc"><a class="rtnref" href="#recomm_4">3.4&#160;&#160;Parameter Conventions</a></h3>
<h4 class="toc"><a class="rtnref" href="#recomm_41">3.4.1&#160;&#160;Option parameters</a></h4>
<h4 class="toc"><a class="rtnref" href="#recomm_42">3.4.2&#160;&#160;Problem dimensions</a></h4>
<h3 class="toc"><a class="rtnref" href="#recomm_5">3.5&#160;&#160;Tables of Available Functions</a></h3>
<h2 class="toc"><a class="rtnref" href="#index">4&#160;&#160;Index</a></h2>
<h2 class="toc"><a class="rtnref" href="#withdrawn">5&#160;&#160;Functions Withdrawn or Scheduled for Withdrawal</a></h2>
<h2 class="toc"><a class="rtnref" href="#references">6&#160;&#160;References</a></h2></div>




<h2><a name="scope" id="scope"/>1&#160;&#160;Scope of the Chapter</h2>

<div class="paramtext">This chapter provides functions for the solution of systems of simultaneous  linear equations, and associated computations.  It provides functions for
</div><ul class="listind"><li class="listind">&#8211; matrix factorizations;</li><li class="listind">&#8211; solution of linear equations;</li><li class="listind">&#8211; estimating matrix condition numbers;</li><li class="listind">&#8211; computing error bounds for the solution of linear equations;</li><li class="listind">&#8211; matrix inversion.</li></ul><div class="paramtext">
Functions 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 systems of linear equations,  you should turn first to the <a class="secref" href="../F04/f04_intro.xml">f04</a> Chapter Introduction.  The decision  trees, at the end of the <a class="secref" href="../F04/f04_intro.xml">f04</a> Chapter Introduction, direct you to the  most appropriate functions in Chapters <a class="secref" href="../F04/f04_conts.xml">f04</a> or <a class="secref" href="../F07/f07_conts.xml">f07</a> for solving your particular  problem.  In particular, Chapter <a class="secref" href="../F04/f04_conts.xml">f04</a> contains <span class="italic">Black Box</span>  functions which enable some standard types of problem to be solved by a  call to a single function.  Where possible, functions in Chapter <a class="secref" href="../F04/f04_conts.xml">f04</a> call  Chapter <a class="secref" href="../F07/f07_conts.xml">f07</a> functions to perform the necessary computational tasks.</div>
<div class="paramtext">The functions in this chapter (<a class="secref" href="../F07/f07_conts.xml">f07</a>)  handle only <span class="italic">dense</span> and  <span class="italic">band</span> matrices (not matrices with more specialized structures,  or general sparse matrices).</div>
<div class="paramtext">The functions in this chapter have all been derived from the LAPACK project  (see <a class="litref" href="#ref562">Anderson <i>et al.</i> (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>





<h2><a 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 systems of linear equations.  Consult a standard textbook,  for example <a class="litref" href="#ref105">Golub  and Van Loan (1996)</a> for a more thorough discussion.</div>


<h3><a name="background1" id="background1"/>2.1&#160;&#160;Notation</h3>

<div class="paramtext">We use the standard notation for a system of simultaneous linear equations:
</div>
<div class="formula-eqn"><a name="eqn2.1" id="eqn2.1"/><table class="formula-eqn"><tr><td class="formula-eqn"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mi>A</mi><mi>x</mi><mo>=</mo><mi>b</mi>
</math></td><td class="formula-eqn2">
      (1)
     </td></tr></table></div>
<div class="paramtext">
where <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>A</mi></math>&#160;is the <span class="italic">coefficient matrix</span>,  <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>b</mi></math>&#160;is the <span class="italic">right-hand side</span>, and <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>x</mi></math>&#160; is the <span class="italic">solution</span>.  <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>A</mi></math>&#160;is assumed to be a square matrix of order <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>n</mi></math>.</div>
<div class="paramtext">If there are several right-hand sides, we write
</div>
<div class="formula-eqn"><a name="eqn2.2" id="eqn2.2"/><table class="formula-eqn"><tr><td class="formula-eqn"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mi>A</mi><mi>X</mi><mo>=</mo><mi>B</mi>
</math></td><td class="formula-eqn2">
      (2)
     </td></tr></table></div>
<div class="paramtext">
where the columns of <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>B</mi></math>&#160;are the individual right-hand sides,  and the columns of <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>X</mi></math>&#160;are the corresponding solutions.</div>
<div class="paramtext">We also use the following notation, both here and in the function documents:
</div><div><table style="align:center" cellpadding="4">
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" align="left"><math xmlns="http://www.w3.org/1998/Math/MathML"><mover><mrow><mi>x</mi></mrow><mo>^</mo></mover></math></td>
    <td class="libdoc" valign="top" align="left">a <span class="italic">computed</span> solution to  <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>A</mi><mi>x</mi><mo>=</mo><mi>b</mi></math>, (which usually differs from the exact solution <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>x</mi></math>&#160;because of round-off error)</td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>r</mi><mo>=</mo><mi>b</mi><mo>-</mo><mi>A</mi><mover><mrow><mi>x</mi></mrow><mo>^</mo></mover></math></td>
    <td class="libdoc" valign="top" align="left">the <span class="italic">residual</span> corresponding to the  computed solution <math xmlns="http://www.w3.org/1998/Math/MathML"><mover><mrow><mi>x</mi></mrow><mo>^</mo></mover></math></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left"><math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mfenced open="&#8214;" close="&#8214;" separators=""><mi>x</mi></mfenced><mi>&#8734;</mi></msub><mo>=</mo><mrow><msub><mi mathvariant="normal">max</mi><mi>i</mi></msub><mfenced open="|" close="|" separators=""><msub><mi>x</mi><mi>i</mi></msub></mfenced></mrow></math></td>
    <td class="libdoc" valign="top" align="left">the infinity-norm of the vector <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>x</mi></math></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left"><math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mfenced open="&#8214;" close="&#8214;" separators=""><mi>A</mi></mfenced><mi>&#8734;</mi></msub><mo>=</mo><mrow><msub><mi mathvariant="normal">max</mi><mi>i</mi></msub><msub><mo>&#8721;</mo><mi>j</mi></msub><mfenced open="|" close="|" separators=""><msub><mi>a</mi><mrow><mi>i</mi><mi>j</mi></mrow></msub></mfenced></mrow></math></td>
    <td class="libdoc" valign="top" align="left">the   infinity-norm of the vector <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>A</mi></math></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left"><math xmlns="http://www.w3.org/1998/Math/MathML"><mfenced open="|" close="|" separators=""><mi>x</mi></mfenced></math></td>
    <td class="libdoc" valign="top" align="left">the  vector with elements <math xmlns="http://www.w3.org/1998/Math/MathML"><mfenced open="|" close="|" separators=""><msub><mi>x</mi><mi>i</mi></msub></mfenced></math></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left"><math xmlns="http://www.w3.org/1998/Math/MathML"><mfenced open="|" close="|" separators=""><mi>A</mi></mfenced></math></td>
    <td class="libdoc" valign="top" align="left">the matrix with elements  <math xmlns="http://www.w3.org/1998/Math/MathML"><mfenced open="|" close="|" separators=""><msub><mi>a</mi><mrow><mi>i</mi><mi>j</mi></mrow></msub></mfenced></math></td>
   </tr>
  </tbody>
 </table></div><div class="paramtext">
Inequalities of the form <math xmlns="http://www.w3.org/1998/Math/MathML"><mfenced open="|" close="|" separators=""><mi>A</mi></mfenced><mo>&#8804;</mo><mfenced open="|" close="|" separators=""><mi>B</mi></mfenced></math>&#160;are interpreted  componentwise, that is <math xmlns="http://www.w3.org/1998/Math/MathML"><mfenced open="|" close="|" separators=""><msub><mi>a</mi><mrow><mi>i</mi><mi>j</mi></mrow></msub></mfenced><mo>&#8804;</mo><mfenced open="|" close="|" separators=""><msub><mi>b</mi><mrow><mi>i</mi><mi>j</mi></mrow></msub></mfenced></math>&#160;for all  <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>i</mi><mo>,</mo><mi>j</mi></math>.</div>




<h3><a name="background2" id="background2"/>2.2&#160;&#160;Matrix Factorizations</h3>

<div class="paramtext">If <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>A</mi></math>&#160;is upper or lower triangular, <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>A</mi><mi>x</mi><mo>=</mo><mi>b</mi></math>&#160;can  be solved by a straightforward process of backward or forward substitution.</div>
<div class="paramtext">Otherwise, the solution is obtained after first factorizing <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>A</mi></math>,  as follows.</div>
<div class="paramtext"><b>General matrices (<span class="bitalic">LU</span> factorization with partial  pivoting)</b>
</div>
<div class="formula"><table class="formula"><tr><td class="formula"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mi>A</mi><mo>=</mo><mi>P</mi><mi>L</mi><mi>U</mi>
</math></td><td class="formula2"/></tr></table></div>
<div class="paramtext">
where <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>P</mi></math>&#160;is a permutation matrix, <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>L</mi></math>&#160;is  lower-triangular with diagonal elements equal to 1, and <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>U</mi></math>&#160; is upper-triangular; the permutation matrix <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>P</mi></math>&#160;(which  represents row interchanges) is needed to ensure numerical stability.</div>
<div class="paramtext"><b>Symmetric positive-definite matrices (Cholesky factorization)</b>
</div>
<div class="formula"><table class="formula"><tr><td class="formula"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mi>A</mi><mo>=</mo><msup><mi>U</mi><mi mathvariant="italic">T</mi></msup><mi>U</mi><mtext>&#8195;&#160;or&#160;&#8195;</mtext><mi>A</mi><mo>=</mo><mi>L</mi><msup><mi>L</mi><mi mathvariant="italic">T</mi></msup>
</math></td><td class="formula2"/></tr></table></div>
<div class="paramtext">
where <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>U</mi></math>&#160;is upper triangular and <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>L</mi></math>&#160;is lower  triangular.</div>
<div class="paramtext"><b>Symmetric indefinite matrices (Bunch&#8211;Kaufman factorization)</b>
</div>
<div class="formula"><table class="formula"><tr><td class="formula"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mi>A</mi><mo>=</mo><mi>P</mi><mi>U</mi><mi>D</mi><msup><mi>U</mi><mi mathvariant="italic">T</mi></msup><msup><mi>P</mi><mi mathvariant="italic">T</mi></msup><mtext>&#8195;&#160;or&#160;&#8195;</mtext><mi>A</mi><mo>=</mo><mi>P</mi><mi>L</mi><mi>D</mi><msup><mi>L</mi><mi mathvariant="italic">T</mi></msup><msup><mi>P</mi><mi mathvariant="italic">T</mi></msup>
</math></td><td class="formula2"/></tr></table></div>
<div class="paramtext">
where <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>P</mi></math>&#160;is a permutation matrix, <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>U</mi></math>&#160;is upper triangular, <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>L</mi></math>&#160;is lower triangular, and <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>D</mi></math>&#160;is a block diagonal matrix with diagonal blocks of order 1 or 2; <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>U</mi></math>&#160;and <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>L</mi></math>&#160;have diagonal elements equal to 1, and have <math xmlns="http://www.w3.org/1998/Math/MathML"><mn>2</mn></math>&#160;by <math xmlns="http://www.w3.org/1998/Math/MathML"><mn>2</mn></math>&#160;unit  matrices on the diagonal corresponding to the <math xmlns="http://www.w3.org/1998/Math/MathML"><mn>2</mn></math>&#160;by <math xmlns="http://www.w3.org/1998/Math/MathML"><mn>2</mn></math>&#160; blocks of <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>D</mi></math>.  The permutation matrix <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>P</mi></math>&#160;(which represents symmetric row-and-column interchanges) and the  <math xmlns="http://www.w3.org/1998/Math/MathML"><mn>2</mn></math>&#160;by <math xmlns="http://www.w3.org/1998/Math/MathML"><mn>2</mn></math>&#160;blocks in <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>D</mi></math>&#160;are needed to  ensure numerical stability.  If <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>A</mi></math>&#160;is in fact positive-definite, no interchanges are needed and the factorization reduces to <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>A</mi><mo>=</mo><mi>U</mi><mi>D</mi><msup><mi>U</mi><mi mathvariant="italic">T</mi></msup></math>&#160;or <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>A</mi><mo>=</mo><mi>L</mi><mi>D</mi><msup><mi>L</mi><mi mathvariant="italic">T</mi></msup></math>&#160;with diagonal <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>D</mi></math>, which is simply a variant form of the Cholesky factorization.</div>




<h3><a name="background3" id="background3"/>2.3&#160;&#160;Solution of Systems of Equations</h3>

<div class="paramtext">Given one of the above matrix factorizations, it is straightforward to  compute a solution to <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>A</mi><mi>x</mi><mo>=</mo><mi>b</mi></math>&#160;by solving two subproblems,  as shown below, first for <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>y</mi></math>&#160;and then for <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>x</mi></math>.  Each subproblem consists essentially of solving a triangular system of  equations by forward or backward substitution; the permutation matrix  <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>P</mi></math>&#160;and the block diagonal matrix <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>D</mi></math>&#160;introduce  only a little extra complication:</div>
<div class="paramtext"><b>General matrices (</b> <span class="bitalic">LU</span>
<b>factorization)</b>
</div>
<div class="formula"><table class="formula"><tr><td class="formula"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mtable columnalign="left">
 <mtr>
  <mtd><mi>L</mi><mi>y</mi><mo>=</mo><msup><mi>P</mi><mi mathvariant="italic">T</mi></msup><mi>b</mi></mtd>
 </mtr><mtr>
  <mtd><mi>U</mi><mi>x</mi><mo>=</mo><mi>y</mi></mtd>
 </mtr>
</mtable>
</math></td><td class="formula2"/></tr></table></div>
<div class="paramtext">
<b>Symmetric positive-definite matrices (Cholesky factorization)</b>
</div>
<div class="formula"><table class="formula"><tr><td class="formula"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mtable columnalign="left">
 <mtr>
  <mtd><msup><mi>U</mi><mi mathvariant="italic">T</mi></msup><mi>y</mi><mo>=</mo><mi>b</mi></mtd>
 </mtr><mtr>
  <mtd><mi>U</mi><mi>x</mi><mo>=</mo><mi>y</mi></mtd>
 </mtr>
</mtable>
<mtext>&#8195;&#160;or&#160;&#8195;</mtext>
<mtable columnalign="left">
 <mtr>
  <mtd><mi>L</mi><mi>y</mi><mo>=</mo><mi>b</mi></mtd>
 </mtr><mtr>
  <mtd><msup><mi>L</mi><mi mathvariant="italic">T</mi></msup><mi>x</mi><mo>=</mo><mi>y</mi></mtd>
 </mtr>
</mtable>
</math></td><td class="formula2"/></tr></table></div>
<div class="paramtext">
<b>Symmetric indefinite matrices (Bunch&#8211;Kaufman factorization)</b>
</div>
<div class="formula"><table class="formula"><tr><td class="formula"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mtable columnalign="left">
 <mtr>
  <mtd><mi>P</mi><mi>U</mi><mi>D</mi><mi>y</mi><mo>=</mo><mi>b</mi></mtd>
 </mtr><mtr>
  <mtd><msup><mi>U</mi><mi mathvariant="italic">T</mi></msup><msup><mi>P</mi><mi mathvariant="italic">T</mi></msup><mi>x</mi><mo>=</mo><mi>y</mi></mtd>
 </mtr>
</mtable>
<mtext>&#8195;&#160;or&#160;&#8195;</mtext>
<mtable columnalign="left">
 <mtr>
  <mtd><mi>P</mi><mi>L</mi><mi>D</mi><mi>y</mi><mo>=</mo><mi>b</mi></mtd>
 </mtr><mtr>
  <mtd><msup><mi>L</mi><mi mathvariant="italic">T</mi></msup><msup><mi>P</mi><mi mathvariant="italic">T</mi></msup><mi>x</mi><mo>=</mo><mi>y</mi></mtd>
 </mtr>
</mtable>
</math></td><td class="formula2"/></tr></table></div>
<div class="paramtext">
</div>




<h3><a name="background4" id="background4"/>2.4&#160;&#160;Sensitivity and Error Analysis</h3>




<h4><a name="background41" id="background41"/>2.4.1&#160;&#160;Normwise error bounds</h4>

<div class="paramtext">Frequently, in practical problems the data <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>A</mi></math>&#160;and  <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>b</mi></math>&#160;are not known exactly, and it is then important  to understand how uncertainties or perturbations in the data can  affect the solution.</div>
<div class="paramtext">If <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>x</mi></math>&#160;is the exact solution to <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>A</mi><mi>x</mi><mo>=</mo><mi>b</mi></math>,  and <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>x</mi><mo>+</mo><mi>&#948;</mi><mi>x</mi></math>&#160;is the exact solution to a perturbed  problem <math xmlns="http://www.w3.org/1998/Math/MathML"><mfenced separators=""><mi>A</mi><mo>+</mo><mi>&#948;</mi><mi>A</mi></mfenced><mfenced separators=""><mi>x</mi><mo>+</mo><mi>&#948;</mi><mi>x</mi></mfenced><mo>=</mo><mfenced separators=""><mi>b</mi><mo>+</mo><mi>&#948;</mi><mi>b</mi></mfenced></math>, then
</div>
<div class="formula"><table class="formula"><tr><td class="formula"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mfrac><mrow><mfenced open="&#8214;" close="&#8214;" separators=""><mi>&#948;</mi><mi>x</mi></mfenced></mrow><mrow><mfenced open="&#8214;" close="&#8214;" separators=""><mi>x</mi></mfenced></mrow></mfrac><mo>&#8804;</mo><mi>&#954;</mi><mfenced separators=""><mi>A</mi></mfenced>
<mfenced separators=""><mfrac><mrow><mfenced open="&#8214;" close="&#8214;" separators=""><mi>&#948;</mi><mi>A</mi></mfenced></mrow><mrow><mfenced open="&#8214;" close="&#8214;" separators=""><mi>A</mi></mfenced></mrow></mfrac><mo>+</mo><mfrac><mrow><mfenced open="&#8214;" close="&#8214;" separators=""><mi>&#948;</mi><mi>b</mi></mfenced></mrow><mrow><mfenced open="&#8214;" close="&#8214;" separators=""><mi>b</mi></mfenced></mrow></mfrac></mfenced><mo>+</mo><mo>&#8943;</mo><mfenced separators=""><mtext>2nd&#160;-&#160;order&#160;terms</mtext></mfenced>
</math></td><td class="formula2"/></tr></table></div>
<div class="paramtext">
where <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>&#954;</mi><mfenced separators=""><mi>A</mi></mfenced></math>&#160;is the <span class="italic">condition number</span>  of <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>A</mi></math>&#160;defined by
</div>
<div class="formula-eqn"><a name="eqn2.3" id="eqn2.3"/><table class="formula-eqn"><tr><td class="formula-eqn"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mi>&#954;</mi><mfenced separators=""><mi>A</mi></mfenced><mo>=</mo><mfenced open="&#8214;" close="&#8214;" separators=""><mi>A</mi></mfenced><mo>.</mo><mfenced open="&#8214;" close="&#8214;" separators=""><msup><mi>A</mi><mrow><mo>-</mo><mn>1</mn></mrow></msup></mfenced><mtext>.</mtext>
</math></td><td class="formula-eqn2">
      (3)
     </td></tr></table></div>
<div class="paramtext">
In other words, relative errors in <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>A</mi></math>&#160;or <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>b</mi></math>&#160;may  be amplified in <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>x</mi></math>&#160;by a factor <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>&#954;</mi><mfenced separators=""><mi>A</mi></mfenced></math>.  Section <a class="secref" href="#background42">2.4.2</a> discusses how to compute or estimate  <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>&#954;</mi><mfenced separators=""><mi>A</mi></mfenced></math>.</div>
<div class="paramtext">Similar considerations apply when we study the effects of <span class="italic">rounding  errors</span> introduced by computation in finite precision.  The effects  of rounding errors can be shown to be equivalent to perturbations in the original data, such that <math xmlns="http://www.w3.org/1998/Math/MathML"><mfrac other="display"><mrow><mfenced open="&#8214;" close="&#8214;" separators=""><mi>&#948;</mi><mi>A</mi></mfenced></mrow><mrow><mfenced open="&#8214;" close="&#8214;" separators=""><mi>A</mi></mfenced></mrow></mfrac></math>&#160;and  <math xmlns="http://www.w3.org/1998/Math/MathML"><mfrac other="display"><mrow><mfenced open="&#8214;" close="&#8214;" separators=""><mi>&#948;</mi><mi>b</mi></mfenced></mrow><mrow><mfenced open="&#8214;" close="&#8214;" separators=""><mi>b</mi></mfenced></mrow></mfrac></math>&#160;are usually at most  <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>p</mi><mfenced separators=""><mi>n</mi></mfenced><mi>&#949;</mi></math>, where <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>&#949;</mi></math>&#160;is the <span class="bitalic">machine precision</span>  and <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>p</mi><mfenced separators=""><mi>n</mi></mfenced></math>&#160;is an increasing function of <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>n</mi></math>&#160;which  is seldom larger than <math xmlns="http://www.w3.org/1998/Math/MathML"><mn>10</mn><mi>n</mi></math>&#160;(although in theory it can be as  large as <math xmlns="http://www.w3.org/1998/Math/MathML"><msup><mn>2</mn><mrow><mi>n</mi><mo>-</mo><mn>1</mn></mrow></msup></math>).</div>
<div class="paramtext">In other words, the computed solution <math xmlns="http://www.w3.org/1998/Math/MathML"><mover><mrow><mi>x</mi></mrow><mo>^</mo></mover></math>&#160;is the exact  solution of a linear system <math xmlns="http://www.w3.org/1998/Math/MathML"><mfenced separators=""><mi>A</mi><mo>+</mo><mi>&#948;</mi><mi>A</mi></mfenced><mover><mrow><mi>x</mi></mrow><mo>^</mo></mover><mo>=</mo><mi>b</mi><mo>+</mo><mi>&#948;</mi><mi>b</mi></math>&#160; which is close to the original system in a normwise sense.</div>




<h4><a name="background42" id="background42"/>2.4.2&#160;&#160;Estimating condition numbers</h4>

<div class="paramtext">The previous section has emphasized the usefulness of the quantity <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>&#954;</mi><mfenced separators=""><mi>A</mi></mfenced></math>&#160;in understanding the sensitivity of the solution of <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>A</mi><mi>x</mi><mo>=</mo><mi>b</mi></math>.  To compute the value of <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>&#954;</mi><mfenced separators=""><mi>A</mi></mfenced></math>&#160;from equation  (<a class="eqnref" href="#eqn2.3">3</a>) is more expensive than solving  <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>A</mi><mi>x</mi><mo>=</mo><mi>b</mi></math>&#160;in the first place.  Hence it is standard practice to <span class="italic">estimate</span>
<math xmlns="http://www.w3.org/1998/Math/MathML"><mi>&#954;</mi><mfenced separators=""><mi>A</mi></mfenced></math>, in either the 1-norm or the <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>&#8734;</mi></math>&#160;norm, by a method which only requires <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>O</mi><mfenced separators=""><msup><mi>n</mi><mn>2</mn></msup></mfenced></math>&#160;additional operations, assuming that a suitable factorization of <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>A</mi></math>&#160;is available.</div>
<div class="paramtext">The method used in this chapter is Higham's modification of Hager's method  (see <a class="litref" href="#ref526">Higham (1988)</a>).  It yields an estimate which is never larger than the  true value, but which seldom falls short by more than a factor of 3 (although artificial examples can be constructed where it is much smaller).  This is  acceptable since it is the order of magnitude of <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>&#954;</mi><mfenced separators=""><mi>A</mi></mfenced></math>&#160; which is important rather than its precise value.</div>
<div class="paramtext">Because <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>&#954;</mi><mfenced separators=""><mi>A</mi></mfenced></math>&#160;is infinite if <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>A</mi></math>&#160;is singular,  the functions in this chapter actually return the <span class="italic">reciprocal</span>  of <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>&#954;</mi><mfenced separators=""><mi>A</mi></mfenced></math>.</div>




<h4><a name="background43" id="background43"/>2.4.3&#160;&#160;Componentwise error bounds</h4>

<div class="paramtext">A disadvantage of normwise error bounds is that they do not reflect any special structure in the data <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>A</mi></math>&#160;and <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>b</mi></math>&#160; &#8211; that is, a pattern of elements which are known to be  zero &#8211;  and the bounds are dominated by the largest elements  in the data.</div>
<div class="paramtext">Componentwise error bounds overcome these limitations.  Instead of the normwise relative error, we can bound the relative error in <span class="italic">each  component</span> of <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>A</mi></math>&#160;and <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>b</mi></math>:
</div>
<div class="formula"><table class="formula"><tr><td class="formula"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<msub><mi mathvariant="normal">max</mi><mrow><mi>i</mi><mi>j</mi><mi>k</mi></mrow></msub>
<mfenced separators=""><mfrac><mrow><mfenced open="|" close="|" separators=""><mi>&#948;</mi><msub><mi>a</mi><mrow><mi>i</mi><mi>j</mi></mrow></msub></mfenced></mrow><mrow><mfenced open="|" close="|" separators=""><msub><mi>a</mi><mrow><mi>i</mi><mi>j</mi></mrow></msub></mfenced></mrow></mfrac><mo>,</mo>   <mfrac><mrow><mfenced open="|" close="|" separators=""><mi>&#948;</mi><msub><mi>b</mi><mi>k</mi></msub></mfenced></mrow><mrow><mfenced open="|" close="|" separators=""><msub><mi>b</mi><mi>k</mi></msub></mfenced></mrow></mfrac></mfenced>
<mo>&#8804;</mo><mi>&#969;</mi>
</math></td><td class="formula2"/></tr></table></div>
<div class="paramtext">
where the <span class="italic">componentwise backward error
bound</span>  <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>&#969;</mi></math>&#160;is given by
</div>
<div class="formula"><table class="formula"><tr><td class="formula"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mi>&#969;</mi><mo>=</mo><msub><mi mathvariant="normal">max</mi><mi>i</mi></msub><mfrac><mrow><mfenced open="|" close="|" separators=""><msub><mi>r</mi><mi>i</mi></msub></mfenced></mrow><mrow><msub><mfenced separators=""><mfenced open="|" close="|" separators=""><mi>A</mi></mfenced><mo>.</mo><mfenced open="|" close="|" separators="">
<mover><mrow><mi>x</mi></mrow><mo>^</mo></mover></mfenced><mo>+</mo><mfenced open="|" close="|" separators=""><mi>b</mi></mfenced></mfenced><mi>i</mi></msub></mrow></mfrac><mtext>.</mtext>
</math></td><td class="formula2"/></tr></table></div>
<div class="paramtext">
Functions are provided in this chapter which compute
<math xmlns="http://www.w3.org/1998/Math/MathML"><mi>&#969;</mi></math>,  and also compute a <span class="italic">forward error
bound</span> which is sometimes  much sharper than the normwise
bound given earlier:
</div>
<div class="formula"><table class="formula"><tr><td class="formula"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mfrac><mrow><msub><mfenced open="&#8214;" close="&#8214;" separators=""><mi>x</mi><mo>-</mo><mover><mrow><mi>x</mi></mrow><mo>^</mo></mover></mfenced><mi>&#8734;</mi></msub></mrow><mrow><msub><mfenced open="&#8214;" close="&#8214;" separators=""><mi>x</mi></mfenced><mi>&#8734;</mi></msub></mrow></mfrac>
<mo>&#8804;</mo>
<mfrac><mrow><msub><mfenced open="&#8214;" close="&#8214;" separators=""><mfenced open="|" close="|" separators=""><msup><mi>A</mi><mrow><mo>-</mo><mn>1</mn></mrow></msup></mfenced><mo>.</mo><mfenced open="|" close="|" separators=""><mi>r</mi></mfenced></mfenced><mi>&#8734;</mi></msub></mrow><mrow><msub><mfenced open="&#8214;" close="&#8214;" separators=""><mi>x</mi></mfenced><mi>&#8734;</mi></msub></mrow></mfrac><mtext>.</mtext>
</math></td><td class="formula2"/></tr></table></div>
<div class="paramtext">
Care is taken when computing this bound to allow for
rounding  errors in computing <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>r</mi></math>.  The norm
<math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mfenced open="&#8214;" close="&#8214;" separators=""><mfenced open="|" close="|" separators=""><msup><mi>A</mi><mrow><mo>-</mo><mn>1</mn></mrow></msup></mfenced><mo>.</mo><mfenced open="|" close="|" separators=""><mi>r</mi></mfenced></mfenced><mi>&#8734;</mi></msub></math>&#160;is estimated  cheaply
(without computing <math xmlns="http://www.w3.org/1998/Math/MathML"><msup><mi>A</mi><mrow><mo>-</mo><mn>1</mn></mrow></msup></math>) by a modification of  the method used to estimate <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>&#954;</mi><mfenced separators=""><mi>A</mi></mfenced></math>.</div>




<h4><a name="background44" id="background44"/>2.4.4&#160;&#160;Iterative refinement of the solution</h4>

<div class="paramtext">If <math xmlns="http://www.w3.org/1998/Math/MathML"><mover><mrow><mi>x</mi></mrow><mo>^</mo></mover></math>&#160;is an approximate computed solution to  <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>A</mi><mi>x</mi><mo>=</mo><mi>b</mi></math>, and <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>r</mi></math>&#160;is the corresponding  residual, then a procedure for <span class="italic">iterative refinement</span>  of <math xmlns="http://www.w3.org/1998/Math/MathML"><mover><mrow><mi>x</mi></mrow><mo>^</mo></mover></math>&#160;can be defined as follows, starting with  <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>x</mi><mn>0</mn></msub><mo>=</mo><mover><mrow><mi>x</mi></mrow><mo>^</mo></mover></math>:</div>
<div class="paramtext">for <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>i</mi><mo>=</mo><mn>0</mn><mo>,</mo><mn>1</mn><mo>,</mo><mo>&#8230;</mo><mtext/></math>, until convergence
</div><div><table style="align:center" cellpadding="4">
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" align="left">compute</td>
    <td class="libdoc" valign="top" align="left"><math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>r</mi><mi>i</mi></msub><mo>=</mo><mi>b</mi><mo>-</mo><mi>A</mi><msub><mi>x</mi><mi>i</mi></msub></math></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">solve</td>
    <td class="libdoc" valign="top" align="left"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>A</mi><msub><mi>d</mi><mi>i</mi></msub><mo>=</mo><msub><mi>r</mi><mi>i</mi></msub></math></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">compute</td>
    <td class="libdoc" valign="top" align="left"><math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>x</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow></msub><mo>=</mo><msub><mi>x</mi><mi>i</mi></msub><mo>+</mo><msub><mi>d</mi><mi>i</mi></msub></math></td>
   </tr>
  </tbody>
 </table></div><div class="paramtext">
In Chapter <a class="secref" href="../F04/f04_conts.xml">f04</a>, functions are provided which perform this procedure  using <span class="bitalic">additional precision</span> to compute <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>r</mi></math>, and are thus able to reduce the <span class="italic">forward</span>
<span class="italic">error</span> to the level of  <span class="bitalic">machine precision</span>.</div>
<div class="paramtext">The functions in this chapter do <span class="italic">not</span> use <span class="bitalic">additional precision</span> to  compute <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>r</mi></math>, and cannot guarantee a small forward error,  but can guarantee a <span class="italic">small backward error</span> (except in  rare cases when <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>A</mi></math>&#160;is very ill-conditioned, or when  <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>A</mi></math>&#160;and <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>x</mi></math>&#160;are sparse in such a way that  <math xmlns="http://www.w3.org/1998/Math/MathML"><mfenced open="|" close="|" separators=""><mi>A</mi></mfenced><mo>.</mo><mfenced open="|" close="|" separators=""><mi>x</mi></mfenced></math>&#160;has a zero or very small component).  The iterations  continue until the backward error has been reduced as much as possible;  usually only one iteration is needed, and at most five iterations are  allowed.</div>





<h3><a name="background5" id="background5"/>2.5&#160;&#160;Matrix Inversion</h3>

<div class="paramtext">It is seldom necessary to compute an explicit inverse of a matrix.  In particular, do <span class="italic">not</span> attempt to solve <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>A</mi><mi>x</mi><mo>=</mo><mi>b</mi></math>&#160; by first computing <math xmlns="http://www.w3.org/1998/Math/MathML"><msup><mi>A</mi><mrow><mo>-</mo><mn>1</mn></mrow></msup></math>&#160;and then forming the matrix-vector  product <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>x</mi><mo>=</mo><msup><mi>A</mi><mrow><mo>-</mo><mn>1</mn></mrow></msup><mi>b</mi></math>; the procedure described in  Section <a class="secref" href="#background3">2.3</a> is more efficient and more  accurate.</div>
<div class="paramtext">However, functions are provided for the rare occasions when an inverse  is needed, using one of the factorizations described in  Section <a class="secref" href="#background2">2.2</a>.</div>




<h3><a name="background6" id="background6"/>2.6&#160;&#160;Packed Storage</h3>

<div class="paramtext">Functions 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 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 <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>n</mi><mfenced separators=""><mi>n</mi><mo>+</mo><mn>1</mn></mfenced><mo>/</mo><mn>2</mn></math>; in other words, 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 Section <a class="secref" href="#recomm_32">3.3.2</a>.  It may also  be used for triangular matrices.</div>
<div class="paramtext">Functions designed for packed storage perform the same number of arithmetic operations as functions which use conventional storage,  but they are usually less efficient, especially on high-performance computers, so there is then a trade-off between storage and efficiency.</div>




<h3><a name="background7" id="background7"/>2.7&#160;&#160;Band Matrices</h3>

<div class="paramtext">A <span class="italic">band</span> matrix is one whose non-zero elements are  confined to a relatively small number of sub-diagonals or super-diagonals  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 used for band matrices is described in  Section <a class="secref" href="#recomm_33">3.3.3</a>.</div>
<div class="paramtext">The <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>L</mi><mi>U</mi></math>&#160;factorization for general matrices, and the Cholesky factorization for symmetric positive-definite matrices both preserve bandedness.  Hence functions are provided which take advantage of the  band structure when solving systems of linear equations.</div>
<div class="paramtext">The Cholesky factorization preserves bandedness in a very precise sense: the factor <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>U</mi></math>&#160;or <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>L</mi></math>&#160;has the same number  of super-diagonals or sub-diagonals as the original matrix.  In the  <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>L</mi><mi>U</mi></math>&#160;factorization, the row-interchanges modify the band  structure: if <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>A</mi></math>&#160;has <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>k</mi><mi>l</mi></msub></math>&#160;sub-diagonals  and <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>k</mi><mi>u</mi></msub></math>&#160;super-diagonals, then <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>L</mi></math>&#160;is not  a band matrix but still has at most <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>k</mi><mi>l</mi></msub></math>&#160;non-zero elements  below the diagonal in each column; and <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>U</mi></math>&#160;has at most  <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>k</mi><mi>l</mi></msub><mo>+</mo><msub><mi>k</mi><mi>u</mi></msub></math>&#160;super-diagonals.</div>
<div class="paramtext">The Bunch&#8211;Kaufman factorization does not preserve bandedness, because  of the need for symmetric row-and-column permutations; hence no functions are provided for symmetric indefinite band matrices.</div>
<div class="paramtext">The inverse of a band matrix does not in general have a band structure, so no functions are provided for computing inverses of band matrices.</div>




<h3><a name="background8" id="background8"/>2.8&#160;&#160;Block Algorithms</h3>

<div class="paramtext">Many of the functions in this chapter use what is termed a <span class="italic">block  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 most 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 Chapter <a class="secref" href="../F16/f16_conts.xml">f16</a>), which are the key to achieving high performance on  many modern computers.  See <a class="litref" href="#ref105">Golub  and Van Loan (1996)</a> or <a class="litref" href="#ref562">Anderson <i>et al.</i> (1999)</a> for more about block algorithms.</div>
<div class="paramtext">The performance of a block algorithm varies to some extent with the <span class="bitalic">blocksize</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.  Users of the library do not normally need to be aware of what value is being used.  Different block sizes may be used for different functions.  Values in the range 16 to 64 are typical.</div>
<div class="paramtext">On some machines there may be no advantage from using a block algorithm, and then the functions use an <span class="italic">unblocked</span>  algorithm (effectively a blocksize of 1), relying solely on calls to the  Level 2 BLAS (see Chapter <a class="secref" href="../F16/f16_conts.xml">f16</a> again).</div>







<h2><a name="available" id="available"/>3&#160;&#160;Recommendations on Choice and Use of Available Functions</h2>





<h3><a name="recomm_1" id="recomm_1"/>3.1&#160;&#160;Available Functions</h3>

<div class="paramtext">Tables <a class="tableref" href="#table1">1</a> and <a class="tableref" href="#table2">2</a> in  Section <a class="secref" href="#recomm_5">3.5</a> show the  functions which are provided for performing different computations on  different types of matrices.  Table <a class="tableref" href="#table1">1</a> shows functions for real matrices;  Table <a class="tableref" href="#table2">2</a> shows functions for complex matrices.  Each entry in the table gives  the NAG function name, the LAPACK single precision name, and the LAPACK  double precision name (see Section <a class="secref" href="#recomm_2">3.2</a>).</div>
<div class="paramtext">Functions are provided for the following types of matrix:
</div><ul class="listind"><li class="listind">general</li><li class="listind">general band</li><li class="listind">symmetric or Hermitian positive-definite</li><li class="listind">symmetric or Hermitian positive-definite (packed storage)</li><li class="listind">symmetric or Hermitian positive-definite band</li><li class="listind">symmetric or Hermitian indefinite</li><li class="listind">symmetric or Hermitian indefinite (packed storage)</li><li class="listind">triangular</li><li class="listind">triangular (packed storage)</li><li class="listind">triangular band</li></ul><div class="paramtext">
For each of the above types of matrix (except where indicated), functions are provided to perform the following computations:
</div><ol class="listalpha"><li class="listalpha">(except for triangular matrices) factorize the matrix (see  Section <a class="secref" href="#background2">2.2</a>);</li><li class="listalpha">solve a system of linear equations, using the factorization (see  Section <a class="secref" href="#background3">2.3</a>);</li><li class="listalpha">estimate the condition number of the matrix, using the factorization  (see Section <a class="secref" href="#background42">2.4.2</a>); these functions also require  the norm of the original matrix (except when the matrix is triangular) which  may be computed by a function in Chapter <a class="secref" href="../F16/f16_conts.xml">f16</a>;</li><li class="listalpha">refine the solution and compute forward and backward error bounds (see Sections <a class="secref" href="#background43">2.4.3</a> and <a class="secref" href="#background44">2.4.4</a>); these functions require the original matrix and right-hand side, as well as the factorization returned from (a) and the solution returned from (b);</li><li class="listalpha">(except for band matrices) invert the matrix, using the factorization  (see Section <a class="secref" href="#background5">2.5</a>).</li></ol><div class="paramtext">
Thus, to solve a particular problem, it is usually necessary to call two or more functions in succession.  This is illustrated in the example programs  in the function documents.</div>




<h3><a name="recomm_2" id="recomm_2"/>3.2&#160;&#160;NAG Names and LAPACK Names</h3>

<div class="paramtext">As well as the NAG function name (beginning <a class="secref" href="../F07/f07_conts.xml">f07</a>-), Tables <a class="tableref" href="#table1">1</a> and <a class="tableref" href="#table2">2</a> show the LAPACK function names in both single and double precision.</div>

<div class="paramtext">The functions may be called either by their NAG short names or by their NAG long names.  The NAG long names for a function is simply the LAPACK name (in lower case) prepended by nag_, for example, <a class="rtnref" href="../F07/f07fdc.xml">nag_dpotrf</a> is the long name for <a class="rtnref" href="../F07/f07fdc.xml">f07fdc</a>.</div>
<div class="paramtext">References to Chapter <a class="secref" href="../F07/f07_conts.xml">f07</a> functions in the Manual normally include the LAPACK

double precision names,

for  example, <a class="rtnref" href="../F07/f07adc.xml">nag_dgetrf (f07adc)</a>.</div>
<div class="paramtext">The LAPACK function names follow a simple scheme (which is similar to that used for the BLAS in Chapter <a class="secref" href="../F16/f16_conts.xml">f16</a>).  Each name has the structure <b>XYYZZZ</b>, where the components have the following meanings:
</div><table><tr>
<td style="width:1.5em;" valign="top">&#8211;</td>
<td valign="top">the initial letter <b>X</b> indicates the  data type (real or complex) and precision:
 <table><tr>
<td style="width:NaNem;" valign="top"/>
<td valign="top">S &#8211; real, single precision</td>
</tr><tr>
<td style="width:NaNem;" valign="top"/>
<td valign="top">D &#8211; real, double precision</td>
</tr><tr>
<td style="width:NaNem;" valign="top"/>
<td valign="top">C &#8211; complex, single precision</td>
</tr><tr>
<td style="width:NaNem;" valign="top"/>
<td valign="top">Z &#8211; complex, double precision</td>
</tr></table></td>
</tr><tr>
<td style="width:1.5em;" valign="top">&#8211;</td>
<td valign="top">the 2nd and 3rd letters <b>YY</b> indicate the type of the matrix <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>A</mi></math>&#160;(and in some cases its storage scheme):
 <table><tr>
<td style="width:NaNem;" valign="top"/>
<td valign="top">GE &#8211; general</td>
</tr><tr>
<td style="width:NaNem;" valign="top"/>
<td valign="top">GB &#8211; general band</td>
</tr><tr>
<td style="width:NaNem;" valign="top"/>
<td valign="top">PO &#8211; symmetric or Hermitian positive-definite</td>
</tr><tr>
<td style="width:NaNem;" valign="top"/>
<td valign="top">PP &#8211; symmetric or Hermitian positive-definite (packed storage)</td>
</tr><tr>
<td style="width:NaNem;" valign="top"/>
<td valign="top">PB &#8211; symmetric or Hermitian positive-definite band</td>
</tr><tr>
<td style="width:NaNem;" valign="top"/>
<td valign="top">SY &#8211; symmetric indefinite</td>
</tr><tr>
<td style="width:NaNem;" valign="top"/>
<td valign="top">SP &#8211; symmetric indefinite (packed storage)</td>
</tr><tr>
<td style="width:NaNem;" valign="top"/>
<td valign="top">HE &#8211; (complex) Hermitian indefinite</td>
</tr><tr>
<td style="width:NaNem;" valign="top"/>
<td valign="top">HP &#8211; (complex) Hermitian indefinite (packed storage)</td>
</tr><tr>
<td style="width:NaNem;" valign="top"/>
<td valign="top">TR &#8211; triangular</td>
</tr><tr>
<td style="width:NaNem;" valign="top"/>
<td valign="top">TP &#8211; triangular (packed storage)</td>
</tr><tr>
<td style="width:NaNem;" valign="top"/>
<td valign="top">TB &#8211; triangular band</td>
</tr></table></td>
</tr><tr>
<td style="width:1.5em;" valign="top">&#8211;</td>
<td valign="top">the last 3 letters <b>ZZZ</b> indicate the computation performed:
 <table><tr>
<td style="width:NaNem;" valign="top"/>
<td valign="top">TRF &#8211; triangular factorization</td>
</tr><tr>
<td style="width:NaNem;" valign="top"/>
<td valign="top">TRS &#8211; solution of linear equations, using the factorization</td>
</tr><tr>
<td style="width:NaNem;" valign="top"/>
<td valign="top">CON &#8211; estimate condition number</td>
</tr><tr>
<td style="width:NaNem;" valign="top"/>
<td valign="top">RFS &#8211; refine solution and compute error bounds</td>
</tr><tr>
<td style="width:NaNem;" valign="top"/>
<td valign="top">TRI &#8211; compute inverse, using the factorization</td>
</tr></table></td>
</tr></table><div class="paramtext">
Thus the function SGETRF performs a triangular factorization of a real general matrix in a single precision implementation
;
the corresponding function in a double precision implementation is DGETRF.</div>





<h3><a name="recomm_3" id="recomm_3"/>3.3&#160;&#160;Matrix Storage Schemes</h3>

<div class="paramtext">In this chapter the following different storage schemes are used for matrices:
</div><ul class="listind"><li class="listind">&#8211; conventional storage;</li><li class="listind">&#8211; packed storage for symmetric, Hermitian or triangular matrices;</li><li class="listind">&#8211; band storage for band matrices.</li></ul><div class="paramtext">
These storage schemes are compatible with those used in

Chapter <a class="secref" href="../F16/f16_conts.xml">f16</a>
(especially in the BLAS) and Chapter <a class="secref" href="../F08/f08_conts.xml">f08</a>, but different schemes for packed or band storage are used in a few older functions  in&#160;Chapters <a class="secref" href="../F01/f01_conts.xml">f01</a>, <a class="secref" href="../F02/f02_conts.xml">f02</a>, <a class="secref" href="../F03/f03_conts.xml">f03</a> and <a class="secref" href="../F04/f04_conts.xml">f04</a>.</div>
<div class="paramtext">In the examples below, <math xmlns="http://www.w3.org/1998/Math/MathML"><mo>*</mo></math>&#160;indicates an array element which  need not be set and is not referenced by the functions.  The examples  illustrate only the relevant part of the arrays;  array arguments may of course have additional rows or columns, according  to the usual rules for passing array arguments in C or Fortran 77.</div>


<h4><a name="recomm_31" id="recomm_31"/>3.3.1&#160;&#160;Conventional storage</h4>


<div class="paramtext">Matrices may be stored column-wise or row-wise as described in Section <a class="secref" href="../genint/essint.xml#usingarrayrefs">2.2.1.4</a> of the Essential Introduction: a matrix <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>A</mi></math>&#160;is stored in a one-dimensional array <a class="argref" href="../F07/f07adc.xml#a">a</a>, with matrix element <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>a</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub></math>&#160;stored column-wise in array element <math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mrow><maction actiontype="link" dsi:href="f07adc.xml#a" dsi:type="simple"><mi mathcolor="#EE0000" mathvariant="bold">a</mi></maction><mfenced open="[" close="]"><mrow><mfenced separators=""><mi>j</mi><mo>-</mo><mn>1</mn></mfenced><mo>&#215;</mo><maction actiontype="link" dsi:href="f07adc.xml#pda" dsi:type="simple"><mi mathcolor="#EE0000" mathvariant="bold">pda</mi></maction><mo>+</mo><mi>i</mi><mo>-</mo><mn>1</mn></mrow></mfenced></mrow></mrow></math>&#160;or row-wise in array element <math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mrow><maction actiontype="link" dsi:href="f07adc.xml#a" dsi:type="simple"><mi mathcolor="#EE0000" mathvariant="bold">a</mi></maction><mfenced open="[" close="]"><mrow><mfenced separators=""><mi>i</mi><mo>-</mo><mn>1</mn></mfenced><mo>&#215;</mo><maction actiontype="link" dsi:href="f07adc.xml#pda" dsi:type="simple"><mi mathcolor="#EE0000" mathvariant="bold">pda</mi></maction><mo>+</mo><mi>j</mi><mo>-</mo><mn>1</mn></mrow></mfenced></mrow></mrow></math>&#160;where <a class="argref" href="../F07/f07adc.xml#pda">pda</a> is the principle dimension of the array (i.e., the stride separating row or column elements of the matrix respectively).  Most functions in this chapter contain the <a class="argref" href="../F07/f07fdc.xml#order">order</a> argument which can be set to <b>Nag_ColMajor</b> for column-wise storage or <b>Nag_RowMajor</b> for row-wise storage of matrices.  Where groups of functions are intended to be used together, the value of the <a class="argref" href="../F07/f07fdc.xml#order">order</a> argument passed must be consistent throughout.</div>
<div class="paramtext">If a matrix is <b>triangular</b> (upper or lower, as specified by the  argument <a class="argref" href="../F07/f07fdc.xml#uplo">uplo</a>), only the elements of the relevant triangle are stored; the remaining elements of the array need not be set.  Such elements are indicated by * in the examples below.</div>

<div class="paramtext">For example, when  <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>n</mi><mo>=</mo><mn>3</mn></math>:
</div><div><table style="align:center" border="3" cellpadding="2">
  
  
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" align="center"><b><a class="argref" href="../F07/f07fdc.xml#order">order</a></b></td>
    <td class="libdoc" valign="top" align="center"><b><a class="argref" href="../F07/f07fdc.xml#uplo">uplo</a></b></td>
    <td class="libdoc" valign="top" align="center"><b>Triangular matrix <math xmlns="http://www.w3.org/1998/Math/MathML"><mi mathvariant="bold-italic">A</mi></math></b></td>
    <td class="libdoc" valign="top" align="center"><b>Storage in array <a class="argref" href="../F07/f07adc.xml#a">a</a></b></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="center"><b>Nag_ColMajor</b></td>
    <td class="libdoc" valign="top" align="center"><b>Nag_Upper</b></td>
    <td class="libdoc" valign="top" align="center"><math xmlns="http://www.w3.org/1998/Math/MathML">
<mfenced separators="">
 <mtable columnalign="left">
  <mtr>
   <mtd><msub><mi>a</mi><mn>11</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>12</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>13</mn></msub></mtd>
  </mtr><mtr>
   <mtd/>
   <mtd><msub><mi>a</mi><mn>22</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>23</mn></msub></mtd>
  </mtr><mtr>
   <mtd/>
   <mtd/>
   <mtd><msub><mi>a</mi><mn>33</mn></msub></mtd>
  </mtr>
 </mtable>
</mfenced>
</math></td>
    <td class="libdoc" valign="top" align="center"><math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>a</mi><mn>11</mn></msub><mo>*</mo><mo>*</mo><msub><mi>a</mi><mn>12</mn></msub><msub><mi>a</mi><mn>22</mn></msub><mo>*</mo><msub><mi>a</mi><mn>13</mn></msub><msub><mi>a</mi><mn>23</mn></msub><msub><mi>a</mi><mn>33</mn></msub></math></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="center"><b>Nag_RowMajor</b></td>
    <td class="libdoc" valign="top" align="center"><b>Nag_Upper</b></td>
    <td class="libdoc" valign="top" align="center"><math xmlns="http://www.w3.org/1998/Math/MathML">
<mfenced separators="">
 <mtable columnalign="left">
  <mtr>
   <mtd><msub><mi>a</mi><mn>11</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>12</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>13</mn></msub></mtd>
  </mtr><mtr>
   <mtd/>
   <mtd><msub><mi>a</mi><mn>22</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>23</mn></msub></mtd>
  </mtr><mtr>
   <mtd/>
   <mtd/>
   <mtd><msub><mi>a</mi><mn>33</mn></msub></mtd>
  </mtr>
 </mtable>
</mfenced>
</math></td>
    <td class="libdoc" valign="top" align="center"><math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>a</mi><mn>11</mn></msub><msub><mi>a</mi><mn>12</mn></msub><msub><mi>a</mi><mn>13</mn></msub><mo>*</mo><msub><mi>a</mi><mn>22</mn></msub><msub><mi>a</mi><mn>23</mn></msub><mo>*</mo><mo>*</mo><msub><mi>a</mi><mn>33</mn></msub></math></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="center"><b>Nag_ColMajor</b></td>
    <td class="libdoc" valign="top" align="center"><b>Nag_Lower</b></td>
    <td class="libdoc" valign="top" align="center"><math xmlns="http://www.w3.org/1998/Math/MathML">
<mfenced separators="">
 <mtable columnalign="left">
  <mtr>
   <mtd><msub><mi>a</mi><mn>11</mn></msub></mtd>
   <mtd/>
   <mtd/></mtr><mtr>
   <mtd><msub><mi>a</mi><mn>21</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>22</mn></msub></mtd>
   <mtd/></mtr><mtr>
   <mtd><msub><mi>a</mi><mn>31</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>32</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>33</mn></msub></mtd>
  </mtr>
 </mtable>
</mfenced>
</math></td>
    <td class="libdoc" valign="top" align="center"><math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>a</mi><mn>11</mn></msub><msub><mi>a</mi><mn>21</mn></msub><msub><mi>a</mi><mn>31</mn></msub><mo>*</mo><msub><mi>a</mi><mn>22</mn></msub><msub><mi>a</mi><mn>32</mn></msub><mo>*</mo><mo>*</mo><msub><mi>a</mi><mn>33</mn></msub></math></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="center"><b>Nag_RowMajor</b></td>
    <td class="libdoc" valign="top" align="center"><b>Nag_Lower</b></td>
    <td class="libdoc" valign="top" align="center"><math xmlns="http://www.w3.org/1998/Math/MathML">
<mfenced separators="">
 <mtable columnalign="left">
  <mtr>
   <mtd><msub><mi>a</mi><mn>11</mn></msub></mtd>
   <mtd/>
   <mtd/></mtr><mtr>
   <mtd><msub><mi>a</mi><mn>21</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>22</mn></msub></mtd>
   <mtd/></mtr><mtr>
   <mtd><msub><mi>a</mi><mn>31</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>32</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>33</mn></msub></mtd>
  </mtr>
 </mtable>
</mfenced>
</math></td>
    <td class="libdoc" valign="top" align="center"><math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>a</mi><mn>11</mn></msub><mo>*</mo><mo>*</mo><msub><mi>a</mi><mn>21</mn></msub><msub><mi>a</mi><mn>22</mn></msub><mo>*</mo><msub><mi>a</mi><mn>31</mn></msub><msub><mi>a</mi><mn>32</mn></msub><msub><mi>a</mi><mn>33</mn></msub></math></td>
   </tr>
  </tbody>
 </table></div><div class="paramtext">
</div>

<div class="paramtext">Functions which handle <b>symmetric</b> or <b>Hermitian</b>  matrices allow for either the upper or lower triangle of the matrix (as  specified by <a class="argref" href="../F07/f07fdc.xml#uplo">uplo</a>) to be stored in the corresponding elements of the array;  the remaining elements of the array need not be set.</div>


<div class="paramtext">For example, when  <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>n</mi><mo>=</mo><mn>3</mn></math>:
</div><div><table style="align:center" border="3" cellpadding="2">
  
  
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" align="center"><b><a class="argref" href="../F07/f07fdc.xml#order">order</a></b></td>
    <td class="libdoc" valign="top" align="center"><b><a class="argref" href="../F07/f07fdc.xml#uplo">uplo</a></b></td>
    <td class="libdoc" valign="top" align="center"><b>Hermitian matrix</b> <math xmlns="http://www.w3.org/1998/Math/MathML"><mi mathvariant="bold-italic">A</mi></math></td>
    <td class="libdoc" valign="top" align="center"><b>Storage in array <a class="argref" href="../F07/f07adc.xml#a">a</a></b></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="center"><b>Nag_ColMajor</b></td>
    <td class="libdoc" valign="top" align="center"><b>Nag_Upper</b></td>
    <td class="libdoc" valign="top" align="center"><math xmlns="http://www.w3.org/1998/Math/MathML">
<mfenced separators="">
 <mtable columnalign="left">
  <mtr>
   <mtd><msub><mi>a</mi><mn>11</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>12</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>13</mn></msub></mtd>
  </mtr><mtr>
   <mtd><msub><mover><mrow><mi>a</mi></mrow><mo>-</mo></mover><mn>12</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>22</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>23</mn></msub></mtd>
  </mtr><mtr>
   <mtd><msub><mover><mrow><mi>a</mi></mrow><mo>-</mo></mover><mn>13</mn></msub></mtd>
   <mtd><msub><mover><mrow><mi>a</mi></mrow><mo>-</mo></mover><mn>23</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>33</mn></msub></mtd>
  </mtr>
 </mtable>
</mfenced>
</math></td>
    <td class="libdoc" valign="top" align="center"><math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>a</mi><mn>11</mn></msub><mo>*</mo><mo>*</mo><msub><mi>a</mi><mn>12</mn></msub><msub><mi>a</mi><mn>22</mn></msub><mo>*</mo><msub><mi>a</mi><mn>13</mn></msub><msub><mi>a</mi><mn>23</mn></msub><msub><mi>a</mi><mn>33</mn></msub></math></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="center"><b>Nag_RowMajor</b></td>
    <td class="libdoc" valign="top" align="center"><b>Nag_Upper</b></td>
    <td class="libdoc" valign="top" align="center"><math xmlns="http://www.w3.org/1998/Math/MathML">
<mfenced separators="">
 <mtable columnalign="left">
  <mtr>
   <mtd><msub><mi>a</mi><mn>11</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>12</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>13</mn></msub></mtd>
  </mtr><mtr>
   <mtd><msub><mover><mrow><mi>a</mi></mrow><mo>-</mo></mover><mn>12</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>22</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>23</mn></msub></mtd>
  </mtr><mtr>
   <mtd><msub><mover><mrow><mi>a</mi></mrow><mo>-</mo></mover><mn>13</mn></msub></mtd>
   <mtd><msub><mover><mrow><mi>a</mi></mrow><mo>-</mo></mover><mn>23</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>33</mn></msub></mtd>
  </mtr>
 </mtable>
</mfenced>
</math></td>
    <td class="libdoc" valign="top" align="center"><math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>a</mi><mn>11</mn></msub><msub><mi>a</mi><mn>12</mn></msub><msub><mi>a</mi><mn>13</mn></msub><mo>*</mo><msub><mi>a</mi><mn>22</mn></msub><msub><mi>a</mi><mn>23</mn></msub><mo>*</mo><mo>*</mo><msub><mi>a</mi><mn>33</mn></msub></math></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="center"><b>Nag_ColMajor</b></td>
    <td class="libdoc" valign="top" align="center"><b>Nag_Lower</b></td>
    <td class="libdoc" valign="top" align="center"><math xmlns="http://www.w3.org/1998/Math/MathML">
<mfenced separators="">
 <mtable columnalign="left">
  <mtr>
   <mtd><msub><mi>a</mi><mn>11</mn></msub></mtd>
   <mtd><msub><mover><mrow><mi>a</mi></mrow><mo>-</mo></mover><mn>21</mn></msub></mtd>
   <mtd><msub><mover><mrow><mi>a</mi></mrow><mo>-</mo></mover><mn>31</mn></msub></mtd>
  </mtr><mtr>
   <mtd><msub><mi>a</mi><mn>21</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>22</mn></msub></mtd>
   <mtd><msub><mover><mrow><mi>a</mi></mrow><mo>-</mo></mover><mn>32</mn></msub></mtd>
  </mtr><mtr>
   <mtd><msub><mi>a</mi><mn>31</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>32</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>33</mn></msub></mtd>
  </mtr>
 </mtable>
</mfenced>
</math></td>
    <td class="libdoc" valign="top" align="center"><math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>a</mi><mn>11</mn></msub><msub><mi>a</mi><mn>21</mn></msub><msub><mi>a</mi><mn>31</mn></msub><mo>*</mo><msub><mi>a</mi><mn>22</mn></msub><msub><mi>a</mi><mn>32</mn></msub><mo>*</mo><mo>*</mo><msub><mi>a</mi><mn>33</mn></msub>
</math></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="center"><b>Nag_RowMajor</b></td>
    <td class="libdoc" valign="top" align="center"><b>Nag_Lower</b></td>
    <td class="libdoc" valign="top" align="center"><math xmlns="http://www.w3.org/1998/Math/MathML">
<mfenced separators="">
 <mtable columnalign="left">
  <mtr>
   <mtd><msub><mi>a</mi><mn>11</mn></msub></mtd>
   <mtd><msub><mover><mrow><mi>a</mi></mrow><mo>-</mo></mover><mn>21</mn></msub></mtd>
   <mtd><msub><mover><mrow><mi>a</mi></mrow><mo>-</mo></mover><mn>31</mn></msub></mtd>
  </mtr><mtr>
   <mtd><msub><mi>a</mi><mn>21</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>22</mn></msub></mtd>
   <mtd><msub><mover><mrow><mi>a</mi></mrow><mo>-</mo></mover><mn>32</mn></msub></mtd>
  </mtr><mtr>
   <mtd><msub><mi>a</mi><mn>31</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>32</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>33</mn></msub></mtd>
  </mtr>
 </mtable>
</mfenced>
</math></td>
    <td class="libdoc" valign="top" align="center"><math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>a</mi><mn>11</mn></msub><mo>*</mo><mo>*</mo><msub><mi>a</mi><mn>21</mn></msub><msub><mi>a</mi><mn>22</mn></msub><mo>*</mo><msub><mi>a</mi><mn>31</mn></msub><msub><mi>a</mi><mn>32</mn></msub><msub><mi>a</mi><mn>33</mn></msub>
</math></td>
   </tr>
  </tbody>
 </table></div><div class="paramtext">
</div>




<h4><a name="recomm_32" id="recomm_32"/>3.3.2&#160;&#160;Packed storage</h4>

<div class="paramtext">Symmetric, Hermitian or triangular matrices may be stored more compactly, if the relevant triangle (again as specified by <a class="argref" href="../F07/f07fdc.xml#uplo">uplo</a>) is packed by columns
or rows
in a one-dimensional array.  In Chapters <a class="secref" href="../F07/f07_conts.xml">f07</a> and <a class="secref" href="../F08/f08_conts.xml">f08</a>, arrays which hold matrices in packed storage have names ending in <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>P</mi></math>.  The storage of matrix elements <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>a</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub></math>&#160;are stored in the packed array <a class="argref" href="../F07/f07gdc.xml#ap">ap</a> as follows:

</div><ul class="listind"><li class="listind">if <math xmlns="http://www.w3.org/1998/Math/MathML"><maction actiontype="link" dsi:href="f07fdc.xml#uplo" dsi:type="simple"><mi mathcolor="#EE0000" mathvariant="bold">uplo</mi></maction></math>&#160;<math xmlns="http://www.w3.org/1998/Math/MathML"><mo>=</mo></math>&#160;<b>Nag_Upper</b> then
 <ul class="listind"><li class="listind">if <math xmlns="http://www.w3.org/1998/Math/MathML"><maction actiontype="link" dsi:href="f07fdc.xml#order" dsi:type="simple"><mi mathcolor="#EE0000" mathvariant="bold">order</mi></maction><mo>=</mo><mi mathvariant="bold">Nag_ColMajor</mi></math>, <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>a</mi><mrow><mi>i</mi><mi>j</mi></mrow></msub></math>&#160;is stored in <math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mrow><maction actiontype="link" dsi:href="f07gdc.xml#ap" dsi:type="simple"><mi mathcolor="#EE0000" mathvariant="bold">ap</mi></maction><mfenced open="[" close="]"><mrow><mfenced separators=""><mi>i</mi><mo>-</mo><mn>1</mn></mfenced><mo>+</mo><mi>j</mi><mfenced separators=""><mi>j</mi><mo>-</mo><mn>1</mn></mfenced><mo>/</mo><mn>2</mn></mrow></mfenced></mrow></mrow></math>&#160;for <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>i</mi><mo>&#8804;</mo><mi>j</mi></math>;</li><li class="listind">if <math xmlns="http://www.w3.org/1998/Math/MathML"><maction actiontype="link" dsi:href="f07fdc.xml#order" dsi:type="simple"><mi mathcolor="#EE0000" mathvariant="bold">order</mi></maction><mo>=</mo><mi mathvariant="bold">Nag_RowMajor</mi></math>, <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>a</mi><mrow><mi>i</mi><mi>j</mi></mrow></msub></math>&#160;is stored in <math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mrow><maction actiontype="link" dsi:href="f07gdc.xml#ap" dsi:type="simple"><mi mathcolor="#EE0000" mathvariant="bold">ap</mi></maction><mfenced open="[" close="]"><mrow><mfenced separators=""><mi>j</mi><mo>-</mo><mn>1</mn></mfenced><mo>+</mo><mfenced separators=""><mn>2</mn><mi>n</mi><mo>-</mo><mi>i</mi></mfenced><mfenced separators=""><mi>i</mi><mo>-</mo><mn>1</mn></mfenced><mo>/</mo><mn>2</mn></mrow></mfenced></mrow></mrow></math>&#160;for <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>i</mi><mo>&#8804;</mo><mi>j</mi></math>.</li></ul></li><li class="listind">if <math xmlns="http://www.w3.org/1998/Math/MathML"><maction actiontype="link" dsi:href="f07fdc.xml#uplo" dsi:type="simple"><mi mathcolor="#EE0000" mathvariant="bold">uplo</mi></maction></math>&#160;<math xmlns="http://www.w3.org/1998/Math/MathML"><mo>=</mo></math>&#160;<b>Nag_Lower</b> then
 <ul class="listind"><li class="listind">if <math xmlns="http://www.w3.org/1998/Math/MathML"><maction actiontype="link" dsi:href="f07fdc.xml#order" dsi:type="simple"><mi mathcolor="#EE0000" mathvariant="bold">order</mi></maction><mo>=</mo><mi mathvariant="bold">Nag_ColMajor</mi></math>, <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>a</mi><mrow><mi>i</mi><mi>j</mi></mrow></msub></math>&#160;is stored in <math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mrow><maction actiontype="link" dsi:href="f07gdc.xml#ap" dsi:type="simple"><mi mathcolor="#EE0000" mathvariant="bold">ap</mi></maction><mfenced open="[" close="]"><mrow><mfenced separators=""><mi>i</mi><mo>-</mo><mn>1</mn></mfenced><mo>+</mo><mfenced separators=""><mn>2</mn><mi>n</mi><mo>-</mo><mi>j</mi></mfenced><mfenced separators=""><mi>j</mi><mo>-</mo><mn>1</mn></mfenced><mo>/</mo><mn>2</mn></mrow></mfenced></mrow></mrow></math>&#160;for <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>j</mi><mo>&#8804;</mo><mi>i</mi></math>;</li><li class="listind">if <math xmlns="http://www.w3.org/1998/Math/MathML"><maction actiontype="link" dsi:href="f07fdc.xml#order" dsi:type="simple"><mi mathcolor="#EE0000" mathvariant="bold">order</mi></maction><mo>=</mo><mi mathvariant="bold">Nag_RowMajor</mi></math>, <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>a</mi><mrow><mi>i</mi><mi>j</mi></mrow></msub></math>&#160;is stored in <math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mrow><maction actiontype="link" dsi:href="f07gdc.xml#ap" dsi:type="simple"><mi mathcolor="#EE0000" mathvariant="bold">ap</mi></maction><mfenced open="[" close="]"><mrow><mfenced separators=""><mi>j</mi><mo>-</mo><mn>1</mn></mfenced><mo>+</mo><mi>i</mi><mfenced separators=""><mi>i</mi><mo>-</mo><mn>1</mn></mfenced><mo>/</mo><mn>2</mn></mrow></mfenced></mrow></mrow></math>&#160;for <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>j</mi><mo>&#8804;</mo><mi>i</mi></math>.</li></ul></li></ul><div class="paramtext">
</div>
<div class="paramtext">For example:

</div><div><table style="align:center" border="3" cellpadding="2">
  
  
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" align="center"><b><a class="argref" href="../F07/f07fdc.xml#order">order</a></b></td>
    <td class="libdoc" valign="top" align="center"><b><a class="argref" href="../F07/f07fdc.xml#uplo">uplo</a></b></td>
    <td class="libdoc" valign="top" align="center"><b>Triangle of matrix</b> <math xmlns="http://www.w3.org/1998/Math/MathML"><mi mathvariant="bold-italic">A</mi></math></td>
    <td class="libdoc" valign="top" align="center"><b>Packed storage in array <a class="argref" href="../F07/f07gdc.xml#ap">ap</a></b></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="center"><b>Nag_ColMajor</b></td>
    <td class="libdoc" valign="top" align="center"><b>Nag_Upper</b></td>
    <td class="libdoc" valign="top" align="center"><math xmlns="http://www.w3.org/1998/Math/MathML">
<mfenced separators="">
 <mtable columnalign="left">
  <mtr>
   <mtd><msub><mi>a</mi><mn>11</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>12</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>13</mn></msub></mtd>
  </mtr><mtr>
   <mtd/>
   <mtd><msub><mi>a</mi><mn>22</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>23</mn></msub></mtd>
  </mtr><mtr>
   <mtd/>
   <mtd/>
   <mtd><msub><mi>a</mi><mn>33</mn></msub></mtd>
  </mtr>
 </mtable>
</mfenced>
</math></td>
    <td class="libdoc" valign="top" align="center"><math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>a</mi><mn>11</mn></msub><munder><mrow><msub><mi>a</mi><mn>12</mn></msub><msub><mi>a</mi><mn>22</mn></msub></mrow><mo>&#65080;</mo></munder><munder><mrow><msub><mi>a</mi><mn>13</mn></msub><msub><mi>a</mi><mn>23</mn></msub><msub><mi>a</mi><mn>33</mn></msub></mrow><mo>&#65080;</mo></munder></math></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="center"><b>Nag_RowMajor</b></td>
    <td class="libdoc" valign="top" align="center"><b>Nag_Upper</b></td>
    <td class="libdoc" valign="top" align="center"><math xmlns="http://www.w3.org/1998/Math/MathML">
<mfenced separators="">
 <mtable columnalign="left">
  <mtr>
   <mtd><msub><mi>a</mi><mn>11</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>12</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>13</mn></msub></mtd>
  </mtr><mtr>
   <mtd/>
   <mtd><msub><mi>a</mi><mn>22</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>23</mn></msub></mtd>
  </mtr><mtr>
   <mtd/>
   <mtd/>
   <mtd><msub><mi>a</mi><mn>33</mn></msub></mtd>
  </mtr>
 </mtable>
</mfenced>
</math></td>
    <td class="libdoc" valign="top" align="center"><math xmlns="http://www.w3.org/1998/Math/MathML"><munder><mrow><msub><mi>a</mi><mn>11</mn></msub><msub><mi>a</mi><mn>12</mn></msub><msub><mi>a</mi><mn>13</mn></msub></mrow><mo>&#65080;</mo></munder><munder><mrow><msub><mi>a</mi><mn>22</mn></msub><msub><mi>a</mi><mn>23</mn></msub></mrow><mo>&#65080;</mo></munder><msub><mi>a</mi><mn>33</mn></msub></math></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="center"><b>Nag_ColMajor</b></td>
    <td class="libdoc" valign="top" align="center"><b>Nag_Lower</b></td>
    <td class="libdoc" valign="top" align="center"><math xmlns="http://www.w3.org/1998/Math/MathML">
<mfenced separators="">
 <mtable columnalign="left">
  <mtr>
   <mtd><msub><mi>a</mi><mn>11</mn></msub></mtd>
   <mtd/>
   <mtd/></mtr><mtr>
   <mtd><msub><mi>a</mi><mn>21</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>22</mn></msub></mtd>
   <mtd/></mtr><mtr>
   <mtd><msub><mi>a</mi><mn>31</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>32</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>33</mn></msub></mtd>
  </mtr>
 </mtable>
</mfenced>
</math></td>
    <td class="libdoc" valign="top" align="center"><math xmlns="http://www.w3.org/1998/Math/MathML"><munder><mrow><msub><mi>a</mi><mn>11</mn></msub><msub><mi>a</mi><mn>21</mn></msub><msub><mi>a</mi><mn>31</mn></msub></mrow><mo>&#65080;</mo></munder><munder><mrow><msub><mi>a</mi><mn>22</mn></msub><msub><mi>a</mi><mn>32</mn></msub></mrow><mo>&#65080;</mo></munder><msub><mi>a</mi><mn>33</mn></msub></math></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="center"><b>Nag_RowMajor</b></td>
    <td class="libdoc" valign="top" align="center"><b>Nag_Lower</b></td>
    <td class="libdoc" valign="top" align="center"><math xmlns="http://www.w3.org/1998/Math/MathML">
<mfenced separators="">
 <mtable columnalign="left">
  <mtr>
   <mtd><msub><mi>a</mi><mn>11</mn></msub></mtd>
   <mtd/>
   <mtd/></mtr><mtr>
   <mtd><msub><mi>a</mi><mn>21</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>22</mn></msub></mtd>
   <mtd/></mtr><mtr>
   <mtd><msub><mi>a</mi><mn>31</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>32</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>33</mn></msub></mtd>
  </mtr>
 </mtable>
</mfenced>
</math></td>
    <td class="libdoc" valign="top" align="center"><math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>a</mi><mn>11</mn></msub><munder><mrow><msub><mi>a</mi><mn>21</mn></msub><msub><mi>a</mi><mn>22</mn></msub></mrow><mo>&#65080;</mo></munder><munder><mrow><msub><mi>a</mi><mn>31</mn></msub><msub><mi>a</mi><mn>32</mn></msub><msub><mi>a</mi><mn>33</mn></msub></mrow><mo>&#65080;</mo></munder></math></td>
   </tr>
  </tbody>
 </table></div><div class="paramtext">
</div>
<div class="paramtext">Note that for real symmetric matrices, packing the upper triangle by columns is equivalent to packing the lower triangle by rows; packing the lower triangle by columns is equivalent to packing the upper triangle by rows.  (For complex Hermitian matrices, the only difference is that the off-diagonal elements are conjugated.)</div>




<h4><a name="recomm_33" id="recomm_33"/>3.3.3&#160;&#160;Band storage</h4>


<div class="paramtext">A band matrix with <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>k</mi><mi>l</mi></msub></math>&#160;sub-diagonals and <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>k</mi><mi>u</mi></msub></math>&#160;super-diagonals may be stored compactly in a notional two-dimensional array with <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>k</mi><mi>l</mi></msub><mo>+</mo><msub><mi>k</mi><mi>u</mi></msub><mo>+</mo><mn>1</mn></math>&#160;rows and <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>n</mi></math>&#160;columns if stored column-wise or <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>n</mi></math>&#160;rows and <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>k</mi><mi>l</mi></msub><mo>+</mo><msub><mi>k</mi><mi>u</mi></msub><mo>+</mo><mn>1</mn></math>&#160;columns if stored row-wise.  In column-major order, elements of a column of the matrix are stored contiguously in the array, and elements of the diagonals of the matrix are stored with constant stride (i.e., in a row of the two-dimensional array).  In row-major order, elements of a row of the matrix are stored contiguously in the array, and elements of a diagonal of the matrix are stored with constant stride (i.e., in a column of the two-dimensional array).  These storage schemes should only be used in practice if <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>k</mi><mi>l</mi></msub></math>, <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>k</mi><mi>u</mi></msub><mo>&#8810;</mo><mi>n</mi></math>, although the functions in Chapters <a class="secref" href="../F07/f07_conts.xml">f07</a> and <a class="secref" href="../F08/f08_conts.xml">f08</a> work correctly for all values of <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>k</mi><mi>l</mi></msub></math>&#160;and <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>k</mi><mi>u</mi></msub></math>.  In  Chapters <a class="secref" href="../F07/f07_conts.xml">f07</a> and <a class="secref" href="../F08/f08_conts.xml">f08</a> arrays which hold matrices in band storage have names ending in <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>B</mi></math>.</div>
<div class="paramtext">To be precise, elements of matrix elements <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>a</mi><mrow><mi>i</mi><mi>j</mi></mrow></msub></math>&#160;are stored as follows:</div>

<div class="paramtext">
</div><ul class="listind"><li class="listind">if <math xmlns="http://www.w3.org/1998/Math/MathML"><maction actiontype="link" dsi:href="f07fdc.xml#order" dsi:type="simple"><mi mathcolor="#EE0000" mathvariant="bold">order</mi></maction><mo>=</mo><mi mathvariant="bold">Nag_ColMajor</mi></math>, <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>a</mi><mrow><mi>i</mi><mi>j</mi></mrow></msub></math>&#160;is stored in <math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mrow><maction actiontype="link" dsi:href="f07bdc.xml#ab" dsi:type="simple"><mi mathcolor="#EE0000" mathvariant="bold">ab</mi></maction><mfenced open="[" close="]"><mrow><mfenced separators=""><msub><mi>k</mi><mi>u</mi></msub><mo>+</mo><mi>i</mi><mo>-</mo><mi>j</mi></mfenced><mo>&#215;</mo><maction actiontype="link" dsi:href="f07bdc.xml#pdab" dsi:type="simple"><mi mathcolor="#EE0000" mathvariant="bold">pdab</mi></maction><mo>+</mo><mi>j</mi></mrow></mfenced></mrow></mrow></math>;</li><li class="listind">if <math xmlns="http://www.w3.org/1998/Math/MathML"><maction actiontype="link" dsi:href="f07fdc.xml#order" dsi:type="simple"><mi mathcolor="#EE0000" mathvariant="bold">order</mi></maction><mo>=</mo><mi mathvariant="bold">Nag_RowMajor</mi></math>, <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>a</mi><mrow><mi>i</mi><mi>j</mi></mrow></msub></math>&#160;is stored in <math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mrow><maction actiontype="link" dsi:href="f07bdc.xml#ab" dsi:type="simple"><mi mathcolor="#EE0000" mathvariant="bold">ab</mi></maction><mfenced open="[" close="]"><mrow><mfenced separators=""><msub><mi>k</mi><mi>l</mi></msub><mo>+</mo><mi>j</mi><mo>-</mo><mi>i</mi></mfenced><mo>&#215;</mo><maction actiontype="link" dsi:href="f07bdc.xml#pdab" dsi:type="simple"><mi mathcolor="#EE0000" mathvariant="bold">pdab</mi></maction><mo>+</mo><mi>i</mi></mrow></mfenced></mrow></mrow></math>,</li></ul><div class="paramtext">
where <math xmlns="http://www.w3.org/1998/Math/MathML"><maction actiontype="link" dsi:href="f07bdc.xml#pdab" dsi:type="simple"><mi mathcolor="#EE0000" mathvariant="bold">pdab</mi></maction><mo>&#8805;</mo><msub><mi>k</mi><mi>l</mi></msub><mo>+</mo><msub><mi>k</mi><mi>u</mi></msub><mo>+</mo><mn>1</mn></math>&#160;is the stride between diagonal elements and where <math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>max</mi><mo>&#8289;</mo><mfenced separators=""><mn>1</mn><mo>,</mo><mi>i</mi><mo>-</mo><msub><mi>k</mi><mi>l</mi></msub></mfenced></mrow><mo>&#8804;</mo><mi>j</mi><mo>&#8804;</mo><mrow><mi>min</mi><mo>&#8289;</mo><mfenced separators=""><mi>n</mi><mo>,</mo><mi>i</mi><mo>+</mo><msub><mi>k</mi><mi>u</mi></msub></mfenced></mrow></math>.</div>
<div class="paramtext">For example, when <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>n</mi><mo>=</mo><mn>5</mn></math>, <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>k</mi><mi>l</mi></msub><mo>=</mo><mn>2</mn></math>&#160; and <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>k</mi><mi>u</mi></msub><mo>=</mo><mn>1</mn></math>:

</div><div><table style="align:center" border="3" cellpadding="2">
  
  
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" align="center"><b>Band matrix <math xmlns="http://www.w3.org/1998/Math/MathML"><mi mathvariant="bold-italic">A</mi></math></b></td>
    <td class="libdoc" valign="top" align="center" colspan="2"><b>Band storage in array <a class="argref" href="../F07/f07bdc.xml#ab">ab</a></b></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="center">&#160;</td>
    <td class="libdoc" valign="top" align="center"><math xmlns="http://www.w3.org/1998/Math/MathML"><maction actiontype="link" dsi:href="f07fdc.xml#order" dsi:type="simple"><mi mathcolor="#EE0000" mathvariant="bold">order</mi></maction><mo>=</mo><mi mathvariant="bold">Nag_ColMajor</mi></math></td>
    <td class="libdoc" valign="top" align="center"><math xmlns="http://www.w3.org/1998/Math/MathML"><maction actiontype="link" dsi:href="f07fdc.xml#order" dsi:type="simple"><mi mathcolor="#EE0000" mathvariant="bold">order</mi></maction><mo>=</mo><mi mathvariant="bold">Nag_RowMajor</mi></math></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="center"><math xmlns="http://www.w3.org/1998/Math/MathML">
<mtable columnalign="left">
 <mtr>
  <mtd><msub><mi>a</mi><mn>11</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>12</mn></msub></mtd>
  <mtd/>
  <mtd/>
  <mtd/></mtr><mtr>
  <mtd><msub><mi>a</mi><mn>21</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>22</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>23</mn></msub></mtd>
  <mtd/>
  <mtd/></mtr><mtr>
  <mtd><msub><mi>a</mi><mn>31</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>32</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>33</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>34</mn></msub></mtd>
  <mtd/></mtr><mtr>
  <mtd/>
  <mtd><msub><mi>a</mi><mn>42</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>43</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>44</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>45</mn></msub></mtd>
 </mtr><mtr>
  <mtd/>
  <mtd/>
  <mtd><msub><mi>a</mi><mn>53</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>54</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>55</mn></msub></mtd>
 </mtr>
</mtable>
</math></td>
    <td class="libdoc" valign="top" align="center"><math xmlns="http://www.w3.org/1998/Math/MathML">
<mtable columnalign="left">
 <mtr>
  <mtd><mtext>*</mtext></mtd>
  <mtd><msub><mi>a</mi><mn>12</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>23</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>34</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>45</mn></msub></mtd>
 </mtr><mtr>
  <mtd><msub><mi>a</mi><mn>11</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>22</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>33</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>44</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>55</mn></msub></mtd>
 </mtr><mtr>
  <mtd><msub><mi>a</mi><mn>21</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>32</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>43</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>54</mn></msub></mtd>
  <mtd><mtext>*</mtext></mtd>
 </mtr><mtr>
  <mtd><msub><mi>a</mi><mn>31</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>42</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>53</mn></msub></mtd>
  <mtd><mtext>*</mtext></mtd>
  <mtd><mtext>*</mtext></mtd>
 </mtr>
</mtable>
</math></td>
    <td class="libdoc" valign="top" align="center"><math xmlns="http://www.w3.org/1998/Math/MathML">
<mtable columnalign="left">
 <mtr>
  <mtd><mtext>*</mtext></mtd>
  <mtd><mtext>*</mtext></mtd>
  <mtd><msub><mi>a</mi><mn>11</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>12</mn></msub></mtd>
 </mtr><mtr>
  <mtd><mtext>*</mtext></mtd>
  <mtd><msub><mi>a</mi><mn>21</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>22</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>23</mn></msub></mtd>
 </mtr><mtr>
  <mtd><msub><mi>a</mi><mn>31</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>32</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>33</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>34</mn></msub></mtd>
 </mtr><mtr>
  <mtd><msub><mi>a</mi><mn>42</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>43</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>44</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>45</mn></msub></mtd>
 </mtr><mtr>
  <mtd><msub><mi>a</mi><mn>53</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>54</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>55</mn></msub></mtd>
  <mtd><mtext>*</mtext></mtd>
 </mtr>
</mtable>
</math></td>
   </tr>
  </tbody>
 </table></div><div class="paramtext">
The elements marked <math xmlns="http://www.w3.org/1998/Math/MathML"><mo>*</mo></math>&#160;in the upper left and lower right  corners of the array <a class="argref" href="../F07/f07bdc.xml#ab">ab</a> need not be set, and are not referenced by the  functions.</div>
<div class="paramtext"><b>Note:</b> when a general band matrix is supplied for <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>L</mi><mi>U</mi></math>&#160; factorization, space must be allowed to store an additional  <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>k</mi><mi>l</mi></msub></math>&#160;super-diagonals, generated by fill-in as a result  of row interchanges. This means that the matrix is stored according to  the above scheme, but with <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>k</mi><mi>l</mi></msub><mo>+</mo><msub><mi>k</mi><mi>u</mi></msub></math>&#160;super-diagonals.</div>
<div class="paramtext">Triangular band matrices are stored in the same format, with either <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>k</mi><mi>l</mi></msub><mo>=</mo><mn>0</mn></math>&#160;if upper triangular, or <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>k</mi><mi>u</mi></msub><mo>=</mo><mn>0</mn></math>&#160; if lower triangular.</div>
<div class="paramtext">For symmetric or Hermitian band matrices with <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>k</mi></math>&#160;sub-diagonals  or super-diagonals, only the upper or lower triangle (as specified by <a class="argref" href="../F07/f07fdc.xml#uplo">uplo</a>) need be stored:</div>

<div class="paramtext"> 
 </div><ul class="listind"><li class="listind">if <math xmlns="http://www.w3.org/1998/Math/MathML"><maction actiontype="link" dsi:href="f07fdc.xml#uplo" dsi:type="simple"><mi mathcolor="#EE0000" mathvariant="bold">uplo</mi></maction></math>&#160;<math xmlns="http://www.w3.org/1998/Math/MathML"><mo>=</mo></math>&#160;<b>Nag_Upper</b> then
  <ul class="listind"><li class="listind">if <math xmlns="http://www.w3.org/1998/Math/MathML"><maction actiontype="link" dsi:href="f07fdc.xml#order" dsi:type="simple"><mi mathcolor="#EE0000" mathvariant="bold">order</mi></maction><mo>=</mo><mi mathvariant="bold">Nag_ColMajor</mi></math>, <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>a</mi><mrow><mi>i</mi><mi>j</mi></mrow></msub></math>&#160;is stored in <math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mrow><maction actiontype="link" dsi:href="f07bdc.xml#ab" dsi:type="simple"><mi mathcolor="#EE0000" mathvariant="bold">ab</mi></maction><mfenced open="[" close="]"><mrow><mfenced separators=""><mi>j</mi><mo>-</mo><mn>1</mn></mfenced><mo>&#215;</mo><maction actiontype="link" dsi:href="f07bdc.xml#pdab" dsi:type="simple"><mi mathcolor="#EE0000" mathvariant="bold">pdab</mi></maction><mo>+</mo><mi>k</mi><mo>+</mo><mi>i</mi><mo>-</mo><mi>j</mi></mrow></mfenced></mrow></mrow></math>;</li><li class="listind">if <math xmlns="http://www.w3.org/1998/Math/MathML"><maction actiontype="link" dsi:href="f07fdc.xml#order" dsi:type="simple"><mi mathcolor="#EE0000" mathvariant="bold">order</mi></maction><mo>=</mo><mi mathvariant="bold">Nag_RowMajor</mi></math>, <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>a</mi><mrow><mi>i</mi><mi>j</mi></mrow></msub></math>&#160;is stored in <math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mrow><maction actiontype="link" dsi:href="f07bdc.xml#ab" dsi:type="simple"><mi mathcolor="#EE0000" mathvariant="bold">ab</mi></maction><mfenced open="[" close="]"><mrow><mfenced separators=""><mi>i</mi><mo>-</mo><mn>1</mn></mfenced><mo>&#215;</mo><maction actiontype="link" dsi:href="f07bdc.xml#pdab" dsi:type="simple"><mi mathcolor="#EE0000" mathvariant="bold">pdab</mi></maction><mo>+</mo><mi>j</mi><mo>-</mo><mi>i</mi></mrow></mfenced></mrow></mrow></math>.</li></ul>
  for <math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>max</mi><mo>&#8289;</mo><mfenced separators=""><mn>1</mn><mo>,</mo><mi>j</mi><mo>-</mo><mi>k</mi></mfenced></mrow><mo>&#8804;</mo><mi>i</mi><mo>&#8804;</mo><mi>j</mi></math>;</li><li class="listind">if <math xmlns="http://www.w3.org/1998/Math/MathML"><maction actiontype="link" dsi:href="f07fdc.xml#uplo" dsi:type="simple"><mi mathcolor="#EE0000" mathvariant="bold">uplo</mi></maction></math>&#160;<math xmlns="http://www.w3.org/1998/Math/MathML"><mo>=</mo></math>&#160;<b>Nag_Lower</b> then
 <ul class="listind"><li class="listind">if <math xmlns="http://www.w3.org/1998/Math/MathML"><maction actiontype="link" dsi:href="f07fdc.xml#order" dsi:type="simple"><mi mathcolor="#EE0000" mathvariant="bold">order</mi></maction><mo>=</mo><mi mathvariant="bold">Nag_ColMajor</mi></math>, <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>a</mi><mrow><mi>i</mi><mi>j</mi></mrow></msub></math>&#160;is stored in <math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mrow><maction actiontype="link" dsi:href="f07bdc.xml#ab" dsi:type="simple"><mi mathcolor="#EE0000" mathvariant="bold">ab</mi></maction><mfenced open="[" close="]"><mrow><mfenced separators=""><mi>j</mi><mo>-</mo><mn>1</mn></mfenced><mo>&#215;</mo><maction actiontype="link" dsi:href="f07bdc.xml#pdab" dsi:type="simple"><mi mathcolor="#EE0000" mathvariant="bold">pdab</mi></maction><mo>+</mo><mi>i</mi><mo>-</mo><mi>j</mi></mrow></mfenced></mrow></mrow></math>;</li><li class="listind">if <math xmlns="http://www.w3.org/1998/Math/MathML"><maction actiontype="link" dsi:href="f07fdc.xml#order" dsi:type="simple"><mi mathcolor="#EE0000" mathvariant="bold">order</mi></maction><mo>=</mo><mi mathvariant="bold">Nag_RowMajor</mi></math>, <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>a</mi><mrow><mi>i</mi><mi>j</mi></mrow></msub></math>&#160;is stored in <math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mrow><maction actiontype="link" dsi:href="f07bdc.xml#ab" dsi:type="simple"><mi mathcolor="#EE0000" mathvariant="bold">ab</mi></maction><mfenced open="[" close="]"><mrow><mfenced separators=""><mi>i</mi><mo>-</mo><mn>1</mn></mfenced><mo>&#215;</mo><maction actiontype="link" dsi:href="f07bdc.xml#pdab" dsi:type="simple"><mi mathcolor="#EE0000" mathvariant="bold">pdab</mi></maction><mo>+</mo><mi>k</mi><mo>+</mo><mi>j</mi><mo>-</mo><mi>i</mi></mrow></mfenced></mrow></mrow></math>.</li></ul>
 for <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>j</mi><mo>&#8804;</mo><mi>i</mi><mo>&#8804;</mo><mrow><mi>min</mi><mo>&#8289;</mo><mfenced separators=""><mi>n</mi><mo>,</mo><mi>j</mi><mo>+</mo><mi>k</mi></mfenced></mrow></math>,</li></ul><div class="paramtext">
where <math xmlns="http://www.w3.org/1998/Math/MathML"><maction actiontype="link" dsi:href="f07bdc.xml#pdab" dsi:type="simple"><mi mathcolor="#EE0000" mathvariant="bold">pdab</mi></maction><mo>&#8805;</mo><mi>k</mi><mo>+</mo><mn>1</mn></math>&#160;is the stride separating diagonal matrix elements in the array <a class="argref" href="../F07/f07bdc.xml#ab">ab</a>.</div>
<div class="paramtext">For example, when <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>n</mi><mo>=</mo><mn>5</mn></math>&#160;and <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>k</mi><mo>=</mo><mn>2</mn></math>:

</div><div><table style="align:center" border="3" cellpadding="2">
  
  
  
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" align="center"><b><a class="argref" href="../F07/f07fdc.xml#uplo">uplo</a></b></td>
    <td class="libdoc" valign="top" align="center"><b>Hermitian band matrix</b> <math xmlns="http://www.w3.org/1998/Math/MathML"><mi mathvariant="bold-italic">A</mi></math></td>
    <td class="libdoc" valign="top" align="center" colspan="2"><b>Band storage in array <a class="argref" href="../F07/f07adc.xml#a">a</a></b></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="center">&#160;</td>
    <td class="libdoc" valign="top" align="center">&#160;</td>
    <td class="libdoc" valign="top" align="center"><math xmlns="http://www.w3.org/1998/Math/MathML"><maction actiontype="link" dsi:href="f07fdc.xml#order" dsi:type="simple"><mi mathcolor="#EE0000" mathvariant="bold">order</mi></maction><mo>=</mo><mi mathvariant="bold">Nag_ColMajor</mi></math></td>
    <td class="libdoc" valign="top" align="center"><math xmlns="http://www.w3.org/1998/Math/MathML"><maction actiontype="link" dsi:href="f07fdc.xml#order" dsi:type="simple"><mi mathcolor="#EE0000" mathvariant="bold">order</mi></maction><mo>=</mo><mi mathvariant="bold">Nag_RowMajor</mi></math></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="center"><b>Nag_Upper</b></td>
    <td class="libdoc" valign="top" align="center"><math xmlns="http://www.w3.org/1998/Math/MathML">
<mfenced separators="">
 <mtable columnalign="left">
  <mtr>
   <mtd><msub><mi>a</mi><mn>11</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>12</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>13</mn></msub></mtd>
   <mtd/>
   <mtd/></mtr><mtr>
   <mtd><msub><mover><mrow><mi>a</mi></mrow><mo>-</mo></mover><mn>12</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>22</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>23</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>24</mn></msub></mtd>
   <mtd/></mtr><mtr>
   <mtd><msub><mover><mrow><mi>a</mi></mrow><mo>-</mo></mover><mn>13</mn></msub></mtd>
   <mtd><msub><mover><mrow><mi>a</mi></mrow><mo>-</mo></mover><mn>23</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>33</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>34</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>35</mn></msub></mtd>
  </mtr><mtr>
   <mtd/>
   <mtd><msub><mover><mrow><mi>a</mi></mrow><mo>-</mo></mover><mn>24</mn></msub></mtd>
   <mtd><msub><mover><mrow><mi>a</mi></mrow><mo>-</mo></mover><mn>34</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>44</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>45</mn></msub></mtd>
  </mtr><mtr>
   <mtd/>
   <mtd/>
   <mtd><msub><mover><mrow><mi>a</mi></mrow><mo>-</mo></mover><mn>35</mn></msub></mtd>
   <mtd><msub><mover><mrow><mi>a</mi></mrow><mo>-</mo></mover><mn>45</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>55</mn></msub></mtd>
  </mtr>
 </mtable>
</mfenced>
</math></td>
    <td class="libdoc" valign="top" align="center"><math xmlns="http://www.w3.org/1998/Math/MathML">
<mtable columnalign="left">
 <mtr>
  <mtd><mtext>*</mtext></mtd>
  <mtd><mtext>*</mtext></mtd>
  <mtd><msub><mi>a</mi><mn>13</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>24</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>35</mn></msub></mtd>
 </mtr><mtr>
  <mtd><mtext>*</mtext></mtd>
  <mtd><msub><mi>a</mi><mn>12</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>23</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>34</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>45</mn></msub></mtd>
 </mtr><mtr>
  <mtd><msub><mi>a</mi><mn>11</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>22</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>33</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>44</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>55</mn></msub></mtd>
 </mtr>
</mtable>
</math></td>
    <td class="libdoc" valign="top" align="center"><math xmlns="http://www.w3.org/1998/Math/MathML">
<mtable columnalign="left">
 <mtr>
  <mtd><msub><mi>a</mi><mn>11</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>12</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>13</mn></msub></mtd>
 </mtr><mtr>
  <mtd><msub><mi>a</mi><mn>22</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>23</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>24</mn></msub></mtd>
 </mtr><mtr>
  <mtd><msub><mi>a</mi><mn>33</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>34</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>35</mn></msub></mtd>
 </mtr><mtr>
  <mtd><msub><mi>a</mi><mn>44</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>45</mn></msub></mtd>
  <mtd><mtext>*</mtext></mtd>
 </mtr><mtr>
  <mtd><msub><mi>a</mi><mn>55</mn></msub></mtd>
  <mtd><mtext>*</mtext></mtd>
  <mtd><mtext>*</mtext></mtd>
 </mtr>
</mtable>
</math></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="center"><b>Nag_Lower</b></td>
    <td class="libdoc" valign="top" align="center"><math xmlns="http://www.w3.org/1998/Math/MathML">
<mfenced separators="">
 <mtable columnalign="left">
  <mtr>
   <mtd><msub><mi>a</mi><mn>11</mn></msub></mtd>
   <mtd><msub><mover><mrow><mi>a</mi></mrow><mo>-</mo></mover><mn>21</mn></msub></mtd>
   <mtd><msub><mover><mrow><mi>a</mi></mrow><mo>-</mo></mover><mn>31</mn></msub></mtd>
   <mtd/>
   <mtd/></mtr><mtr>
   <mtd><msub><mi>a</mi><mn>21</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>22</mn></msub></mtd>
   <mtd><msub><mover><mrow><mi>a</mi></mrow><mo>-</mo></mover><mn>32</mn></msub></mtd>
   <mtd><msub><mover><mrow><mi>a</mi></mrow><mo>-</mo></mover><mn>42</mn></msub></mtd>
   <mtd/></mtr><mtr>
   <mtd><msub><mi>a</mi><mn>31</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>32</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>33</mn></msub></mtd>
   <mtd><msub><mover><mrow><mi>a</mi></mrow><mo>-</mo></mover><mn>43</mn></msub></mtd>
   <mtd><msub><mover><mrow><mi>a</mi></mrow><mo>-</mo></mover><mn>53</mn></msub></mtd>
  </mtr><mtr>
   <mtd/>
   <mtd><msub><mi>a</mi><mn>42</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>43</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>44</mn></msub></mtd>
   <mtd><msub><mover><mrow><mi>a</mi></mrow><mo>-</mo></mover><mn>54</mn></msub></mtd>
  </mtr><mtr>
   <mtd/>
   <mtd/>
   <mtd><msub><mi>a</mi><mn>53</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>54</mn></msub></mtd>
   <mtd><msub><mi>a</mi><mn>55</mn></msub></mtd>
  </mtr>
 </mtable>
</mfenced>
</math></td>
    <td class="libdoc" valign="top" align="center"><math xmlns="http://www.w3.org/1998/Math/MathML">
<mtable columnalign="left">
 <mtr>
  <mtd><msub><mi>a</mi><mn>11</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>22</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>33</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>44</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>55</mn></msub></mtd>
 </mtr><mtr>
  <mtd><msub><mi>a</mi><mn>21</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>32</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>43</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>54</mn></msub></mtd>
  <mtd><mtext>*</mtext></mtd>
 </mtr><mtr>
  <mtd><msub><mi>a</mi><mn>31</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>42</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>53</mn></msub></mtd>
  <mtd><mtext>*</mtext></mtd>
  <mtd><mtext>*</mtext></mtd>
 </mtr>
</mtable>
</math></td>
    <td class="libdoc" valign="top" align="center"><math xmlns="http://www.w3.org/1998/Math/MathML">
<mtable columnalign="left">
 <mtr>
  <mtd><mtext>*</mtext></mtd>
  <mtd><mtext>*</mtext></mtd>
  <mtd><msub><mi>a</mi><mn>11</mn></msub></mtd>
 </mtr><mtr>
  <mtd><mtext>*</mtext></mtd>
  <mtd><msub><mi>a</mi><mn>21</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>22</mn></msub></mtd>
 </mtr><mtr>
  <mtd><msub><mi>a</mi><mn>31</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>32</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>33</mn></msub></mtd>
 </mtr><mtr>
  <mtd><msub><mi>a</mi><mn>42</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>43</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>44</mn></msub></mtd>
 </mtr><mtr>
  <mtd><msub><mi>a</mi><mn>53</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>54</mn></msub></mtd>
  <mtd><msub><mi>a</mi><mn>55</mn></msub></mtd>
 </mtr>
</mtable>
</math></td>
   </tr>
  </tbody>
 </table></div><div class="paramtext">
Note that different storage schemes for band matrices are used by some functions in Chapters <a class="secref" href="../F01/f01_conts.xml">f01</a>, <a class="secref" href="../F02/f02_conts.xml">f02</a>, <a class="secref" href="../F03/f03_conts.xml">f03</a> and <a class="secref" href="../F04/f04_conts.xml">f04</a>.</div>




<h4><a name="recomm_34" id="recomm_34"/>3.3.4&#160;&#160;Unit triangular matrices</h4>

<div class="paramtext">Some functions in this chapter have an option to handle unit triangular matrices (that is, triangular matrices with diagonal elements <math xmlns="http://www.w3.org/1998/Math/MathML"><mtext/><mo>=</mo><mn>1</mn></math>).  This option is specified by an argument <a class="argref" href="../F07/f07tec.xml#diag">diag</a>.  If <math xmlns="http://www.w3.org/1998/Math/MathML"><maction actiontype="link" dsi:href="f07tec.xml#diag" dsi:type="simple"><mi mathcolor="#EE0000" mathvariant="bold">diag</mi></maction></math>&#160;<math xmlns="http://www.w3.org/1998/Math/MathML"><mo>=</mo></math>&#160;<b>Nag_UnitDiag</b> (Unit triangular), the diagonal elements of the matrix need not be stored, and the corresponding array elements are not referenced by the functions.  The storage scheme for the rest of the matrix (whether conventional, packed or band) remains unchanged.</div>




<h4><a name="recomm_35" id="recomm_35"/>3.3.5&#160;&#160;Real diagonal elements of complex matrices</h4>

<div class="paramtext">Complex Hermitian matrices have diagonal elements that are by definition purely real.  In addition, complex triangular matrices which arise in Cholesky factorization are defined by the algorithm to have real diagonal elements.</div>
<div class="paramtext">If such matrices are supplied as input to functions in this chapter, the imaginary parts of the diagonal elements are not referenced, but are assumed to be zero.  If such matrices are returned as output by the functions, the computed imaginary parts are explicitly set to zero.</div>





<h3><a name="recomm_4" id="recomm_4"/>3.4&#160;&#160;Parameter Conventions</h3>




<h4><a name="recomm_41" id="recomm_41"/>3.4.1&#160;&#160;Option parameters</h4>



<div class="paramtext">In addition to the <a class="argref" href="../F07/f07fdc.xml#order">order</a> argument of type <b>Nag_OrderType</b>, most functions in this Chapter have one or more option arguments of various types; only options of the correct type may be supplied.</div>
<div class="paramtext">For example,
</div><pre class="verbatim">
 f07fdc(Nag_RowMajor,Nag_Upper,...)
</pre><div class="paramtext">
</div>




<h4><a 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, <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>M</mi></math>,
<math xmlns="http://www.w3.org/1998/Math/MathML"><mi>N</mi></math>&#160;or <math xmlns="http://www.w3.org/1998/Math/MathML"><mi mathvariant="normal">NRHS</mi></math>) to be passed as zero, in which case the computation (or part of it) is skipped.  Negative dimensions are regarded as an error.</div>









<h3><a name="recomm_5" id="recomm_5"/>3.5&#160;&#160;Tables of Available Functions</h3>

<div class="paramtext">
</div><div><a name="table1" id="table1"/><table style="align:center" border="3" cellpadding="2">
  
  
  
  
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" align="left"><b>Type of matrix and storage scheme</b></td>
    <td class="libdoc" valign="top" align="left"><b>factorize</b></td>
    <td class="libdoc" valign="top" align="left"><b>solve</b></td>
    <td class="libdoc" valign="top" align="left"><b>condition<br/>
number</b></td>
    <td class="libdoc" valign="top" align="left"><b>error<br/>
estimate</b></td>
    <td class="libdoc" valign="top" align="left"><b>invert</b></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">general</td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07adc.xml">f07adc</a><br/>
<a class="rtnref" href="../F07/f07adc.xml">DGETRF</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07aec.xml">f07aec</a><br/>
<a class="rtnref" href="../F07/f07aec.xml">DGETRS</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07agc.xml">f07agc</a><br/>
<a class="rtnref" href="../F07/f07agc.xml">DGECON</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07ahc.xml">f07ahc</a><br/>
<a class="rtnref" href="../F07/f07ahc.xml">DGERFS</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07ajc.xml">f07ajc</a><br/>
<a class="rtnref" href="../F07/f07ajc.xml">DGETRI</a></span></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">general band</td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07bdc.xml">f07bdc</a><br/>
<a class="rtnref" href="../F07/f07bdc.xml">DGBTRF</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07bec.xml">f07bec</a><br/>
<a class="rtnref" href="../F07/f07bec.xml">DGBTRS</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07bgc.xml">f07bgc</a><br/>
<a class="rtnref" href="../F07/f07bgc.xml">DGBCON</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07bhc.xml">f07bhc</a><br/>
<a class="rtnref" href="../F07/f07bhc.xml">DGBRFS</a></span></td>
    <td class="libdoc" valign="top" align="left">&#160;</td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">symmetric positive-definite</td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07fdc.xml">f07fdc</a><br/>
<a class="rtnref" href="../F07/f07fdc.xml">DPOTRF</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07fec.xml">f07fec</a><br/>
<a class="rtnref" href="../F07/f07fec.xml">DPOTRS</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07fgc.xml">f07fgc</a><br/>
<a class="rtnref" href="../F07/f07fgc.xml">DPOCON</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07fhc.xml">f07fhc</a><br/>
<a class="rtnref" href="../F07/f07fhc.xml">DPORFS</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07fjc.xml">f07fjc</a><br/>
<a class="rtnref" href="../F07/f07fjc.xml">DPOTRI</a></span></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">symmetric positive-definite (packed storage)</td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07gdc.xml">f07gdc</a><br/>
<a class="rtnref" href="../F07/f07gdc.xml">DPPTRF</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07gec.xml">f07gec</a><br/>
<a class="rtnref" href="../F07/f07gec.xml">DPPTRS</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07ggc.xml">f07ggc</a><br/>
<a class="rtnref" href="../F07/f07ggc.xml">DPPCON</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07ghc.xml">f07ghc</a><br/>
<a class="rtnref" href="../F07/f07ghc.xml">DPPRFS</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07gjc.xml">f07gjc</a><br/>
<a class="rtnref" href="../F07/f07gjc.xml">DPPTRI</a></span></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">symmetric positive-definite band</td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07hdc.xml">f07hdc</a><br/>
<a class="rtnref" href="../F07/f07hdc.xml">DPBTRF</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07hec.xml">f07hec</a><br/>
<a class="rtnref" href="../F07/f07hec.xml">DPBTRS</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07hgc.xml">f07hgc</a><br/>
<a class="rtnref" href="../F07/f07hgc.xml">DPBCON</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07hhc.xml">f07hhc</a><br/>
<a class="rtnref" href="../F07/f07hhc.xml">DPBRFS</a></span></td>
    <td class="libdoc" valign="top" align="left">&#160;</td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">symmetric indefinite</td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07mdc.xml">f07mdc</a><br/>
<a class="rtnref" href="../F07/f07mdc.xml">DSYTRF</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07mec.xml">f07mec</a><br/>
<a class="rtnref" href="../F07/f07mec.xml">DSYTRS</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07mgc.xml">f07mgc</a><br/>
<a class="rtnref" href="../F07/f07mgc.xml">DSYCON</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07mhc.xml">f07mhc</a><br/>
<a class="rtnref" href="../F07/f07mhc.xml">DSYRFS</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07mjc.xml">f07mjc</a><br/>
<a class="rtnref" href="../F07/f07mjc.xml">DSYTRI</a></span></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">symmetric indefinite (packed storage)</td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07pdc.xml">f07pdc</a><br/>
<a class="rtnref" href="../F07/f07pdc.xml">DSPTRF</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07pec.xml">f07pec</a><br/>
<a class="rtnref" href="../F07/f07pec.xml">DSPTRS</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07pgc.xml">f07pgc</a><br/>
<a class="rtnref" href="../F07/f07pgc.xml">DSPCON</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07phc.xml">f07phc</a><br/>
<a class="rtnref" href="../F07/f07phc.xml">DSPRFS</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07pjc.xml">f07pjc</a><br/>
<a class="rtnref" href="../F07/f07pjc.xml">DSPTRI</a></span></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">triangular</td>
    <td class="libdoc" valign="top" align="left">&#160;</td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07tec.xml">f07tec</a><br/>
<a class="rtnref" href="../F07/f07tec.xml">DTRTRS</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07tgc.xml">f07tgc</a><br/>
<a class="rtnref" href="../F07/f07tgc.xml">DTRCON</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07thc.xml">f07thc</a><br/>
<a class="rtnref" href="../F07/f07thc.xml">DTRRFS</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07tjc.xml">f07tjc</a><br/>
<a class="rtnref" href="../F07/f07tjc.xml">DTRTRI</a></span></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">triangular (packed storage)</td>
    <td class="libdoc" valign="top" align="left">&#160;</td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07uec.xml">f07uec</a><br/>
<a class="rtnref" href="../F07/f07uec.xml">DTPTRS</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07ugc.xml">f07ugc</a><br/>
<a class="rtnref" href="../F07/f07ugc.xml">DTPCON</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07uhc.xml">f07uhc</a><br/>
<a class="rtnref" href="../F07/f07uhc.xml">DTPRFS</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07ujc.xml">f07ujc</a><br/>
<a class="rtnref" href="../F07/f07ujc.xml">DTPTRI</a></span></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">triangular band</td>
    <td class="libdoc" valign="top" align="left">&#160;</td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07vec.xml">f07vec</a><br/>
<a class="rtnref" href="../F07/f07vec.xml">DTBTRS</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07vgc.xml">f07vgc</a><br/>
<a class="rtnref" href="../F07/f07vgc.xml">DTBCON</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07vhc.xml">f07vhc</a><br/>
<a class="rtnref" href="../F07/f07vhc.xml">DTBRFS</a></span></td>
    <td class="libdoc" valign="top" align="left">&#160;</td>
   </tr>
  </tbody>
 </table><p style="text-align:center"><b>Table 1</b></p></div><div class="paramtext">
Each entry gives:
</div><ul class="listind"><li class="listind">the NAG function short name</li><li class="listind">the LAPACK function name from which the NAG function long name is derived by prepending nag_.</li></ul><div class="paramtext">

</div><div><a name="table2" id="table2"/><table style="align:center" border="3" cellpadding="2">
  
  
  
  
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" align="left"><b>Type of matrix and storage scheme</b></td>
    <td class="libdoc" valign="top" align="left"><b>factorize</b></td>
    <td class="libdoc" valign="top" align="left"><b>solve</b></td>
    <td class="libdoc" valign="top" align="left"><b>condition<br/>
number</b></td>
    <td class="libdoc" valign="top" align="left"><b>error<br/>
estimate</b></td>
    <td class="libdoc" valign="top" align="left"><b>invert</b></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">general</td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07arc.xml">f07arc</a><br/>
<a class="rtnref" href="../F07/f07arc.xml">ZGETRF</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07asc.xml">f07asc</a><br/>
<a class="rtnref" href="../F07/f07asc.xml">ZGETRS</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07auc.xml">f07auc</a><br/>
<a class="rtnref" href="../F07/f07auc.xml">ZGECON</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07avc.xml">f07avc</a><br/>
<a class="rtnref" href="../F07/f07avc.xml">ZGERFS</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07awc.xml">f07awc</a><br/>
<a class="rtnref" href="../F07/f07awc.xml">ZGETRI</a></span></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">general band</td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07brc.xml">f07brc</a><br/>
<a class="rtnref" href="../F07/f07brc.xml">ZGBTRF</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07bsc.xml">f07bsc</a><br/>
<a class="rtnref" href="../F07/f07bsc.xml">ZGBTRS</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07buc.xml">f07buc</a><br/>
<a class="rtnref" href="../F07/f07buc.xml">ZGBCON</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07bvc.xml">f07bvc</a><br/>
<a class="rtnref" href="../F07/f07bvc.xml">ZGBRFS</a></span></td>
    <td class="libdoc" valign="top" align="left">&#160;</td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">Hermitian positive-definite</td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07frc.xml">f07frc</a><br/>
<a class="rtnref" href="../F07/f07frc.xml">ZPOTRF</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07fsc.xml">f07fsc</a><br/>
<a class="rtnref" href="../F07/f07fsc.xml">ZPOTRS</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07fuc.xml">f07fuc</a><br/>
<a class="rtnref" href="../F07/f07fuc.xml">ZPOCON</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07fvc.xml">f07fvc</a><br/>
<a class="rtnref" href="../F07/f07fvc.xml">ZPORFS</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07fwc.xml">f07fwc</a><br/>
<a class="rtnref" href="../F07/f07fwc.xml">ZPOTRI</a></span></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">Hermitian positive-definite (packed storage)</td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07grc.xml">f07grc</a><br/>
<a class="rtnref" href="../F07/f07grc.xml">ZPPTRF</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07gsc.xml">f07gsc</a><br/>
<a class="rtnref" href="../F07/f07gsc.xml">ZPPTRS</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07guc.xml">f07guc</a><br/>
<a class="rtnref" href="../F07/f07guc.xml">ZPPCON</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07gvc.xml">f07gvc</a><br/>
<a class="rtnref" href="../F07/f07gvc.xml">ZPPRFS</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07gwc.xml">f07gwc</a><br/>
<a class="rtnref" href="../F07/f07gwc.xml">ZPPTRI</a></span></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">Hermitian positive-definite band</td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07hrc.xml">f07hrc</a><br/>
<a class="rtnref" href="../F07/f07hrc.xml">ZPBTRF</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07hsc.xml">f07hsc</a><br/>
<a class="rtnref" href="../F07/f07hsc.xml">ZPBTRS</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07huc.xml">f07huc</a><br/>
<a class="rtnref" href="../F07/f07huc.xml">ZPBCON</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07hvc.xml">f07hvc</a><br/>
<a class="rtnref" href="../F07/f07hvc.xml">ZPBRFS</a></span></td>
    <td class="libdoc" valign="top" align="left">&#160;</td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">Hermitian indefinite</td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07mrc.xml">f07mrc</a><br/>
<a class="rtnref" href="../F07/f07mrc.xml">ZHETRF</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07msc.xml">f07msc</a><br/>
<a class="rtnref" href="../F07/f07msc.xml">ZHETRS</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07muc.xml">f07muc</a><br/>
<a class="rtnref" href="../F07/f07muc.xml">ZHECON</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07mvc.xml">f07mvc</a><br/>
<a class="rtnref" href="../F07/f07mvc.xml">ZHERFS</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07mwc.xml">f07mwc</a><br/>
<a class="rtnref" href="../F07/f07mwc.xml">ZHETRI</a></span></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">symmetric indefinite</td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07nrc.xml">f07nrc</a><br/>
<a class="rtnref" href="../F07/f07nrc.xml">ZSYTRF</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07nsc.xml">f07nsc</a><br/>
<a class="rtnref" href="../F07/f07nsc.xml">ZSYTRS</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07nuc.xml">f07nuc</a><br/>
<a class="rtnref" href="../F07/f07nuc.xml">ZSYCON</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07nvc.xml">f07nvc</a><br/>
<a class="rtnref" href="../F07/f07nvc.xml">ZSYRFS</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07nwc.xml">f07nwc</a><br/>
<a class="rtnref" href="../F07/f07nwc.xml">ZSYTRI</a></span></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">Hermitian indefinite (packed storage)</td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07prc.xml">f07prc</a><br/>
<a class="rtnref" href="../F07/f07prc.xml">ZHPTRF</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07psc.xml">f07psc</a><br/>
<a class="rtnref" href="../F07/f07psc.xml">ZHPTRS</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07puc.xml">f07puc</a><br/>
<a class="rtnref" href="../F07/f07puc.xml">ZHPCON</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07pvc.xml">f07pvc</a><br/>
<a class="rtnref" href="../F07/f07pvc.xml">ZHPRFS</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07pwc.xml">f07pwc</a><br/>
<a class="rtnref" href="../F07/f07pwc.xml">ZHPTRI</a></span></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">symmetric indefinite (packed storage)</td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07qrc.xml">f07qrc</a><br/>
<a class="rtnref" href="../F07/f07qrc.xml">ZSPTRF</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07qsc.xml">f07qsc</a><br/>
<a class="rtnref" href="../F07/f07qsc.xml">ZSPTRS</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07quc.xml">f07quc</a><br/>
<a class="rtnref" href="../F07/f07quc.xml">ZSPCON</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07qvc.xml">f07qvc</a><br/>
<a class="rtnref" href="../F07/f07qvc.xml">ZSPRFS</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07qwc.xml">f07qwc</a><br/>
<a class="rtnref" href="../F07/f07qwc.xml">ZSPTRI</a></span></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">triangular</td>
    <td class="libdoc" valign="top" align="left">&#160;</td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07tsc.xml">f07tsc</a><br/>
<a class="rtnref" href="../F07/f07tsc.xml">ZTRTRS</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07tuc.xml">f07tuc</a><br/>
<a class="rtnref" href="../F07/f07tuc.xml">ZTRCON</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07tvc.xml">f07tvc</a><br/>
<a class="rtnref" href="../F07/f07tvc.xml">ZTRRFS</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07twc.xml">f07twc</a><br/>
<a class="rtnref" href="../F07/f07twc.xml">ZTRTRI</a></span></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">triangular (packed storage)</td>
    <td class="libdoc" valign="top" align="left">&#160;</td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07usc.xml">f07usc</a><br/>
<a class="rtnref" href="../F07/f07usc.xml">ZTPTRS</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07uuc.xml">f07uuc</a><br/>
<a class="rtnref" href="../F07/f07uuc.xml">ZTPCON</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07uvc.xml">f07uvc</a><br/>
<a class="rtnref" href="../F07/f07uvc.xml">ZTPRFS</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07uwc.xml">f07uwc</a><br/>
<a class="rtnref" href="../F07/f07uwc.xml">ZTPTRI</a></span></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">triangular band</td>
    <td class="libdoc" valign="top" align="left">&#160;</td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07vsc.xml">f07vsc</a><br/>
<a class="rtnref" href="../F07/f07vsc.xml">ZTBTRS</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07vuc.xml">f07vuc</a><br/>
<a class="rtnref" href="../F07/f07vuc.xml">ZTBCON</a></span></td>
    <td class="libdoc" valign="top" align="left"><span class="mono"><a class="rtnref" href="../F07/f07vvc.xml">f07vvc</a><br/>
<a class="rtnref" href="../F07/f07vvc.xml">ZTBRFS</a></span></td>
    <td class="libdoc" valign="top" align="left">&#160;</td>
   </tr>
  </tbody>
 </table><p style="text-align:center"><b>Table 2</b></p></div><div class="paramtext">
</div>

<div class="paramtext">Each entry gives:
</div><ul class="listind"><li class="listind">the NAG function short name</li><li class="listind">the LAPACK function name from which the NAG function long name is derived by prepending nag_.</li></ul><div class="paramtext">
</div>






<h2><a name="index" id="index"/>4&#160;&#160;Index</h2>

<table>
   <tr><td class="index1">Apply iterative refinement to the solution and compute error estimates:</td><td class="index2"/></tr>
   
      <tr><td class="index1">&#160;&#160;&#160;&#160;after factorizing the matrix of coefficients:</td><td class="index2"/></tr>
      
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;complex band matrix</td><td class="index2"><a class="rtnref" href="../F07/f07bvc.xml">f07bvc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;complex Hermitian indefinite matrix</td><td class="index2"><a class="rtnref" href="../F07/f07mvc.xml">f07mvc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;complex Hermitian indefinite matrix, packed storage</td><td class="index2"><a class="rtnref" href="../F07/f07pvc.xml">f07pvc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;complex Hermitian positive-definite band matrix</td><td class="index2"><a class="rtnref" href="../F07/f07hvc.xml">f07hvc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;complex Hermitian positive-definite matrix</td><td class="index2"><a class="rtnref" href="../F07/f07fvc.xml">f07fvc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;complex Hermitian positive-definite matrix, packed storage</td><td class="index2"><a class="rtnref" href="../F07/f07gvc.xml">f07gvc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;complex matrix</td><td class="index2"><a class="rtnref" href="../F07/f07avc.xml">f07avc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;complex symmetric indefinite matrix</td><td class="index2"><a class="rtnref" href="../F07/f07nvc.xml">f07nvc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;complex symmetric indefinite matrix, packed storage</td><td class="index2"><a class="rtnref" href="../F07/f07qvc.xml">f07qvc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;real band matrix</td><td class="index2"><a class="rtnref" href="../F07/f07bhc.xml">f07bhc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;real matrix</td><td class="index2"><a class="rtnref" href="../F07/f07ahc.xml">f07ahc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;real symmetric indefinite matrix</td><td class="index2"><a class="rtnref" href="../F07/f07mhc.xml">f07mhc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;real symmetric indefinite matrix, packed storage </td><td class="index2"><a class="rtnref" href="../F07/f07phc.xml">f07phc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;real symmetric positive-definite band matrix</td><td class="index2"><a class="rtnref" href="../F07/f07hhc.xml">f07hhc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;real symmetric positive-definite matrix</td><td class="index2"><a class="rtnref" href="../F07/f07fhc.xml">f07fhc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;real symmetric positive-definite matrix, packed storage</td><td class="index2"><a class="rtnref" href="../F07/f07ghc.xml">f07ghc</a></td></tr>
      
   
   <tr><td class="index1">Compute error estimates:</td><td class="index2"/></tr>
   
      <tr><td class="index1">&#160;&#160;&#160;&#160;complex triangular band matrix</td><td class="index2"><a class="rtnref" href="../F07/f07vvc.xml">f07vvc</a></td></tr>
      <tr><td class="index1">&#160;&#160;&#160;&#160;complex triangular matrix</td><td class="index2"><a class="rtnref" href="../F07/f07tvc.xml">f07tvc</a></td></tr>
      <tr><td class="index1">&#160;&#160;&#160;&#160;complex triangular matrix, packed storage</td><td class="index2"><a class="rtnref" href="../F07/f07uvc.xml">f07uvc</a></td></tr>
      <tr><td class="index1">&#160;&#160;&#160;&#160;real triangular band matrix</td><td class="index2"><a class="rtnref" href="../F07/f07vhc.xml">f07vhc</a></td></tr>
      <tr><td class="index1">&#160;&#160;&#160;&#160;real triangular matrix</td><td class="index2"><a class="rtnref" href="../F07/f07thc.xml">f07thc</a></td></tr>
      <tr><td class="index1">&#160;&#160;&#160;&#160;real triangular matrix, packed storage</td><td class="index2"><a class="rtnref" href="../F07/f07uhc.xml">f07uhc</a></td></tr>
   
   <tr><td class="index1">Condition number estimation:</td><td class="index2"/></tr>
   
      <tr><td class="index1">&#160;&#160;&#160;&#160;after factorizing the matrix of coefficients:</td><td class="index2"/></tr>
      
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;complex band matrix</td><td class="index2"><a class="rtnref" href="../F07/f07buc.xml">f07buc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;complex Hermitian indefinite matrix</td><td class="index2"><a class="rtnref" href="../F07/f07muc.xml">f07muc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;complex Hermitian indefinite matrix, packed storage</td><td class="index2"><a class="rtnref" href="../F07/f07puc.xml">f07puc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;complex Hermitian positive-definite band matrix</td><td class="index2"><a class="rtnref" href="../F07/f07huc.xml">f07huc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;complex Hermitian positive-definite matrix</td><td class="index2"><a class="rtnref" href="../F07/f07fuc.xml">f07fuc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;complex Hermitian positive-definite matrix, packed storage</td><td class="index2"><a class="rtnref" href="../F07/f07guc.xml">f07guc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;complex matrix</td><td class="index2"><a class="rtnref" href="../F07/f07auc.xml">f07auc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;complex symmetric indefinite matrix</td><td class="index2"><a class="rtnref" href="../F07/f07nuc.xml">f07nuc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;complex symmetric indefinite matrix, packed storage</td><td class="index2"><a class="rtnref" href="../F07/f07quc.xml">f07quc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;real band matrix</td><td class="index2"><a class="rtnref" href="../F07/f07bgc.xml">f07bgc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;real matrix</td><td class="index2"><a class="rtnref" href="../F07/f07agc.xml">f07agc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;real symmetric indefinite matrix</td><td class="index2"><a class="rtnref" href="../F07/f07mgc.xml">f07mgc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;real symmetric indefinite matrix, packed storage</td><td class="index2"><a class="rtnref" href="../F07/f07pgc.xml">f07pgc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;real symmetric positive-definite band matrix</td><td class="index2"><a class="rtnref" href="../F07/f07hgc.xml">f07hgc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;real symmetric positive-definite matrix</td><td class="index2"><a class="rtnref" href="../F07/f07fgc.xml">f07fgc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;real symmetric positive-definite matrix, packed storage</td><td class="index2"><a class="rtnref" href="../F07/f07ggc.xml">f07ggc</a></td></tr>
      
      <tr><td class="index1">&#160;&#160;&#160;&#160;complex triangular band matrix</td><td class="index2"><a class="rtnref" href="../F07/f07vuc.xml">f07vuc</a></td></tr>
      <tr><td class="index1">&#160;&#160;&#160;&#160;complex triangular matrix</td><td class="index2"><a class="rtnref" href="../F07/f07tuc.xml">f07tuc</a></td></tr>
      <tr><td class="index1">&#160;&#160;&#160;&#160;complex triangular matrix, packed storage</td><td class="index2"><a class="rtnref" href="../F07/f07uuc.xml">f07uuc</a></td></tr>
      <tr><td class="index1">&#160;&#160;&#160;&#160;real triangular band matrix</td><td class="index2"><a class="rtnref" href="../F07/f07vgc.xml">f07vgc</a></td></tr>
      <tr><td class="index1">&#160;&#160;&#160;&#160;real triangular matrix</td><td class="index2"><a class="rtnref" href="../F07/f07tgc.xml">f07tgc</a></td></tr>
      <tr><td class="index1">&#160;&#160;&#160;&#160;real triangular matrix, packed storage</td><td class="index2"><a class="rtnref" href="../F07/f07ugc.xml">f07ugc</a></td></tr>
   
   <tr><td class="index1">
      <math xmlns="http://www.w3.org/1998/Math/MathML">
         <mi>L</mi>
         <msup><mi>L</mi><mi mathvariant="italic">T</mi></msup>
      </math>&#160;or <math xmlns="http://www.w3.org/1998/Math/MathML">
         <msup><mi>U</mi><mi mathvariant="italic">T</mi></msup>
         <mi>U</mi>
      </math>&#160;factorization:</td><td class="index2"/></tr>
   
      <tr><td class="index1">&#160;&#160;&#160;&#160;complex Hermitian positive-definite band matrix</td><td class="index2"><a class="rtnref" href="../F07/f07hrc.xml">f07hrc</a></td></tr>
      <tr><td class="index1">&#160;&#160;&#160;&#160;complex Hermitian positive-definite matrix</td><td class="index2"><a class="rtnref" href="../F07/f07frc.xml">f07frc</a></td></tr>
      <tr><td class="index1">&#160;&#160;&#160;&#160;complex Hermitian positive-definite matrix, packed storage</td><td class="index2"><a class="rtnref" href="../F07/f07grc.xml">f07grc</a></td></tr>
      <tr><td class="index1">&#160;&#160;&#160;&#160;real symmetric positive-definite band matrix</td><td class="index2"><a class="rtnref" href="../F07/f07hdc.xml">f07hdc</a></td></tr>
      <tr><td class="index1">&#160;&#160;&#160;&#160;real symmetric positive-definite matrix</td><td class="index2"><a class="rtnref" href="../F07/f07fdc.xml">f07fdc</a></td></tr>
      <tr><td class="index1">&#160;&#160;&#160;&#160;real symmetric positive-definite matrix, packed storage</td><td class="index2"><a class="rtnref" href="../F07/f07gdc.xml">f07gdc</a></td></tr>
   
   <tr><td class="index1">
      <math xmlns="http://www.w3.org/1998/Math/MathML">
         <mi>L</mi>
         <mi>U</mi>
      </math>&#160;factorization:</td><td class="index2"/></tr>
   
      <tr><td class="index1">&#160;&#160;&#160;&#160;complex band matrix</td><td class="index2"><a class="rtnref" href="../F07/f07brc.xml">f07brc</a></td></tr>
      <tr><td class="index1">&#160;&#160;&#160;&#160;complex matrix</td><td class="index2"><a class="rtnref" href="../F07/f07arc.xml">f07arc</a></td></tr>
      <tr><td class="index1">&#160;&#160;&#160;&#160;real band matrix</td><td class="index2"><a class="rtnref" href="../F07/f07bdc.xml">f07bdc</a></td></tr>
      <tr><td class="index1">&#160;&#160;&#160;&#160;real matrix</td><td class="index2"><a class="rtnref" href="../F07/f07adc.xml">f07adc</a></td></tr>
   
   <tr><td class="index1">Matrix inversion:</td><td class="index2"/></tr>
   
      <tr><td class="index1">&#160;&#160;&#160;&#160;after factorizing the matrix of coefficients:</td><td class="index2"/></tr>
      
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;complex Hermitian indefinite matrix</td><td class="index2"><a class="rtnref" href="../F07/f07mwc.xml">f07mwc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;complex Hermitian indefinite matrix, packed storage</td><td class="index2"><a class="rtnref" href="../F07/f07pwc.xml">f07pwc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;complex Hermitian positive-definite matrix</td><td class="index2"><a class="rtnref" href="../F07/f07fwc.xml">f07fwc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;complex Hermitian positive-definite matrix, packed storage</td><td class="index2"><a class="rtnref" href="../F07/f07gwc.xml">f07gwc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;complex matrix</td><td class="index2"><a class="rtnref" href="../F07/f07awc.xml">f07awc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;complex symmetric indefinite matrix</td><td class="index2"><a class="rtnref" href="../F07/f07nwc.xml">f07nwc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;complex symmetric indefinite matrix, packed storage</td><td class="index2"><a class="rtnref" href="../F07/f07qwc.xml">f07qwc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;real matrix</td><td class="index2"><a class="rtnref" href="../F07/f07ajc.xml">f07ajc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;real symmetric indefinite matrix</td><td class="index2"><a class="rtnref" href="../F07/f07mjc.xml">f07mjc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;real symmetric indefinite matrix, packed storage</td><td class="index2"><a class="rtnref" href="../F07/f07pjc.xml">f07pjc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;real symmetric positive-definite matrix</td><td class="index2"><a class="rtnref" href="../F07/f07fjc.xml">f07fjc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;real symmetric positive-definite matrix, packed storage</td><td class="index2"><a class="rtnref" href="../F07/f07gjc.xml">f07gjc</a></td></tr>
      
      <tr><td class="index1">&#160;&#160;&#160;&#160;complex triangular matrix</td><td class="index2"><a class="rtnref" href="../F07/f07twc.xml">f07twc</a></td></tr>
      <tr><td class="index1">&#160;&#160;&#160;&#160;complex triangular matrix, packed storage</td><td class="index2"><a class="rtnref" href="../F07/f07uwc.xml">f07uwc</a></td></tr>
      <tr><td class="index1">&#160;&#160;&#160;&#160;real triangular matrix</td><td class="index2"><a class="rtnref" href="../F07/f07tjc.xml">f07tjc</a></td></tr>
      <tr><td class="index1">&#160;&#160;&#160;&#160;real triangular matrix, packed storage</td><td class="index2"><a class="rtnref" href="../F07/f07ujc.xml">f07ujc</a></td></tr>
   
   <tr><td class="index1">
      <math xmlns="http://www.w3.org/1998/Math/MathML">
         <mi>P</mi>
         <mi>L</mi>
         <mi>D</mi>
         <msup><mi>L</mi><mi mathvariant="italic">T</mi></msup>
         <msup><mi>P</mi><mi mathvariant="italic">T</mi></msup>
      </math>&#160;or <math xmlns="http://www.w3.org/1998/Math/MathML">
         <mi>P</mi>
         <mi>U</mi>
         <mi>D</mi>
         <msup><mi>U</mi><mi mathvariant="italic">T</mi></msup>
         <msup><mi>P</mi><mi mathvariant="italic">T</mi></msup>
      </math>&#160;factorization:</td><td class="index2"/></tr>
   
      <tr><td class="index1">&#160;&#160;&#160;&#160;complex Hermitian indefinite matrix</td><td class="index2"><a class="rtnref" href="../F07/f07mrc.xml">f07mrc</a></td></tr>
      <tr><td class="index1">&#160;&#160;&#160;&#160;complex Hermitian indefinite matrix, packed storage</td><td class="index2"><a class="rtnref" href="../F07/f07prc.xml">f07prc</a></td></tr>
      <tr><td class="index1">&#160;&#160;&#160;&#160;complex symmetric indefinite matrix</td><td class="index2"><a class="rtnref" href="../F07/f07nrc.xml">f07nrc</a></td></tr>
      <tr><td class="index1">&#160;&#160;&#160;&#160;complex symmetric indefinite matrix, packed storage</td><td class="index2"><a class="rtnref" href="../F07/f07qrc.xml">f07qrc</a></td></tr>
      <tr><td class="index1">&#160;&#160;&#160;&#160;real symmetric indefinite matrix</td><td class="index2"><a class="rtnref" href="../F07/f07mdc.xml">f07mdc</a></td></tr>
      <tr><td class="index1">&#160;&#160;&#160;&#160;real symmetric indefinite matrix, packed storage</td><td class="index2"><a class="rtnref" href="../F07/f07pdc.xml">f07pdc</a></td></tr>
   
   <tr><td class="index1">Solution of simultaneous linear equations:</td><td class="index2"/></tr>
   
      <tr><td class="index1">&#160;&#160;&#160;&#160;after factorizing the matrix of coefficients:</td><td class="index2"/></tr>
      
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;complex band matrix</td><td class="index2"><a class="rtnref" href="../F07/f07bsc.xml">f07bsc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;complex Hermitian indefinite matrix</td><td class="index2"><a class="rtnref" href="../F07/f07msc.xml">f07msc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;complex Hermitian indefinite matrix, packed storage</td><td class="index2"><a class="rtnref" href="../F07/f07psc.xml">f07psc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;complex Hermitian positive-definite band matrix</td><td class="index2"><a class="rtnref" href="../F07/f07hsc.xml">f07hsc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;complex Hermitian positive-definite matrix</td><td class="index2"><a class="rtnref" href="../F07/f07fsc.xml">f07fsc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;complex Hermitian positive-definite matrix, packed storage</td><td class="index2"><a class="rtnref" href="../F07/f07gsc.xml">f07gsc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;complex matrix</td><td class="index2"><a class="rtnref" href="../F07/f07asc.xml">f07asc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;complex symmetric indefinite matrix</td><td class="index2"><a class="rtnref" href="../F07/f07nsc.xml">f07nsc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;complex symmetric indefinite matrix, packed storage</td><td class="index2"><a class="rtnref" href="../F07/f07qsc.xml">f07qsc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;complex triangular band matrix</td><td class="index2"><a class="rtnref" href="../F07/f07vsc.xml">f07vsc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;complex triangular matrix</td><td class="index2"><a class="rtnref" href="../F07/f07tsc.xml">f07tsc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;complex triangular matrix, packed storage</td><td class="index2"><a class="rtnref" href="../F07/f07usc.xml">f07usc</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;real band matrix</td><td class="index2"><a class="rtnref" href="../F07/f07bec.xml">f07bec</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;real matrix</td><td class="index2"><a class="rtnref" href="../F07/f07aec.xml">f07aec</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;real symmetric indefinite matrix</td><td class="index2"><a class="rtnref" href="../F07/f07mec.xml">f07mec</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;real symmetric indefinite matrix, packed storage</td><td class="index2"><a class="rtnref" href="../F07/f07pec.xml">f07pec</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;real symmetric positive-definite band matrix</td><td class="index2"><a class="rtnref" href="../F07/f07hec.xml">f07hec</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;real symmetric positive-definite matrix</td><td class="index2"><a class="rtnref" href="../F07/f07fec.xml">f07fec</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;real symmetric positive-definite matrix, packed storage</td><td class="index2"><a class="rtnref" href="../F07/f07gec.xml">f07gec</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;real triangular matrix</td><td class="index2"><a class="rtnref" href="../F07/f07tec.xml">f07tec</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;real triangular matrix, packed storage</td><td class="index2"><a class="rtnref" href="../F07/f07uec.xml">f07uec</a></td></tr>
         <tr><td class="index1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;triangular band matrix </td><td class="index2"><a class="rtnref" href="../F07/f07vec.xml">f07vec</a></td></tr>
      
   
</table>





<h2><a name="withdrawn" id="withdrawn"/>5&#160;&#160;Functions Withdrawn or Scheduled for Withdrawal</h2>

<p>None.</p>





<h2><a name="references" id="references"/>6&#160;&#160;References</h2>

<div class="paramtext">
<p><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 </p>
<p><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 </p>
<p><a name="ref526" id="ref526"/>Higham N J (1988) Algorithm 674: Fortran codes for estimating the one-norm of a real or complex matrix, with applications to condition estimation <i>ACM Trans. Math. Software</i> <b>14</b> 381&#8211;396 </p>
</div>

<hr/><div><a href="../../pdf/F07/f07_intro.pdf">f07 Chapter Introduction (pdf version)</a></div><div><a href="f07_conts.xml">Chapter Contents</a></div>
<div><a href="../mark7.xml">NAG C Library Contents</a></div>
<div><hr/>
  &#169; The Numerical Algorithms Group Ltd, Oxford, UK. 2004
  </div></body></html>