SLABRD  -  reduce  the first NB rows and columns of a real
       general m by n matrix A to upper or lower bidiagonal  form
       by  an  orthogonal  transformation Q' * A * P, and returns
       the matrices X and Y which are needed to apply the  trans­
       formation to the unreduced part of A


SYNOPSIS

       SUBROUTINE SLABRD( M,  N, NB, A, LDA, D, E, TAUQ, TAUP, X,
                          LDX, Y, LDY )

           INTEGER        LDA, LDX, LDY, M, N, NB

           REAL           A( LDA, * ), D( * ), E( * ), TAUP( * ),
                          TAUQ( * ), X( LDX, * ), Y( LDY, * )


PURPOSE

       SLABRD  reduces  the  first  NB rows and columns of a real
       general m by n matrix A to upper or lower bidiagonal  form
       by  an  orthogonal  transformation Q' * A * P, and returns
       the matrices X and Y which are needed to apply the  trans­
       formation  to  the  unreduced  part of A.  If m >= n, A is
       reduced to upper bidiagonal form; if m < n, to lower bidi­
       agonal form.

       This is an auxiliary routine called by SGEBRD


ARGUMENTS

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

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

       NB      (input) INTEGER
               The  number of leading rows and columns of A to be
               reduced.

       A       (input/output) REAL array, dimension (LDA,N)
               On entry, the m by n general matrix to be reduced.
               On  exit,  the  first  NB  rows and columns of the
               matrix are overwritten; the rest of the  array  is
               unchanged.   If  m >= n, elements on and below the
               diagonal in the first NB columns, with  the  array
               TAUQ, represent the orthogonal matrix Q as a prod­
               uct of elementary reflectors; and  elements  above
               the  diagonal in the first NB rows, with the array
               TAUP, represent the orthogonal matrix P as a prod­
               uct  of elementary reflectors.  If m < n, elements
               below the diagonal in the first NB  columns,  with
               the  array TAUQ, represent the orthogonal matrix Q
               as a product of elementary  reflectors,  and  ele­
               ments  on  and  above the diagonal in the first NB

               nal  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 (NB)
               The diagonal elements of the  first  NB  rows  and
               columns of the reduced matrix.  D(i) = A(i,i).

       E       (output) REAL array, dimension (NB)
               The off-diagonal elements of the first NB rows and
               columns of the reduced matrix.

       TAUQ    (output) REAL array dimension (NB)
               The scalar factors of  the  elementary  reflectors
               which  represent the orthogonal matrix Q. See Fur­
               ther Details.  TAUP    (output) REAL array, dimen­
               sion  (NB)  The  scalar  factors of the elementary
               reflectors which represent the  orthogonal  matrix
               P.  See  Further  Details.   X       (output) REAL
               array, dimension (LDX,NB)  The  m-by-nb  matrix  X
               required to update the unreduced part of A.

       LDX     (input) INTEGER
               The leading dimension of the array X. LDX >= M.

       Y       (output) REAL array, dimension (LDY,NB)
               The  n-by-nb matrix Y required to update the unre­
               duced part of A.

       LDY     (output) INTEGER
               The leading dimension of the array Y. LDY >= N.


FURTHER DETAILS

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

          Q  =  H(1)  H(2)  . . . H(nb)  and  P = G(1) G(2) . . .
       G(nb)

       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.

       If m >= n, v(1:i-1) = 0, v(i) = 1, and v(i:m) is stored on
       exit in A(i:m,i); u(1:i) = 0, u(i+1) = 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).

       If m < n, v(1:i) = 0, v(i+1) = 1, and v(i+1:m)  is  stored

       is stored on exit in A(i,i+1:n); tauq is stored in TAUQ(i)
       and taup in TAUP(i).

       The  elements  of the vectors v and u together form the m-
       by-nb matrix V and the nb-by-n matrix U' which are needed,
       with X and Y, to apply the transformation to the unreduced
       part of the matrix, using a block update of the  form:   A
       := A - V*Y' - X*U'.

       The contents of A on exit are illustrated by the following
       examples with nb = 2:

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

         (   1   1   u1  u1  u1 )           (  1   u1  u1  u1  u1
       u1 )
         (  v1  1   1   u2  u2 )           (  1   1   u2  u2   u2
       u2 )
         (   v1   v2  a   a   a  )           (  v1  1   a   a   a
       a  )
         (  v1  v2  a   a   a  )           (  v1  v2  a    a    a
       a  )
         (   v1   v2  a   a   a  )           (  v1  v2  a   a   a
       a  )
         (  v1  v2  a   a   a  )

       where a denotes an element of the original matrix which is
       unchanged,  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