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


SYNOPSIS

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

           INTEGER        INFO, LDA, M, N

           DOUBLE         PRECISION  A( LDA, * ), D( * ), E( * ),
                          TAUP( * ), TAUQ( * ), WORK( * )


PURPOSE

       DGEBD2 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) DOUBLE PRECISION 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) DOUBLE PRECISION array, dimension
               (min(M,N))
               The  diagonal elements of the bidiagonal matrix B:
               D(i) = A(i,i).

               (min(M,N)-1)
               The off-diagonal elements of the bidiagonal matrix
               B: if m >= n, E(i) = A(i,i+1) for i = 1,2,...,n-1;
               if m < n, E(i) = A(i+1,i) for i = 1,2,...,m-1.

       TAUQ    (output) DOUBLE PRECISION array dimension
               (min(M,N))
               The scalar factors of  the  elementary  reflectors
               which  represent the orthogonal matrix Q. See Fur­
               ther Details.  TAUP    (output)  DOUBLE  PRECISION
               array,  dimension (min(M,N)) The scalar factors of
               the  elementary  reflectors  which  represent  the
               orthogonal  matrix  P.  See Further Details.  WORK
               (workspace)  DOUBLE  PRECISION  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)


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

       m = 6 and n = 5 (m > n):          m = 5 and n = 6 (m < n):

         (   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