<?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>F08MSF (ZBDSQR) : 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/f08msf.pdf">F08MSF (ZBDSQR) (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/>F08MSF (ZBDSQR)</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="paramtext"><div class="header"><b>Warning.</b> The specification of the parameter <a class="arg" href="#WORK">WORK</a> changed at Mark 20: the length of <a class="arg" href="#WORK">WORK</a> needs to be increased.</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="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#example">9&#160;&#160;<b>Example</b></a>
</div>
</div>
</div><h2 class="standard"><a class="sec" name="purpose" id="purpose"/>1&#160;&#160;Purpose</h2>
<div class="paramtext">F08MSF (ZBDSQR) computes the singular value decomposition of a complex general matrix which has been reduced to bidiagonal form.</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;F08MSF&#160;(</td>
<td class="tdfspec2" valign="top" align="left"><a class="arg" href="#UPLO">UPLO</a>, <a class="arg" href="#N">N</a>, <a class="arg" href="#NCVT">NCVT</a>, <a class="arg" href="#NRU">NRU</a>, <a class="arg" href="#NCC">NCC</a>, <a class="arg" href="#D">D</a>, <a class="arg" href="#E">E</a>, <a class="arg" href="#VT">VT</a>, <a class="arg" href="#LDVT">LDVT</a>, <a class="arg" href="#U">U</a>, <a class="arg" href="#LDU">LDU</a>, <a class="arg" href="#C">C</a>, <a class="arg" href="#LDC">LDC</a>, <a class="arg" href="#WORK">WORK</a>, <a class="arg" href="#INFO">INFO</a>)</td>
</tr>
</tbody>
</table></div>
<div class="left-tablediv"><table class="fspec3"><tbody>
<tr>
<td class="tdfspec1" valign="top" align="left">INTEGER&#160;</td>
<td class="tdfspec2" valign="top" align="left">N, NCVT, NRU, NCC, LDVT, LDU, LDC, 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">D(*), E(*), WORK(*)</td>
</tr>
<tr>
<td class="tdfspec1" valign="top" align="left">COMPLEX&#160;(KIND=nag_wp)&#160;</td>
<td class="tdfspec2" valign="top" align="left">VT(LDVT,*), U(LDU,*), C(LDC,*)</td>
</tr><tr>
<td class="tdfspec1" valign="top" align="left">CHARACTER(1)&#160;</td>
<td class="tdfspec2" valign="top" align="left">UPLO</td></tr>
</tbody>
</table></div>
</td></tr></table>
<div class="paramtext">The routine may be called by its 
    LAPACK
    name <span class="bitalic">zbdsqr</span>.</div><h2 class="standard"><a class="sec" name="description" id="description"/>3&#160;&#160;Description</h2>
<div class="paramtext">F08MSF (ZBDSQR) computes the singular values and, optionally, the left or right singular vectors of a real upper or lower bidiagonal matrix <m:math><m:mi>B</m:mi></m:math>.  In other words, it can compute the singular value decomposition (SVD) of <m:math><m:mi>B</m:mi></m:math>&#160;as

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>B</m:mi>
 <m:mo>=</m:mo>
 <m:mi>U</m:mi>
 <m:mi>&#931;</m:mi>
 <m:msup><m:mi>V</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup>
 <m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

Here <m:math><m:mi>&#931;</m:mi></m:math>&#160;is a diagonal matrix with real diagonal elements <m:math><m:msub><m:mi>&#963;</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;(the singular values of <m:math><m:mi>B</m:mi></m:math>), such that

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:msub><m:mi>&#963;</m:mi><m:mn>1</m:mn></m:msub>
 <m:mo>&#8805;</m:mo>
 <m:msub><m:mi>&#963;</m:mi><m:mn>2</m:mn></m:msub>
 <m:mo>&#8805;</m:mo>
 <m:mo>&#8943;</m:mo>
 <m:mo>&#8805;</m:mo>
 <m:msub><m:mi>&#963;</m:mi><m:mi>n</m:mi></m:msub>
 <m:mo>&#8805;</m:mo>
 <m:mn>0</m:mn>
 <m:mtext>;</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div><m:math><m:mi>U</m:mi></m:math>&#160;is an orthogonal matrix whose columns are the left singular vectors <m:math><m:msub><m:mi>u</m:mi><m:mi>i</m:mi></m:msub></m:math>; <m:math><m:mi>V</m:mi></m:math>&#160;is an orthogonal matrix whose rows are the right singular vectors <m:math><m:msub><m:mi>v</m:mi><m:mi>i</m:mi></m:msub></m:math>.  Thus

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>B</m:mi><m:msub><m:mi>u</m:mi><m:mi>i</m:mi></m:msub>
 <m:mo>=</m:mo>
 <m:msub><m:mi>&#963;</m:mi><m:mi>i</m:mi></m:msub>
 <m:msub><m:mi>v</m:mi><m:mi>i</m:mi></m:msub>
 <m:mtext>&#8195; and &#8195;</m:mtext>
 <m:msup><m:mi>B</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup>
 <m:msub><m:mi>v</m:mi><m:mi>i</m:mi></m:msub>
 <m:mo>=</m:mo>
 <m:msub><m:mi>&#963;</m:mi><m:mi>i</m:mi></m:msub>
 <m:msub><m:mi>u</m:mi><m:mi>i</m:mi></m:msub>
 <m:mtext>, &#8195;</m:mtext>
 <m:mi>i</m:mi>
 <m:mo>=</m:mo>
 <m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:mi>n</m:mi>
 <m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

