SGEBD2 - reduce a real general m by n matrix A to upper or
       lower bidiagonal form B by an orthogonal transformation


SYNOPSIS

       SUBROUTINE SGEBD2( M, N, A, LDA, D, E, TAUQ,  TAUP,  WORK,
                          INFO )

           INTEGER        INFO, LDA, M, N

           REAL           A( LDA, * ), D( * ), E( * ), TAUP( * ),
                          TAUQ( * ), WORK( * )


PURPOSE

       SGEBD2 reduces a real general m by n matrix A to upper  or
       lower  bidiagonal  form B by an orthogonal transformation:
       Q' * A * P = B.  If m >= n, B is upper bidiagonal; if m  <
       n, B is lower bidiagonal.


ARGUMENTS

       M       (input) INTEGER
               The number of rows in the matrix A.  M >= 0.

       N       (input) INTEGER
               The number of columns in the matrix A.  N >= 0.

       A       (input/output) REAL array, dimension (LDA,N)
               On entry, the m by n general matrix to be reduced.
               On exit, if m >= n, the  diagonal  and  the  first
               superdiagonal are overwritten with the upper bidi­
               agonal matrix B; the elements below the  diagonal,
               with  the  array  TAUQ,  represent  the orthogonal
               matrix Q as a product  of  elementary  reflectors,
               and  the  elements  above the first superdiagonal,
               with the  array  TAUP,  represent  the  orthogonal
               matrix P as a product of elementary reflectors; if
               m < n, the diagonal and the first subdiagonal  are
               overwritten  with  the  lower bidiagonal matrix B;
               the elements below the first subdiagonal, with the
               array TAUQ, represent the orthogonal matrix Q as a
               product of elementary reflectors, and the elements
               above the diagonal, with the array TAUP, represent
               the orthogonal matrix P as a product of elementary
               reflectors.  See Further Details.  LDA     (input)
               INTEGER The leading dimension of the array A.  LDA
               >= max(1,M).

       D       (output) REAL array, dimension (min(M,N))
               The  diagonal elements of the bidiagonal matrix B:
               D(i) = A(i,i).

       E       (output) REAL array, dimension (min(M,N)-1)
               The off-diagonal elements of the bidiagonal matrix

               if m < n, E(i) = A(i+1,i) for i = 1,2,...,m-1.

       TAUQ    (output) REAL array dimension (min(M,N))
               The scalar factors of  the  elementary  reflectors
               which  represent the orthogonal matrix Q. See Fur­
               ther Details.  TAUP    (output) REAL array, dimen­
               sion  (min(M,N)) The scalar factors of the elemen­
               tary reflectors  which  represent  the  orthogonal
               matrix    P.    See    Further    Details.    WORK
               (workspace) REAL array, dimension (max(M,N))

       INFO    (output) INTEGER
               = 0: successful exit.
               < 0: if INFO = -i, the i-th argument had an  ille­
               gal value.


FURTHER DETAILS

       The  matrices  Q and P are represented as products of ele­
       mentary reflectors:

       If m >= n,

          Q = H(1) H(2) . . . H(n)  and  P =  G(1)  G(2)  .  .  .
       G(n-1)

       Each H(i) and G(i) has the form:

          H(i) = I - tauq * v * v'  and G(i) = I - taup * u * u'

       where tauq and taup are real scalars, and v and u are real
       vectors; v(1:i-1) = 0, v(i) = 1, and v(i+1:m) is stored on
       exit  in  A(i+1:m,i); u(1:i) = 0, u(i+1) = 1, and u(i+2:n)
       is stored on exit in A(i,i+2:n); tauq is stored in TAUQ(i)
       and taup in TAUP(i).

       If m < n,

          Q  =  H(1)  H(2) . . . H(m-1)  and  P = G(1) G(2) . . .
       G(m)

       Each H(i) and G(i) has the form:

          H(i) = I - tauq * v * v'  and G(i) = I - taup * u * u'

       where tauq and taup are real scalars, and v and u are real
       vectors; v(1:i) = 0, v(i+1) = 1, and v(i+2:m) is stored on
       exit in A(i+2:m,i); u(1:i-1) = 0, u(i) = 1,  and  u(i+1:n)
       is stored on exit in A(i,i+1:n); tauq is stored in TAUQ(i)
       and taup in TAUP(i).

       The contents of A on exit are illustrated by the following
       examples:


         (  d   e   u1  u1  u1 )           (  d   u1  u1  u1   u1
       u1 )
         (   v1  d   e   u2  u2 )           (  e   d   u2  u2  u2
       u2 )
         (  v1  v2  d   e   u3 )           (  v1  e   d   u3   u3
       u3 )
         (   v1  v2  v3  d   e  )           (  v1  v2  e   d   u4
       u4 )
         (  v1  v2  v3  v4  d  )           (  v1  v2  v3   e    d
       u5 )
         (  v1  v2  v3  v4  v5 )

       where d and e denote diagonal and off-diagonal elements of
       B, vi denotes an element of the vector defining H(i),  and
       ui an element of the vector defining G(i).


Man(1) output converted with man2html