<?xml-stylesheet type="text/xsl" href="../styles/pmathml.xsl"?>
<!-- saved from url=(0014)about:internet -->
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:dsi="http://www.w3.org/1999/xlink" xmlns:m="http://www.w3.org/1998/Math/MathML" xml:space="preserve"><head><meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"/><title>F08ZAF (DGGLSE) : NAG Library, Mark 23</title><link rel="stylesheet" href="../styles/libdoc.css" type="text/css"/><script type="text/javascript">
   function showLevel(_levelId){
    var thisLevel = document.getElementById(_levelId);
    var thisplus = document.getElementById( _levelId.concat('plus'));
    var thisminus = document.getElementById( _levelId.concat('minus'));
    if(thisLevel.style.display != "block"){
     thisLevel.style.display = "block";
     thisplus.style.display = "none";
     thisminus.style.display = "inline";
     }
    else{
     thisLevel.style.display = "none";
     thisminus.style.display = "none";
     thisplus.style.display = "inline";
     }
    }
  </script></head><body><hr/><div><a class="rout" href="../../pdf/F08/f08zaf.pdf">F08ZAF (DGGLSE) (PDF version)</a></div><div><a class="chap" href="f08conts.xml">F08 Chapter Contents</a></div><div><a class="chapint" href="f08intro.xml">F08 Chapter Introduction</a></div>
<div><a class="htmltoc" href="../FRONTMATTER/manconts.xml">NAG Library Manual</a></div><hr/><h1 class="libdoc">NAG Library Routine Document<br/><br/>F08ZAF (DGGLSE)</h1><div class="paramtext"><div class="header"><b>Note:</b>&#160; before using this routine, please read the Users' Note for your implementation to check the interpretation of <span class="bitalic">bold italicised</span> terms and other implementation-dependent details.</div></div> 
<div class="htmltoc">
<h2 class="htmltoc"><span class="htmltochead" onclick="showLevel('htmltoc');"><span class="htmltocplus" id="htmltocplus">+</span><span class="htmltocminus" id="htmltocminus">&#8722;</span></span>&#160;Contents</h2>
<div class="htmltocitem" id="htmltoc">
<div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#purpose">1&#160;&#160;<b>Purpose</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#specification">2&#160;&#160;<b>Specification</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#description">3&#160;&#160;<b>Description</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#references">4&#160;&#160;<b>References</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#parameters">5&#160;&#160;<b>Parameters</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#errors">6&#160;&#160;<b>Error Indicators and Warnings</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#accuracy">7&#160;&#160;<b>Accuracy</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#fcomments">8&#160;&#160;<b>Further Comments</b></a>
</div><div class="htmltoc">
<span class="htmltoc" onclick="showLevel('tocexample');"><span class="htmltocplus" id="tocexampleplus">+</span><span class="htmltocminus" id="tocexampleminus">&#8722;</span></span>
<a class="htmltoc" href="#example">9&#160;&#160;<b>Example</b></a>
<div class="htmltocitem" id="tocexample">
<div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#examtext">9.1&#160;&#160;<b>Program Text</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#examdata">9.2&#160;&#160;<b>Program Data</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#examresults">9.3&#160;&#160;<b>Program Results</b></a>
</div>
</div>
</div>
</div>
</div><h2 class="standard"><a class="sec" name="purpose" id="purpose"/>1&#160;&#160;Purpose</h2>
<div class="paramtext">F08ZAF (DGGLSE) solves a real linear equality-constrained least squares problem.</div><h2 class="standard"><a class="sec" name="specification" id="specification"/>2&#160;&#160;Specification</h2><table class="fspec"><tr><td class="tdfspec1">
<div class="left-tablediv"><table class="fspec1"><tbody>
<tr>
<td class="tdfspec1" valign="top" align="left">SUBROUTINE&#160;F08ZAF&#160;(</td>
<td class="tdfspec2" valign="top" align="left"><a class="arg" href="#M">M</a>, <a class="arg" href="#N">N</a>, <a class="arg" href="#P">P</a>, <a class="arg" href="#A">A</a>, <a class="arg" href="#LDA">LDA</a>, <a class="arg" href="#B">B</a>, <a class="arg" href="#LDB">LDB</a>, <a class="arg" href="#C">C</a>, <a class="arg" href="#D">D</a>, <a class="arg" href="#X">X</a>, <a class="arg" href="#WORK">WORK</a>, <a class="arg" href="#LWORK">LWORK</a>, <a class="arg" href="#INFO">INFO</a>)</td>
</tr>
</tbody>
</table></div>
<div class="left-tablediv"><table class="fspec3"><tbody>
<tr>
<td class="tdfspec1" valign="top" align="left">INTEGER&#160;</td>
<td class="tdfspec2" valign="top" align="left">M, N, P, LDA, LDB, LWORK, INFO</td>
</tr>
<tr>
<td class="tdfspec1" valign="top" align="left">REAL&#160;(KIND=nag_wp)&#160;</td>
<td class="tdfspec2" valign="top" align="left">A(LDA,*), B(LDB,*), C(M), D(P), X(N), WORK(max(1,LWORK))</td>
</tr>
</tbody>
</table></div>
</td></tr></table>
<div class="paramtext">The routine may be called by its 
    LAPACK
    name <span class="bitalic">dgglse</span>.</div><h2 class="standard"><a class="sec" name="description" id="description"/>3&#160;&#160;Description</h2>