To compute <m:math><m:mi>U</m:mi></m:math>&#160;and/or <m:math><m:msup><m:mi>V</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup></m:math>, the arrays <a class="arg" href="#U">U</a> and/or <a class="arg" href="#VT">VT</a> must be initialized to the unit matrix before F08MSF (ZBDSQR) is called.</div><div class="paramtext">The routine stores the real orthogonal matrices <m:math><m:mi>U</m:mi></m:math>&#160;and <m:math><m:msup><m:mi>V</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup></m:math>&#160;in complex arrays <a class="arg" href="#U">U</a> and <a class="arg" href="#VT">VT</a>, so that it may also be used to compute the SVD of a complex general matrix <m:math><m:mi>A</m:mi></m:math>&#160;which has been reduced to bidiagonal form by a unitary transformation: <m:math><m:mi>A</m:mi><m:mo>=</m:mo><m:mi>Q</m:mi><m:mi>B</m:mi><m:msup><m:mi>P</m:mi><m:mi mathvariant="normal">H</m:mi></m:msup></m:math>.  If <m:math><m:mi>A</m:mi></m:math>&#160;is <m:math><m:mi>m</m:mi></m:math>&#160;by <m:math><m:mi>n</m:mi></m:math>&#160;with <m:math><m:mi>m</m:mi><m:mo>&#8805;</m:mo><m:mi>n</m:mi></m:math>, then <m:math><m:mi>Q</m:mi></m:math>&#160;is <m:math><m:mi>m</m:mi></m:math>&#160;by <m:math><m:mi>n</m:mi></m:math>&#160;and <m:math><m:msup><m:mi>P</m:mi><m:mi mathvariant="normal">H</m:mi></m:msup></m:math>&#160;is <m:math><m:mi>n</m:mi></m:math>&#160;by <m:math><m:mi>n</m:mi></m:math>; if <m:math><m:mi>A</m:mi></m:math>&#160;is <m:math><m:mi>n</m:mi></m:math>&#160;by <m:math><m:mi>p</m:mi></m:math>&#160;with <m:math><m:mi>n</m:mi><m:mo>&lt;</m:mo><m:mi>p</m:mi></m:math>, then <m:math><m:mi>Q</m:mi></m:math>&#160;is <m:math><m:mi>n</m:mi></m:math>&#160;by <m:math><m:mi>n</m:mi></m:math>&#160;and <m:math><m:msup><m:mi>P</m:mi><m:mi mathvariant="normal">H</m:mi></m:msup></m:math>&#160;is <m:math><m:mi>n</m:mi></m:math>&#160;by <m:math><m:mi>p</m:mi></m:math>.  In this case, the matrices <m:math><m:mi>Q</m:mi></m:math>&#160;and/or <m:math><m:msup><m:mi>P</m:mi><m:mi mathvariant="normal">H</m:mi></m:msup></m:math>&#160;must be formed explicitly by <a class="rout" href="../F08/f08ktf.xml">F08KTF (ZUNGBR)</a> and passed to F08MSF (ZBDSQR) in the arrays <a class="arg" href="#U">U</a> and/or <a class="arg" href="#VT">VT</a> respectively.</div><div class="paramtext">F08MSF (ZBDSQR) also has the capability of forming <m:math><m:msup><m:mi>U</m:mi><m:mi mathvariant="normal">H</m:mi></m:msup><m:mi>C</m:mi></m:math>, where <m:math><m:mi>C</m:mi></m:math>&#160;is an arbitrary complex matrix; this is needed when using the SVD to solve linear least squares problems.</div><div class="paramtext">F08MSF (ZBDSQR) uses two different algorithms.  If any singular vectors are required (i.e., if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#NCVT"><m:mi mathcolor="#EE0000" mathvariant="bold">NCVT</m:mi></m:maction><m:mo>&gt;</m:mo><m:mn>0</m:mn></m:math>&#160;or <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#NRU"><m:mi mathcolor="#EE0000" mathvariant="bold">NRU</m:mi></m:maction><m:mo>&gt;</m:mo><m:mn>0</m:mn></m:math>&#160;or <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#NCC"><m:mi mathcolor="#EE0000" mathvariant="bold">NCC</m:mi></m:maction><m:mo>&gt;</m:mo><m:mn>0</m:mn></m:math>), the bidiagonal <m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;algorithm is used, switching between zero-shift and implicitly shifted forms to preserve the accuracy of small singular values, and switching between <m:math><m:mi>Q</m:mi><m:mi>R</m:mi></m:math>&#160;and <m:math><m:mi>Q</m:mi><m:mi>L</m:mi></m:math>&#160;variants in order to handle graded matrices effectively (see <a class="ref" href="#ref454">Demmel and Kahan (1990)</a>).  If only singular values are required (i.e., if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#NCVT"><m:mi mathcolor="#EE0000" mathvariant="bold">NCVT</m:mi></m:maction><m:mo>=</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#NRU"><m:mi mathcolor="#EE0000" mathvariant="bold">NRU</m:mi></m:maction><m:mo>=</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#NCC"><m:mi mathcolor="#EE0000" mathvariant="bold">NCC</m:mi></m:maction><m:mo>=</m:mo><m:mn>0</m:mn></m:math>), they are computed by the differential qd algorithm (see <a class="ref" href="#ref593">Fernando and Parlett (1994)</a>), which is faster and can achieve even greater accuracy.</div><div class="paramtext">The singular vectors are normalized so that <m:math><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:msub><m:mi>u</m:mi><m:mi>i</m:mi></m:msub></m:mfenced><m:mo>=</m:mo><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:msub><m:mi>v</m:mi><m:mi>i</m:mi></m:msub></m:mfenced><m:mo>=</m:mo><m:mn>1</m:mn></m:math>, but are determined only to within a complex factor of absolute value <m:math><m:mn>1</m:mn></m:math>.</div><h2 class="standard"><a class="sec" name="references" id="references"/>4&#160;&#160;References</h2><div class="paramtext"><a name="ref454" id="ref454"/>Demmel J W and Kahan W (1990)  Accurate singular values of bidiagonal matrices <i>SIAM J. Sci. Statist. Comput.</i> <b>11</b> 873&#8211;912 </div>
<div class="paramtext"><a name="ref593" id="ref593"/>Fernando K V and Parlett B N (1994)  Accurate singular values and differential qd algorithms <i>Numer. Math.</i> <b>67</b> 191&#8211;229 </div>
<div class="paramtext"><a name="ref105" id="ref105"/>Golub G H and Van Loan C F (1996)  <i>Matrix Computations</i> (3rd Edition) Johns Hopkins University Press, Baltimore </div><h2 class="standard"><a class="sec" name="parameters" id="parameters"/>5&#160;&#160;Parameters</h2>
<dl><dt class="paramhead"><a name="UPLO" id="UPLO"/>1: &#160;&#160;&#8194; UPLO &#8211; CHARACTER(1)<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: indicates whether <m:math><m:mi>B</m:mi></m:math>&#160;is an upper or lower bidiagonal matrix.

