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


SYNOPSIS

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

           INTEGER        INFO, LDA, M, N

           REAL           D( * ), E( * )

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


PURPOSE

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

               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 array dimension (min(M,N))
               The  scalar  factors  of the elementary reflectors
               which represent the unitary matrix Q. See  Further
               Details.   TAUP     (output) COMPLEX array, dimen­
               sion (min(M,N)) The scalar factors of the  elemen­
               tary reflectors which represent the unitary matrix
               P. See Further Details.  WORK    (workspace)  COM­
               PLEX 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
       in TAUQ(i) and taup in TAUP(i).

       The contents of A on exit are illustrated by the following


       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