<div class="paramtext">F08ZAF (DGGLSE) solves the real linear equality-constrained least squares (LSE) problem

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:munder>
 <m:mi mathvariant="normal">minimize</m:mi>
 <m:mi>x</m:mi>
</m:munder><m:mspace width="0.25em"/>
<m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>c</m:mi><m:mo>-</m:mo><m:mi>A</m:mi><m:mi>x</m:mi></m:mfenced><m:mn>2</m:mn></m:msub><m:mtext>&#8195; subject to &#8195;</m:mtext><m:mi>B</m:mi><m:mi>x</m:mi><m:mo>=</m:mo><m:mi>d</m:mi>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:mi>A</m:mi></m:math>&#160;is an <m:math><m:mi>m</m:mi></m:math>&#160;by <m:math><m:mi>n</m:mi></m:math>&#160;matrix, <m:math><m:mi>B</m:mi></m:math>&#160;is a <m:math><m:mi>p</m:mi></m:math>&#160;by <m:math><m:mi>n</m:mi></m:math>&#160;matrix, <m:math><m:mi>c</m:mi></m:math>&#160;is an <m:math><m:mi>m</m:mi></m:math>&#160;element vector and <m:math><m:mi>d</m:mi></m:math>&#160;is a <m:math><m:mi>p</m:mi></m:math>&#160;element vector.  It is assumed that <m:math><m:mi>p</m:mi><m:mo>&#8804;</m:mo><m:mi>n</m:mi><m:mo>&#8804;</m:mo><m:mi>m</m:mi><m:mo>+</m:mo><m:mi>p</m:mi></m:math>, <m:math><m:mrow><m:mi>rank</m:mi><m:mfenced separators=""><m:mi>B</m:mi></m:mfenced></m:mrow><m:mo>=</m:mo><m:mi>p</m:mi></m:math>&#160;and <m:math><m:mrow><m:mi>rank</m:mi><m:mfenced separators=""><m:mi>E</m:mi></m:mfenced></m:mrow><m:mo>=</m:mo><m:mi>n</m:mi></m:math>, where <m:math><m:mi>E</m:mi><m:mo>=</m:mo> <m:mfenced><m:mtable>
  <m:mtr>
   <m:mtd><m:mi>A</m:mi></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:mi>B</m:mi></m:mtd>
  </m:mtr>
 </m:mtable></m:mfenced>