<dl>
<dt class="paramval"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#UPLO"><m:mi mathcolor="#EE0000" mathvariant="bold">UPLO</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'U'</m:mtext></m:math></dt>
<dd><m:math><m:mi>B</m:mi></m:math>&#160;is an upper bidiagonal matrix.</dd>
<dt class="paramval"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#UPLO"><m:mi mathcolor="#EE0000" mathvariant="bold">UPLO</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'L'</m:mtext></m:math></dt>
<dd><m:math><m:mi>B</m:mi></m:math>&#160;is a lower bidiagonal matrix.</dd></dl>
</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#UPLO"><m:mi mathcolor="#EE0000" mathvariant="bold">UPLO</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'U'</m:mtext></m:math>&#160;or <m:math><m:mtext>'L'</m:mtext></m:math>.
</div>
</dd><dt class="paramhead"><a name="N" id="N"/>2: &#160;&#160;&#8194; N &#8211; INTEGER<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: 

<m:math><m:mi>n</m:mi></m:math>, the order of the matrix <m:math><m:mi>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="NCVT" id="NCVT"/>3: &#160;&#160;&#8194; NCVT &#8211; INTEGER<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: <m:math><m:mi mathvariant="italic">ncvt</m:mi></m:math>, the number of columns of the matrix
<m:math><m:msup><m:mi>V</m:mi><m:mi mathvariant="normal">H</m:mi></m:msup></m:math><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#NCVT"><m:mi mathcolor="#EE0000" mathvariant="bold">NCVT</m:mi></m:maction><m:mo>=</m:mo><m:mn>0</m:mn></m:math>&#160;of right singular vectors. Set <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#NCVT"><m:mi mathcolor="#EE0000" mathvariant="bold">NCVT</m:mi></m:maction><m:mo>=</m:mo><m:mn>0</m:mn></m:math>&#160;if no right singular vectors are required.</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#NCVT"><m:mi mathcolor="#EE0000" mathvariant="bold">NCVT</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mn>0</m:mn></m:math>.
</div>
</dd><dt class="paramhead"><a name="NRU" id="NRU"/>4: &#160;&#160;&#8194; NRU &#8211; INTEGER<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: 
<m:math><m:mi mathvariant="italic">nru</m:mi></m:math>, the number of rows of the matrix <m:math><m:mi>U</m:mi></m:math>&#160;of left singular vectors. Set <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#NRU"><m:mi mathcolor="#EE0000" mathvariant="bold">NRU</m:mi></m:maction><m:mo>=</m:mo><m:mn>0</m:mn></m:math>&#160;if no left singular vectors are required.</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#NRU"><m:mi mathcolor="#EE0000" mathvariant="bold">NRU</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mn>0</m:mn></m:math>.
</div>
</dd><dt class="paramhead"><a name="NCC" id="NCC"/>5: &#160;&#160;&#8194; NCC &#8211; INTEGER<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: <m:math><m:mi mathvariant="italic">ncc</m:mi></m:math>, the number of columns of the matrix <m:math><m:mi>C</m:mi></m:math>. Set <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#NCC"><m:mi mathcolor="#EE0000" mathvariant="bold">NCC</m:mi></m:maction><m:mo>=</m:mo><m:mn>0</m:mn></m:math>&#160;if no matrix <m:math><m:mi>C</m:mi></m:math>&#160;is supplied.</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#NCC"><m:mi mathcolor="#EE0000" mathvariant="bold">NCC</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mn>0</m:mn></m:math>.
</div>
</dd><dt class="paramhead"><a name="D" id="D"/>6: &#160;&#160;&#8194; D(<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 dimension of the array <a class="arg" href="#D">D</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 diagonal elements of the bidiagonal matrix <m:math><m:mi>B</m:mi></m:math>.</div>
<div class="paramtext"><i>On exit</i>: the singular values in decreasing order of magnitude, unless <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#INFO"><m:mi mathcolor="#EE0000" mathvariant="bold">INFO</m:mi></m:maction><m:mo>&gt;</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#errors"><m:mn mathcolor="#003399" mathvariant="bold">0</m:mn></m:maction></m:math>&#160;(in which case see <a class="sec" href="#errors">Section 6</a>).</div>
</dd><dt class="paramhead"><a name="E" id="E"/>7: &#160;&#160;&#8194; E(<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 dimension of the array <a class="arg" href="#E">E</a>
must be at least
<m:math><m:mrow><m:mi>max</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:mn>1</m:mn><m:mo>,</m:mo><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:mfenced></m:mrow></m:math>.</div>
<div class="paramtext"><i>On entry</i>: the off-diagonal elements of the bidiagonal matrix <m:math><m:mi>B</m:mi></m:math>.</div>
<div class="paramtext"><i>On exit</i>: <a class="arg" href="#E">E</a> is overwritten, but 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>&gt;</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#errors"><m:mn mathcolor="#003399" mathvariant="bold">0</m:mn></m:maction></m:math>&#160;see <a class="sec" href="#errors">Section 6</a>.</div>
</dd><dt class="paramhead"><a name="VT" id="VT"/>8: &#160;&#160;&#8194; VT(<a class="arg" href="#LDVT">LDVT</a>,<m:math><m:mo>*</m:mo></m:math>) &#8211; COMPLEX&#160;(KIND=nag_wp)&#160;array<span class="pclass">Input/Output</span></dt><dd>
<div class="paramtext"><b>Note:</b> the second dimension of the array <a class="arg" href="#VT">VT</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="#NCVT"><m:mi mathcolor="#EE0000" mathvariant="bold">NCVT</m:mi></m:maction></m:mfenced></m:mrow></m:math>.</div><div class="paramtext"><i>On entry</i>: if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#NCVT"><m:mi mathcolor="#EE0000" mathvariant="bold">NCVT</m:mi></m:maction><m:mo>&gt;</m:mo><m:mn>0</m:mn></m:math>, <a class="arg" href="#VT">VT</a> must contain an <m:math><m:mi>n</m:mi></m:math>&#160;by <m:math><m:mi mathvariant="italic">ncvt</m:mi></m:math>&#160;matrix. If the right singular vectors of <m:math><m:mi>B</m:mi></m:math>&#160;are required, <m:math><m:mi mathvariant="italic">ncvt</m:mi><m:mo>=</m:mo><m:mi>n</m:mi></m:math>&#160;and <a class="arg" href="#VT">VT</a> must contain the unit matrix; if the right singular vectors of <m:math><m:mi>A</m:mi></m:math>&#160;are required, <a class="arg" href="#VT">VT</a> must contain the unitary
matrix <m:math><m:msup><m:mi>P</m:mi><m:mi mathvariant="normal">H</m:mi></m:msup>
</m:math>&#160;returned by <a class="rout" href="../F08/f08ktf.xml">F08KTF (ZUNGBR)</a>
with <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="../F08/f08ktf.xml#VECT"><m:mi mathcolor="#EE0000" mathvariant="bold">VECT</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'P'</m:mtext></m:math>&#160;.</div>
<div class="paramtext"><i>On exit</i>: the <m:math><m:mi>n</m:mi></m:math>&#160;by <m:math><m:mi mathvariant="italic">ncvt</m:mi></m:math>&#160;matrix <m:math><m:msup><m:mi>V</m:mi><m:mi mathvariant="normal">H</m:mi></m:msup>
</m:math>&#160;or <m:math><m:msup><m:mi>V</m:mi><m:mi mathvariant="normal">H</m:mi></m:msup>
</m:math>&#160;of right singular vectors, stored by rows.
<div class="paramtext">If <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#NCVT"><m:mi mathcolor="#EE0000" mathvariant="bold">NCVT</m:mi></m:maction><m:mo>=</m:mo><m:mn>0</m:mn></m:math>, <a class="arg" href="#VT">VT</a> is not referenced.</div>
</div>
</dd><dt class="paramhead"><a name="LDVT" id="LDVT"/>9: &#160;&#160;&#8194; LDVT &#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="#VT">VT</a> as declared in the (sub)program from which F08MSF (ZBDSQR) is called.</div><div class="paramtext"><i>Constraints</i>:
   <div class="paramtext"/><ul class="listcons">
