SLASDQ - compute the singular value decomposition (SVD) of
       a real (upper or lower) bidiagonal matrix with diagonal  D
       and  offdiagonal  E,  accumulating  the transformations if
       desired


SYNOPSIS

       SUBROUTINE SLASDQ( UPLO, SQRE, N, NCVT, NRU,  NCC,  D,  E,
                          VT, LDVT, U, LDU, C, LDC, WORK, INFO )

           CHARACTER      UPLO

           INTEGER        INFO,  LDC,  LDU,  LDVT,  N, NCC, NCVT,
                          NRU, SQRE

           REAL           C( LDC, * ), D( * ), E( * ), U( LDU,  *
                          ), VT( LDVT, * ), WORK( * )


PURPOSE

       SLASDQ  computes the singular value decomposition (SVD) of
       a real (upper or lower) bidiagonal matrix with diagonal  D
       and  offdiagonal  E,  accumulating  the transformations if
       desired. Letting B denote the input bidiagonal matrix, the
       algorithm computes orthogonal matrices Q and P such that B
       = Q * S * P' (P' denotes the transpose of P). The singular
       values S are overwritten on D.

       The input matrix U  is changed to U  * Q  if desired.
       The input matrix VT is changed to P' * VT if desired.
       The input matrix C  is changed to Q' * C  if desired.

       See "Computing  Small Singular Values of Bidiagonal Matri­
       ces With Guaranteed High Relative Accuracy," by J.  Demmel
       and  W.  Kahan,  LAPACK  Working  Note  #3, for a detailed
       description of the algorithm.


ARGUMENTS

       UPLO  (input) CHARACTER*1
             On entry, UPLO specifies whether the input  bidiago­
             nal  matrix is upper or lower bidiagonal, and wether
             it is square are not.  UPLO =  'U'  or  'u'    B  is
             upper  bidiagonal.   UPLO  = 'L' or 'l'   B is lower
             bidiagonal.

       SQRE  (input) INTEGER
             = 0: then the input matrix is N-by-N.
             = 1: then the input matrix is N-by-(N+1) if  UPLU  =
             'U' and (N+1)-by-N if UPLU = 'L'.

             The bidiagonal matrix has N = NL + NR + 1 rows and M
             = N + SQRE >= N columns.

             On entry, N specifies the number of rows and columns
             in the matrix. N must be at least 0.

       NCVT  (input) INTEGER
             On  entry,  NCVT  specifies the number of columns of
             the matrix VT. NCVT must be at least 0.

       NRU   (input) INTEGER
             On entry, NRU specifies the number of  rows  of  the
             matrix U. NRU must be at least 0.

       NCC   (input) INTEGER
             On entry, NCC specifies the number of columns of the
             matrix C. NCC must be at least 0.

       D     (input/output) REAL array, dimension (N)
             On entry, D contains the  diagonal  entries  of  the
             bidiagonal  matrix  whose  SVD is desired. On normal
             exit, D contains the singular  values  in  ascending
             order.

       E     (input/output) REAL array.
             dimension  is  (N-1)  if SQRE = 0 and N if SQRE = 1.
             On entry, the entries of E contain  the  offdiagonal
             entries  of  the  bidiagonal  matrix  whose  SVD  is
             desired. On normal exit, E will contain  0.  If  the
             algorithm  does  not  converge, D and E will contain
             the diagonal and superdiagonal entries of a bidiago­
             nal  matrix orthogonally equivalent to the one given
             as input.

       VT    (input/output) REAL array, dimension (LDVT, NCVT)
             On entry, contains a matrix which on exit  has  been
             premultiplied by P', dimension N-by-NCVT if SQRE = 0
             and (N+1)-by-NCVT if SQRE =  1  (not  referenced  if
             NCVT=0).

       LDVT  (input) INTEGER
             On entry, LDVT specifies the leading dimension of VT
             as declared in the calling (sub) program. LDVT  must
             be  at least 1. If NCVT is nonzero LDVT must also be
             at least N.

       U     (input/output) REAL array, dimension (LDU, N)
             On entry, contains a  matrix which on exit has  been
             postmultiplied  by Q, dimension NRU-by-N if SQRE = 0
             and NRU-by-(N+1) if SQRE  =  1  (not  referenced  if
             NRU=0).

       LDU   (input) INTEGER
             On  entry, LDU  specifies the leading dimension of U
             as declared in the calling (sub) program.  LDU  must
             be at least max( 1, NRU ) .

             On  entry, contains an N-by-NCC matrix which on exit
             has been premultiplied by Q'  dimension N-by-NCC  if
             SQRE  =  0  and (N+1)-by-NCC if SQRE = 1 (not refer­
             enced if NCC=0).

       LDC   (input) INTEGER
             On entry, LDC  specifies the leading dimension of  C
             as  declared  in the calling (sub) program. LDC must
             be at least 1. If NCC is nonzero, LDC must  also  be
             at least N.

       WORK  (workspace) REAL array, dimension (4*N)
             Workspace.  Only  referenced if one of NCVT, NRU, or
             NCC is nonzero, and if N is at least 2.

       INFO  (output) INTEGER
             On exit, a value of 0 indicates a  successful  exit.
             If  INFO  < 0, argument number -INFO is illegal.  If
             INFO > 0, the algorithm did not converge,  and  INFO
             specifies  how many superdiagonals did not converge.


FURTHER DETAILS

       Based on contributions by
          Ming Gu and Huan Ren, Computer Science  Division,  Uni­
       versity of
          California at Berkeley, USA


Man(1) output converted with man2html