</m:math>.  These conditions ensure that the LSE problem has a unique solution, which is obtained using a generalized <m:math><m:mi>R</m:mi><m:mi>Q</m:mi></m:math>&#160;factorization of the matrices <m:math><m:mi>B</m:mi></m:math>&#160;and <m:math><m:mi>A</m:mi></m:math>.</div><h2 class="standard"><a class="sec" name="references" id="references"/>4&#160;&#160;References</h2><div class="paramtext"><a name="ref562" id="ref562"/>Anderson E, Bai Z, Bischof C, Blackford S, Demmel J, Dongarra J J, Du Croz J J, Greenbaum A, Hammarling S, McKenney A and Sorensen D (1999)  <i>LAPACK Users' Guide</i> (3rd Edition) SIAM, Philadelphia </div>
<div class="paramtext"><a name="ref590" id="ref590"/>Anderson E, Bai Z and Dongarra J (1992)  Generalized <span class="italic">QR</span> factorization and its applications <i>Linear Algebra Appl. (Volume 162&#8211;164)</i> 243&#8211;271 </div>
<div class="paramtext"><a name="ref591" id="ref591"/>Eld&#232;n L (1980)  Perturbation theory for the least-squares problem with linear equality constraints <i>SIAM J. Numer. Anal.</i> <b>17</b> 338&#8211;350 </div><h2 class="standard"><a class="sec" name="parameters" id="parameters"/>5&#160;&#160;Parameters</h2>
<dl><dt class="paramhead"><a name="M" id="M"/>1: &#160;&#160;&#8194; M &#8211; INTEGER<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: 


<m:math><m:mi>m</m:mi></m:math>, the number of rows of the matrix <m:math><m:mi>A</m:mi></m:math>.</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#M"><m:mi mathcolor="#EE0000" mathvariant="bold">M</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mn>0</m:mn></m:math>.
</div>
</dd><dt class="paramhead"><a name="N" id="N"/>2: &#160;&#160;&#8194; N &#8211; INTEGER<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: <m:math><m:mi>n</m:mi></m:math>, the number of columns of the matrices <m:math><m:mi>A</m:mi></m:math>&#160;and <m:math><m:mi>B</m:mi></m:math>.</div>
<div class="paramtext"><i>Constraint</i>:
  <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mn>0</m:mn></m:math>.
</div>
</dd><dt class="paramhead"><a name="P" id="P"/>3: &#160;&#160;&#8194; P &#8211; INTEGER<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: 

<m:math><m:mi>p</m:mi></m:math>, the number of rows of the matrix <m:math><m:mi>B</m:mi></m:math>.</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:mn>0</m:mn><m:mo>&#8804;</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#P"><m:mi mathcolor="#EE0000" mathvariant="bold">P</m:mi></m:maction><m:mo>&#8804;</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction><m:mo>&#8804;</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#M"><m:mi mathcolor="#EE0000" mathvariant="bold">M</m:mi></m:maction><m:mo>+</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#P"><m:mi mathcolor="#EE0000" mathvariant="bold">P</m:mi></m:maction></m:math>.
</div>
</dd><dt class="paramhead"><a name="A" id="A"/>4: &#160;&#160;&#8194; A(<a class="arg" href="#LDA">LDA</a>,<m:math><m:mo>*</m:mo></m:math>) &#8211; REAL&#160;(KIND=nag_wp)&#160;array<span class="pclass">Input/Output</span></dt><dd>
<div class="paramtext"><b>Note:</b> the second dimension of the array <a class="arg" href="#A">A</a>
must be at least
<m:math><m:mrow><m:mi>max</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:mn>1</m:mn><m:mo>,</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction></m:mfenced></m:mrow></m:math>.</div>
<div class="paramtext"><i>On entry</i>: the <m:math><m:mi>m</m:mi></m:math>&#160;by <m:math><m:mi>n</m:mi></m:math>&#160;matrix <m:math><m:mi>A</m:mi></m:math>.</div>
<div class="paramtext"><i>On exit</i>: 
<a class="arg" href="#A">A</a> is overwritten.
</div></dd><dt class="paramhead"><a name="LDA" id="LDA"/>5: &#160;&#160;&#8194; LDA &#8211; INTEGER<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: the first dimension of the array <a class="arg" href="#A">A</a> as declared in the (sub)program from which F08ZAF (DGGLSE) is called.</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#LDA"><m:mi mathcolor="#EE0000" mathvariant="bold">LDA</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mrow><m:mi>max</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:mn>1</m:mn><m:mo>,</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#M"><m:mi mathcolor="#EE0000" mathvariant="bold">M</m:mi></m:maction></m:mfenced></m:mrow></m:math>.
</div>
</dd><dt class="paramhead"><a name="B" id="B"/>6: &#160;&#160;&#8194; B(<a class="arg" href="#LDB">LDB</a>,<m:math><m:mo>*</m:mo></m:math>) &#8211; REAL&#160;(KIND=nag_wp)&#160;array<span class="pclass">Input/Output</span></dt><dd>
<div class="paramtext"><b>Note:</b> the second dimension of the array <a class="arg" href="#B">B</a>
must be at least
<m:math><m:mrow><m:mi>max</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:mn>1</m:mn><m:mo>,</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction></m:mfenced></m:mrow></m:math>.</div>
<div class="paramtext"><i>On entry</i>: the <m:math><m:mi>p</m:mi></m:math>&#160;by <m:math><m:mi>n</m:mi></m:math>&#160;matrix <m:math><m:mi>B</m:mi></m:math>.</div>
<div class="paramtext"><i>On exit</i>: <a class="arg" href="#B">B</a> is overwritten.</div></dd><dt class="paramhead"><a name="LDB" id="LDB"/>7: &#160;&#160;&#8194; LDB &#8211; INTEGER<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: the first dimension of the array <a class="arg" href="#B">B</a> as declared in the (sub)program from which F08ZAF (DGGLSE) is called.</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#LDB"><m:mi mathcolor="#EE0000" mathvariant="bold">LDB</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mrow><m:mi>max</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:mn>1</m:mn><m:mo>,</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#P"><m:mi mathcolor="#EE0000" mathvariant="bold">P</m:mi></m:maction></m:mfenced></m:mrow></m:math>.
</div>
</dd><dt class="paramhead"><a name="C" id="C"/>8: &#160;&#160;&#8194; C(<a class="arg" href="#M">M</a>) &#8211; REAL&#160;(KIND=nag_wp)&#160;array<span class="pclass">Input/Output</span></dt><dd><div class="paramtext"><i>On entry</i>: the right-hand side vector <m:math><m:mi>c</m:mi></m:math>&#160;for the least squares part of the LSE problem.</div><div class="paramtext"><i>On exit</i>: the residual sum of squares for the solution vector <m:math><m:mi>x</m:mi></m:math>&#160;is given by the sum of squares of elements <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#C"><m:mi mathcolor="#EE0000" mathvariant="bold">C</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction><m:mo>-</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#P"><m:mi mathcolor="#EE0000" mathvariant="bold">P</m:mi></m:maction><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow></m:mfenced></m:mrow><m:mo>,</m:mo><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#C"><m:mi mathcolor="#EE0000" mathvariant="bold">C</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction><m:mo>-</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#P"><m:mi mathcolor="#EE0000" mathvariant="bold">P</m:mi></m:maction><m:mo>+</m:mo><m:mn>2</m:mn></m:mrow></m:mfenced></m:mrow><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#C"><m:mi mathcolor="#EE0000" mathvariant="bold">C</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:maction actiontype="link" dsi:type="simple" dsi:href="#M"><m:mi mathcolor="#EE0000" mathvariant="bold">M</m:mi></m:maction></m:mfenced></m:mrow></m:math>; the remaining elements are overwritten.</div>
</dd><dt class="paramhead"><a name="D" id="D"/>9: &#160;&#160;&#8194; D(<a class="arg" href="#P">P</a>) &#8211; REAL&#160;(KIND=nag_wp)&#160;array<span class="pclass">Input/Output</span></dt><dd><div class="paramtext"><i>On entry</i>: the right-hand side vector <m:math><m:mi>d</m:mi></m:math>&#160;for the equality constraints.</div>
<div class="paramtext"><i>On exit</i>: <a class="arg" href="#D">D</a> is overwritten.</div>
</dd><dt class="paramhead"><a name="X" id="X"/>10: &#8194; X(<a class="arg" href="#N">N</a>) &#8211; REAL&#160;(KIND=nag_wp)&#160;array<span class="pclass">Output</span></dt><dd><div class="paramtext"><i>On exit</i>: the solution vector <m:math><m:mi>x</m:mi></m:math>&#160;of the LSE problem.</div>
</dd><dt class="paramhead"><a name="WORK" id="WORK"/>11: &#8194; WORK(<m:math><m:mrow><m:mi>max</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:mn>1</m:mn><m:mo>,</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#LWORK"><m:mi mathcolor="#EE0000" mathvariant="bold">LWORK</m:mi></m:maction></m:mfenced></m:mrow></m:math>) &#8211; REAL&#160;(KIND=nag_wp)&#160;array<span class="pclass">Workspace</span></dt><dd><div class="paramtext"><i>On exit</i>: if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#INFO"><m:mi mathcolor="#EE0000" mathvariant="bold">INFO</m:mi></m:maction><m:mo>=</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#errors"><m:mn mathcolor="#003399" mathvariant="bold">0</m:mn></m:maction></m:math>, <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#WORK"><m:mi mathcolor="#EE0000" mathvariant="bold">WORK</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mn>1</m:mn></m:mfenced></m:mrow></m:math>&#160;contains the minimum value of <a class="arg" href="#LWORK">LWORK</a> required for optimal performance.</div>
</dd><dt class="paramhead"><a name="LWORK" id="LWORK"/>12: &#8194; LWORK &#8211; INTEGER<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: 
the dimension of the array <a class="arg" href="#WORK">WORK</a> as declared in the (sub)program from which F08ZAF (DGGLSE) is called.


<div class="paramtext">If <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#LWORK"><m:mi mathcolor="#EE0000" mathvariant="bold">LWORK</m:mi></m:maction><m:mo>=</m:mo><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:math>, a workspace query is assumed; the routine only calculates the optimal size of the <a class="arg" href="#WORK">WORK</a> array, returns this value as the first entry of the <a class="arg" href="#WORK">WORK</a> array, and no error message related to <a class="arg" href="#LWORK">LWORK</a> is issued.</div></div>
<div class="paramtext"><i>Suggested value</i>:
  for optimal performance, <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#LWORK"><m:mi mathcolor="#EE0000" mathvariant="bold">LWORK</m:mi></m:maction><m:mo>&#8805;</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#P"><m:mi mathcolor="#EE0000" mathvariant="bold">P</m:mi></m:maction><m:mo>+</m:mo><m:mrow><m:mi>min</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:maction actiontype="link" dsi:type="simple" dsi:href="#M"><m:mi mathcolor="#EE0000" mathvariant="bold">M</m:mi></m:maction><m:mo>,</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction></m:mfenced></m:mrow><m:mo>+</m:mo><m:mrow><m:mi>max</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:maction actiontype="link" dsi:type="simple" dsi:href="#M"><m:mi mathcolor="#EE0000" mathvariant="bold">M</m:mi></m:maction><m:mo>,</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction></m:mfenced></m:mrow><m:mo>&#215;</m:mo><m:mi mathvariant="italic">nb</m:mi></m:math>, where <m:math><m:mi mathvariant="italic">nb</m:mi></m:math>&#160;is the optimal <span class="bitalic">block size</span>.


</div><div class="paramtext"><i>Constraint</i>:
  <m:math>
  <m:maction actiontype="link" dsi:type="simple" dsi:href="#LWORK"><m:mi mathcolor="#EE0000" mathvariant="bold">LWORK</m:mi></m:maction><m:mo>&#8805;</m:mo>
  <m:mrow><m:mi>max</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:mn>1</m:mn><m:mo>,</m:mo><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#M"><m:mi mathcolor="#EE0000" mathvariant="bold">M</m:mi></m:maction><m:mo>+</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction><m:mo>+</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#P"><m:mi mathcolor="#EE0000" mathvariant="bold">P</m:mi></m:maction></m:mrow></m:mfenced></m:mrow>
 </m:math>&#160;or <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#LWORK"><m:mi mathcolor="#EE0000" mathvariant="bold">LWORK</m:mi></m:maction><m:mo>=</m:mo><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:math>.
</div>
</dd><dt class="paramhead"><a name="INFO" id="INFO"/>13: &#8194; INFO &#8211; INTEGER<span class="pclass">Output</span></dt><dd><div class="paramtext"><i>On exit</i>: <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#INFO"><m:mi mathcolor="#EE0000" mathvariant="bold">INFO</m:mi></m:maction><m:mo>=</m:mo><m:mn>0</m:mn></m:math>&#160;unless the routine detects an error (see <a class="sec" href="#errors">Section 6</a>).</div></dd></dl><h2 class="standard"><a class="sec" name="errors" id="errors"/>6&#160;&#160;Error Indicators and Warnings</h2>
<div class="paramtext">Errors or warnings detected by the routine:</div>
<dl class="ifail">
<dt class="errorhead"><a name="INlt0" id="INlt0"/><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#INFO"><m:mi mathcolor="#EE0000" mathvariant="bold">INFO</m:mi></m:maction><m:mo>&lt;</m:mo><m:mn>0</m:mn></m:math></dt>
<dd><div class="paramtext">If <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#INFO"><m:mi mathcolor="#EE0000" mathvariant="bold">INFO</m:mi></m:maction><m:mo>=</m:mo><m:mo>-</m:mo><m:mi>i</m:mi></m:math>, argument <m:math><m:mi>i</m:mi></m:math>&#160;had an illegal value. An explanatory message is output, and execution of the program is terminated.</div></dd>
</dl><dl class="ifail">
<dt class="errorhead"><a name="INeq1" id="INeq1"/><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#INFO"><m:mi mathcolor="#EE0000" mathvariant="bold">INFO</m:mi></m:maction><m:mo>=</m:mo><m:mn>1</m:mn></m:math></dt>
<dd><div class="paramtext">The upper triangular factor <m:math><m:mi>R</m:mi></m:math>&#160;associated with <m:math><m:mi>B</m:mi></m:math>&#160;in the generalized <m:math><m:mi>R</m:mi><m:mi>Q</m:mi></m:math>&#160;factorization of the pair <m:math><m:mfenced separators=""><m:mi>B</m:mi><m:mo>,</m:mo><m:mi>A</m:mi></m:mfenced></m:math>&#160;is singular, so that <m:math><m:mi mathvariant="normal">rank</m:mi><m:mfenced separators=""><m:mi>B</m:mi></m:mfenced><m:mo>&lt;</m:mo><m:mi>p</m:mi></m:math>; the least squares solution could not be computed.</div></dd>
</dl><dl class="ifail">
<dt class="errorhead"><a name="INeq2" id="INeq2"/><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#INFO"><m:mi mathcolor="#EE0000" mathvariant="bold">INFO</m:mi></m:maction><m:mo>=</m:mo><m:mn>2</m:mn></m:math></dt>
<dd><div class="paramtext">The <m:math><m:mfenced separators=""><m:mi>N</m:mi><m:mo>-</m:mo><m:mi>P</m:mi></m:mfenced></m:math>&#160;by <m:math><m:mfenced separators=""><m:mi>N</m:mi><m:mo>-</m:mo><m:mi>P</m:mi></m:mfenced></m:math>&#160;part of the upper trapezoidal factor <m:math><m:mi>T</m:mi></m:math>&#160;associated with <m:math><m:mi>A</m:mi></m:math>&#160;in the generalised <m:math><m:mi>R</m:mi><m:mi>Q</m:mi></m:math>&#160;factorization of the pair <m:math><m:mfenced separators=""><m:mi>B</m:mi><m:mo>,</m:mo><m:mi>A</m:mi></m:mfenced></m:math>&#160;is singular, so that the rank of the matrix (<m:math><m:mi>E</m:mi></m:math>) comprising the rows of <m:math><m:mi>A</m:mi></m:math>&#160;and <m:math><m:mi>B</m:mi></m:math>&#160;is less than <m:math><m:mi>n</m:mi></m:math>; the least squares solutions could not be computed.</div></dd>
</dl><h2 class="standard"><a class="sec" name="accuracy" id="accuracy"/>7&#160;&#160;Accuracy</h2>
<div class="paramtext">For an error analysis, see <a class="ref" href="#ref590">Anderson <span class="italic">et al.</span> (1992)</a> and <a class="ref" href="#ref591">Eld&#232;n (1980)</a>. See also Section 4.6 of <a class="ref" href="#ref562">Anderson <span class="italic">et al.</span> (1999)</a>.</div><h2 class="standard"><a class="sec" name="fcomments" id="fcomments"/>8&#160;&#160;Further Comments</h2>
<div class="paramtext">When <m:math><m:mi>m</m:mi><m:mo>&#8805;</m:mo><m:mi>n</m:mi><m:mo>=</m:mo><m:mi>p</m:mi></m:math>, the total number of floating point operations is approximately <m:math><m:mfrac><m:mn>2</m:mn><m:mn>3</m:mn></m:mfrac><m:msup><m:mi>n</m:mi><m:mn>2</m:mn></m:msup><m:mfenced separators=""><m:mn>6</m:mn><m:mi>m</m:mi><m:mo>+</m:mo><m:mi>n</m:mi></m:mfenced></m:math>; if <m:math><m:mi>p</m:mi><m:mo>&#8810;</m:mo><m:mi>n</m:mi></m:math>, the number reduces to approximately <m:math><m:mfrac><m:mn>2</m:mn><m:mn>3</m:mn></m:mfrac><m:msup><m:mi>n</m:mi><m:mn>2</m:mn></m:msup><m:mfenced separators=""><m:mn>3</m:mn><m:mi>m</m:mi><m:mo>-</m:mo><m:mi>n</m:mi></m:mfenced></m:math>.</div><div class="paramtext"><a class="rout" href="../E04/e04ncf.xml">E04NCF/E04NCA</a> may also be used to solve LSE problems.  It differs from F08ZAF (DGGLSE) in that it uses an iterative (rather than direct) method, and that it allows general upper and lower bounds to be specified for the variables <m:math><m:mi>x</m:mi></m:math>&#160;and the linear constraints <m:math><m:mi>B</m:mi><m:mi>x</m:mi></m:math>.</div><h2 class="standard"><a class="sec" name="example" id="example"/>9&#160;&#160;Example</h2>
<div class="paramtext">This example solves the least squares problem

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:munder>
  <m:mi mathvariant="normal">minimize</m:mi>
  <m:mi>x</m:mi>
 </m:munder><m:mspace width="0.25em"/>
 <m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>c</m:mi><m:mo>-</m:mo><m:mi>A</m:mi><m:mi>x</m:mi></m:mfenced><m:mn>2</m:mn></m:msub>
 <m:mtext>&#8195; subject to &#8195;</m:mtext>
 <m:mi>B</m:mi><m:mi>x</m:mi><m:mo>=</m:mo><m:mi>d</m:mi>
</m:math></td><td class="formula2"/></tr></table></div>

where

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>c</m:mi>
 <m:mo>=</m:mo>
 <m:mfenced><m:mtable columnalign="right">
<m:mtr>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>1.50</m:mn></m:mrow></m:mtd>
</m:mtr><m:mtr>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>2.14</m:mn></m:mrow></m:mtd>
</m:mtr><m:mtr>
   <m:mtd><m:mn>1.23</m:mn></m:mtd>
</m:mtr><m:mtr>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>0.54</m:mn></m:mrow></m:mtd>
</m:mtr><m:mtr>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>1.68</m:mn></m:mrow></m:mtd>
</m:mtr><m:mtr>
   <m:mtd><m:mn>0.82</m:mn></m:mtd>
</m:mtr>
</m:mtable></m:mfenced>
 <m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div><div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>A</m:mi>
 <m:mo>=</m:mo>
 <m:mfenced><m:mtable columnalign="right">
<m:mtr>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>0.57</m:mn></m:mrow></m:mtd>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>1.28</m:mn></m:mrow></m:mtd>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>0.39</m:mn></m:mrow></m:mtd>
   <m:mtd><m:mn>0.25</m:mn></m:mtd>
</m:mtr><m:mtr>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>1.93</m:mn></m:mrow></m:mtd>
   <m:mtd><m:mn>1.08</m:mn></m:mtd>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>0.31</m:mn></m:mrow></m:mtd>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>2.14</m:mn></m:mrow></m:mtd>
</m:mtr><m:mtr>
   <m:mtd><m:mn>2.30</m:mn></m:mtd>
   <m:mtd><m:mn>0.24</m:mn></m:mtd>
   <m:mtd><m:mn>0.40</m:mn></m:mtd>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>0.35</m:mn></m:mrow></m:mtd>
</m:mtr><m:mtr>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>1.93</m:mn></m:mrow></m:mtd>
   <m:mtd><m:mn>0.64</m:mn></m:mtd>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>0.66</m:mn></m:mrow></m:mtd>
   <m:mtd><m:mn>0.08</m:mn></m:mtd>
</m:mtr><m:mtr>
   <m:mtd><m:mn>0.15</m:mn></m:mtd>
   <m:mtd><m:mn>0.30</m:mn></m:mtd>
   <m:mtd><m:mn>0.15</m:mn></m:mtd>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>2.13</m:mn></m:mrow></m:mtd>
</m:mtr><m:mtr>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>0.02</m:mn></m:mrow></m:mtd>
   <m:mtd><m:mn>1.03</m:mn></m:mtd>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>1.43</m:mn></m:mrow></m:mtd>
   <m:mtd><m:mn>0.50</m:mn></m:mtd>
</m:mtr>
</m:mtable></m:mfenced>
 <m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div><div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>B</m:mi>
 <m:mo>=</m:mo>
 <m:mfenced><m:mtable>
  <m:mtr>
   <m:mtd><m:mn>1.0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>1.0</m:mn></m:mrow></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>1.0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>1.0</m:mn></m:mrow></m:mtd>
  </m:mtr>
 </m:mtable></m:mfenced>
</m:math></td><td class="formula2"/></tr></table></div>

and

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>d</m:mi>
 <m:mo>=</m:mo>
 <m:mfenced><m:mtable>
  <m:mtr>
   <m:mtd><m:mn>0</m:mn></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:mn>0</m:mn></m:mtd>
  </m:mtr>
 </m:mtable></m:mfenced>
 <m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div></div><div class="paramtext">The constraints <m:math>
 <m:mi>B</m:mi><m:mi>x</m:mi><m:mo>=</m:mo><m:mi>d</m:mi>
</m:math>&#160;correspond to <m:math>
 <m:msub><m:mi>x</m:mi><m:mn>1</m:mn></m:msub>
 <m:mo>=</m:mo>
 <m:msub><m:mi>x</m:mi><m:mn>3</m:mn></m:msub>
</m:math>&#160;and <m:math>
 <m:msub><m:mi>x</m:mi><m:mn>2</m:mn></m:msub>
 <m:mo>=</m:mo>
 <m:msub><m:mi>x</m:mi><m:mn>4</m:mn></m:msub>
</m:math>.</div><h3 class="standard"><a class="sec" name="examtext" id="examtext"/>9.1&#160;&#160;Program Text</h3>
<p><a class="verbatimref" href="../../examples/source/f08zafe.f90">Program Text (f08zafe.f90)</a></p><h3 class="standard"><a class="sec" name="examdata" id="examdata"/>9.2&#160;&#160;Program Data</h3>
<p><a class="verbatimref" href="../../examples/data/f08zafe.d">Program&#160;Data (f08zafe.d)</a></p><h3 class="standard"><a class="sec" name="examresults" id="examresults"/>9.3&#160;&#160;Program Results</h3>
<p><a class="verbatimref" href="../../examples/baseresults/f08zafe.r">Program Results (f08zafe.r)</a></p>
<hr/><div><a class="rout" href="../../pdf/F08/f08zaf.pdf">F08ZAF (DGGLSE) (PDF version)</a></div><div><a class="chap" href="f08conts.xml">F08 Chapter Contents</a></div><div><a class="chapint" href="f08intro.xml">F08 Chapter Introduction</a></div>
<div><a class="htmltoc" href="../FRONTMATTER/manconts.xml">NAG Library Manual</a></div>
<div><hr/><a class="genint" href="../FRONTMATTER/copyright.xml">&#169; The Numerical Algorithms Group Ltd, Oxford, UK. 2011</a></div></body></html>