<li class="listcons">if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#NCVT"><m:mi mathcolor="#EE0000" mathvariant="bold">NCVT</m:mi></m:maction><m:mo>&gt;</m:mo><m:mn>0</m:mn></m:math>, <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#LDVT"><m:mi mathcolor="#EE0000" mathvariant="bold">LDVT</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mrow><m:mi>max</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:mn>1</m:mn><m:mo>,</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction></m:mfenced></m:mrow></m:math>;</li>
<li class="listcons">otherwise <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#LDVT"><m:mi mathcolor="#EE0000" mathvariant="bold">LDVT</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mn>1</m:mn></m:math>.</li>
</ul></div>
</dd><dt class="paramhead"><a name="U" id="U"/>10: &#8194; U(<a class="arg" href="#LDU">LDU</a>,<m:math><m:mo>*</m:mo></m:math>) &#8211; COMPLEX&#160;(KIND=nag_wp)&#160;array<span class="pclass">Input/Output</span></dt><dd>
<div class="paramtext"><b>Note:</b> the second dimension of the array <a class="arg" href="#U">U</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>: if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#NRU"><m:mi mathcolor="#EE0000" mathvariant="bold">NRU</m:mi></m:maction><m:mo>&gt;</m:mo><m:mn>0</m:mn></m:math>, <a class="arg" href="#U">U</a> must contain an <m:math><m:mi mathvariant="italic">nru</m:mi></m:math>&#160;by <m:math><m:mi>n</m:mi></m:math>&#160;matrix. If the left singular vectors of <m:math><m:mi>B</m:mi></m:math>&#160;are required, <m:math><m:mi mathvariant="italic">nru</m:mi><m:mo>=</m:mo><m:mi>n</m:mi></m:math>&#160;and <a class="arg" href="#U">U</a> must contain the unit matrix; if the left singular vectors of <m:math><m:mi>A</m:mi></m:math>&#160;are required, <a class="arg" href="#U">U</a> must contain the unitary
matrix <m:math><m:mi>Q</m:mi></m:math>&#160;returned by <a class="rout" href="../F08/f08ktf.xml">F08KTF (ZUNGBR)</a>
with <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="../F08/f08ktf.xml#VECT"><m:mi mathcolor="#EE0000" mathvariant="bold">VECT</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'Q'</m:mtext></m:math>&#160;.</div>
<div class="paramtext"><i>On exit</i>: the <m:math><m:mi mathvariant="italic">nru</m:mi></m:math>&#160;by <m:math><m:mi>n</m:mi></m:math>&#160;matrix <m:math><m:mi>U</m:mi></m:math>&#160;or <m:math><m:mi>Q</m:mi><m:mi>U</m:mi></m:math>&#160;of left singular vectors, stored as columns of the matrix.
<div class="paramtext">If <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#NRU"><m:mi mathcolor="#EE0000" mathvariant="bold">NRU</m:mi></m:maction><m:mo>=</m:mo><m:mn>0</m:mn></m:math>, <a class="arg" href="#U">U</a> is not referenced.</div>
</div>
</dd><dt class="paramhead"><a name="LDU" id="LDU"/>11: &#8194; LDU &#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="#U">U</a> as declared in the (sub)program from which F08MSF (ZBDSQR) is called.</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#LDU"><m:mi mathcolor="#EE0000" mathvariant="bold">LDU</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="#NRU"><m:mi mathcolor="#EE0000" mathvariant="bold">NRU</m:mi></m:maction></m:mfenced></m:mrow></m:math>.
</div>
</dd><dt class="paramhead"><a name="C" id="C"/>12: &#8194; C(<a class="arg" href="#LDC">LDC</a>,<m:math><m:mo>*</m:mo></m:math>) &#8211; COMPLEX&#160;(KIND=nag_wp)&#160;array<span class="pclass">Input/Output</span></dt><dd>
<div class="paramtext"><b>Note:</b> the second dimension of the array <a class="arg" href="#C">C</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="#NCC"><m:mi mathcolor="#EE0000" mathvariant="bold">NCC</m:mi></m:maction></m:mfenced></m:mrow></m:math>.</div>
<div class="paramtext"><i>On entry</i>: the <m:math><m:mi>n</m:mi></m:math>&#160;by <m:math><m:mi mathvariant="italic">ncc</m:mi></m:math>&#160;matrix <m:math><m:mi>C</m:mi></m:math>&#160;if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#NCC"><m:mi mathcolor="#EE0000" mathvariant="bold">NCC</m:mi></m:maction><m:mo>&gt;</m:mo><m:mn>0</m:mn></m:math>.</div>
<div class="paramtext"><i>On exit</i>: <a class="arg" href="#C">C</a> is overwritten by the matrix <m:math><m:msup><m:mi>U</m:mi><m:mi mathvariant="normal">H</m:mi></m:msup><m:mi>C</m:mi></m:math>. If <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#NCC"><m:mi mathcolor="#EE0000" mathvariant="bold">NCC</m:mi></m:maction><m:mo>=</m:mo><m:mn>0</m:mn></m:math>, <a class="arg" href="#C">C</a> is not referenced.</div>
</dd><dt class="paramhead"><a name="LDC" id="LDC"/>13: &#8194; LDC &#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="#C">C</a> as declared in the (sub)program from which F08MSF (ZBDSQR) is called.</div><div class="paramtext"><i>Constraints</i>:
   <div class="paramtext"/><ul class="listcons">
