ZGEBD2 - reduce a complex general m by n matrix A to upper
       or lower real bidiagonal form B by a  unitary  transforma­
       tion


SYNOPSIS

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

           INTEGER        INFO, LDA, M, N

           DOUBLE         PRECISION D( * ), E( * )

           COMPLEX*16     A( LDA, * ), TAUP(  *  ),  TAUQ(  *  ),
                          WORK( * )


PURPOSE

       ZGEBD2  reduces a complex general m by n matrix A to upper
       or lower real bidiagonal form B by a  unitary  transforma­
       tion:  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) COMPLEX*16 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 unitary matrix
               Q as a product of elementary reflectors,  and  the
               elements  above  the first superdiagonal, with the
               array TAUP, represent the unitary 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  unitary  matrix  Q as a product of
               elementary reflectors, and the elements above  the
               diagonal,  with the array TAUP, represent the uni­
               tary matrix P as a product of  elementary  reflec­
               tors.  See Further Details.  LDA     (input) INTE­
               GER 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:


       E       (output) DOUBLE PRECISION array, dimension
               (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) COMPLEX*16 array dimension (min(M,N))
               The scalar factors of  the  elementary  reflectors
               which  represent the unitary matrix Q. See Further
               Details.   TAUP     (output)   COMPLEX*16   array,
               dimension  (min(M,N))  The  scalar  factors of the
               elementary reflectors which represent the  unitary
               matrix    P.    See    Further    Details.    WORK
               (workspace) COMPLEX*16 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 complex scalars, and v and  u  are
       complex  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 complex scalars, v and u are com­
       plex 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


       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