<li class="listcons">if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#NCC"><m:mi mathcolor="#EE0000" mathvariant="bold">NCC</m:mi></m:maction><m:mo>&gt;</m:mo><m:mn>0</m:mn></m:math>, <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#LDC"><m:mi mathcolor="#EE0000" mathvariant="bold">LDC</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mrow><m:mi>max</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:mn>1</m:mn><m:mo>,</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction></m:mfenced></m:mrow></m:math>;</li>
<li class="listcons">otherwise <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#LDC"><m:mi mathcolor="#EE0000" mathvariant="bold">LDC</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mn>1</m:mn></m:math>.</li>
</ul></div>
</dd><dt class="paramhead"><a name="WORK" id="WORK"/>14: &#8194; WORK(<m:math><m:mo>*</m:mo></m:math>) &#8211; REAL&#160;(KIND=nag_wp)&#160;array<span class="pclass">Workspace</span></dt><dd>
<div class="paramtext"><b>Note:</b> the dimension of the array <a class="arg" href="#WORK">WORK</a>
must be at least
<m:math><m:mrow><m:mi>max</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:mn>1</m:mn><m:mo>,</m:mo><m:mrow><m:mn>2</m:mn><m:mo>&#215;</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction></m:mrow></m:mfenced></m:mrow></m:math>&#160;if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#NCVT"><m:mi mathcolor="#EE0000" mathvariant="bold">NCVT</m:mi></m:maction><m:mo>=</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#NRU"><m:mi mathcolor="#EE0000" mathvariant="bold">NRU</m:mi></m:maction><m:mo>=</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#NCC"><m:mi mathcolor="#EE0000" mathvariant="bold">NCC</m:mi></m:maction><m:mo>=</m:mo><m:mn>0</m:mn></m:math>, and at least <m:math><m:mrow><m:mi>max</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:mn>1</m:mn><m:mo>,</m:mo><m:mrow><m:mn>4</m:mn><m:mo>&#215;</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction></m:mrow></m:mfenced></m:mrow></m:math>&#160;otherwise.</div>
</dd><dt class="paramhead"><a name="INFO" id="INFO"/>15: &#8194; INFO &#8211; INTEGER<span class="pclass">Output</span></dt><dd><div class="paramtext"><i>On exit</i>: <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#INFO"><m:mi mathcolor="#EE0000" mathvariant="bold">INFO</m:mi></m:maction><m:mo>=</m:mo><m:mn>0</m:mn></m:math>&#160;unless the routine detects an error (see <a class="sec" href="#errors">Section 6</a>).</div></dd></dl><h2 class="standard"><a class="sec" name="errors" id="errors"/>6&#160;&#160;Error Indicators and Warnings</h2>
<div class="paramtext">Errors or warnings detected by the routine:</div>
<dl class="ifail">
<dt class="errorhead"><a name="INlt0" id="INlt0"/><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#INFO"><m:mi mathcolor="#EE0000" mathvariant="bold">INFO</m:mi></m:maction><m:mo>&lt;</m:mo><m:mn>0</m:mn></m:math></dt>
<dd><div class="paramtext">If <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#INFO"><m:mi mathcolor="#EE0000" mathvariant="bold">INFO</m:mi></m:maction><m:mo>=</m:mo><m:mo>-</m:mo><m:mi>i</m:mi></m:math>, argument <m:math><m:mi>i</m:mi></m:math>&#160;had an illegal value. An explanatory message is output, and execution of the program is terminated.</div></dd>
</dl><dl class="ifail">
<dt class="errorhead"><a name="INgt0" id="INgt0"/><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#INFO"><m:mi mathcolor="#EE0000" mathvariant="bold">INFO</m:mi></m:maction><m:mo>&gt;</m:mo><m:mn>0</m:mn></m:math></dt>
<dd><div class="paramtext">The algorithm failed to converge and <a class="arg" href="#INFO">INFO</a> specifies how many off-diagonals did not converge. In this case, <a class="arg" href="#D">D</a> and <a class="arg" href="#E">E</a> contain on exit the diagonal and off-diagonal elements, respectively, of a bidiagonal matrix orthogonally equivalent to <m:math><m:mi>B</m:mi></m:math>.</div></dd>
</dl><h2 class="standard"><a class="sec" name="accuracy" id="accuracy"/>7&#160;&#160;Accuracy</h2>
<div class="paramtext">Each singular value and singular vector is computed to high relative accuracy.  However, the reduction to bidiagonal form (prior to calling the routine) may exclude the possibility of obtaining high relative accuracy in the small singular values of the original matrix if its singular values vary widely in magnitude.</div><div class="paramtext">If <m:math><m:msub><m:mi>&#963;</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;is an exact singular value of <m:math><m:mi>B</m:mi></m:math>&#160;and <m:math><m:msub><m:mover><m:mi>&#963;</m:mi><m:mo>~</m:mo></m:mover><m:mi>i</m:mi></m:msub></m:math>&#160;is the corresponding computed value, then

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mfenced open="|" close="|" separators="">
  <m:msub><m:mover><m:mi>&#963;</m:mi><m:mo>~</m:mo></m:mover><m:mi>i</m:mi></m:msub>
  <m:mo>-</m:mo>
  <m:msub><m:mi>&#963;</m:mi><m:mi>i</m:mi></m:msub>
 </m:mfenced>
 <m:mo>&#8804;</m:mo>
 <m:mi>p</m:mi>
 <m:mfenced separators=""><m:mi>m</m:mi><m:mo>,</m:mo><m:mi>n</m:mi></m:mfenced>
 <m:mi>&#949;</m:mi>
 <m:msub><m:mi>&#963;</m:mi><m:mi>i</m:mi></m:msub>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:mi>p</m:mi><m:mfenced separators=""><m:mi>m</m:mi><m:mo>,</m:mo><m:mi>n</m:mi></m:mfenced></m:math>&#160;is a modestly increasing function of <m:math><m:mi>m</m:mi></m:math>&#160;and <m:math><m:mi>n</m:mi></m:math>, and <m:math><m:mi>&#949;</m:mi></m:math>&#160;is the <span class="bitalic">machine precision</span>.  If only singular values are computed, they are computed more accurately (i.e., the function <m:math><m:mi>p</m:mi><m:mfenced separators=""><m:mi>m</m:mi><m:mo>,</m:mo><m:mi>n</m:mi></m:mfenced></m:math>&#160;is smaller), than when some singular vectors are also computed.</div><div class="paramtext">If <m:math><m:msub><m:mi>u</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;is an exact left singular vector of <m:math><m:mi>B</m:mi></m:math>, and <m:math><m:msub><m:mover><m:mi>u</m:mi><m:mo>~</m:mo></m:mover><m:mi>i</m:mi></m:msub></m:math>&#160;is the corresponding computed left singular vector, then the angle <m:math><m:mi>&#952;</m:mi><m:mfenced separators=""><m:msub><m:mover><m:mi>u</m:mi><m:mo>~</m:mo></m:mover><m:mi>i</m:mi></m:msub><m:mo>,</m:mo><m:msub><m:mi>u</m:mi><m:mi>i</m:mi></m:msub></m:mfenced></m:math>&#160;between them is bounded as follows:

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>&#952;</m:mi>
 <m:mfenced separators=""><m:msub><m:mover><m:mi>u</m:mi><m:mo>~</m:mo></m:mover><m:mi>i</m:mi></m:msub><m:mo>,</m:mo><m:msub><m:mi>u</m:mi><m:mi>i</m:mi></m:msub></m:mfenced>
 <m:mo>&#8804;</m:mo>
 <m:mfrac>
  <m:mrow>
   <m:mi>p</m:mi>
   <m:mfenced separators=""><m:mi>m</m:mi><m:mo>,</m:mo><m:mi>n</m:mi></m:mfenced>
   <m:mi>&#949;</m:mi>
  </m:mrow>
  <m:msub><m:mi mathvariant="italic">relgap</m:mi><m:mi>i</m:mi></m:msub>
 </m:mfrac>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:msub><m:mi mathvariant="italic">relgap</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;is the relative gap between <m:math><m:msub><m:mi>&#963;</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;and the other singular values, defined by

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:msub><m:mi mathvariant="italic">relgap</m:mi><m:mi>i</m:mi></m:msub>
 <m:mo>=</m:mo>
 <m:munder>
  <m:mi mathvariant="normal">min</m:mi>
  <m:mrow><m:mi>i</m:mi><m:mo>&#8800;</m:mo><m:mi>j</m:mi></m:mrow>
 </m:munder><m:mspace width="0.25em"/>
 <m:mfrac>
  <m:mfenced open="|" close="|" separators="">
    <m:msub><m:mi>&#963;</m:mi><m:mi>i</m:mi></m:msub>
    <m:mo>-</m:mo>
    <m:msub><m:mi>&#963;</m:mi><m:mi>j</m:mi></m:msub>
   </m:mfenced>
  <m:mfenced separators="">
   <m:msub><m:mi>&#963;</m:mi><m:mi>i</m:mi></m:msub>
   <m:mo>+</m:mo>
   <m:msub><m:mi>&#963;</m:mi><m:mi>j</m:mi></m:msub>
  </m:mfenced>
 </m:mfrac>
 <m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

A similar error bound holds for the right singular vectors.</div><h2 class="standard"><a class="sec" name="fcomments" id="fcomments"/>8&#160;&#160;Further Comments</h2>
<div class="paramtext">The total number of real floating point operations is roughly proportional to <m:math><m:msup><m:mi>n</m:mi><m:mn>2</m:mn></m:msup></m:math>&#160;if only the singular values are computed.  About <m:math><m:mn>12</m:mn><m:msup><m:mi>n</m:mi><m:mn>2</m:mn></m:msup><m:mo>&#215;</m:mo><m:mi mathvariant="italic">nru</m:mi></m:math>&#160;additional operations are required to compute the left singular vectors and about <m:math><m:mn>12</m:mn><m:msup><m:mi>n</m:mi><m:mn>2</m:mn></m:msup><m:mo>&#215;</m:mo><m:mi mathvariant="italic">ncvt</m:mi></m:math>&#160;to compute the right singular vectors.  The operations to compute the singular values must all be performed in scalar mode; the additional operations to compute the singular vectors can be vectorized and on some machines may be performed much faster.</div><div class="paramtext">The real analogue of this routine is <a class="rout" href="../F08/f08mef.xml">F08MEF (DBDSQR)</a>.</div><h2 class="standard"><a class="sec" name="example" id="example"/>9&#160;&#160;Example</h2>
<div class="paramtext">See <a class="sec" href="../F08/f08ktf.xml#example">Section 9</a> in F08KTF (ZUNGBR), which illustrates the use of the routine to compute the singular value decomposition of a general matrix.</div>
<hr/><div><a class="rout" href="../../pdf/F08/f08msf.pdf">F08MSF (ZBDSQR) (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>