DLALSD  -  use  the  singular  value decomposition of A to
       solve the least squares problem of finding X  to  minimize
       the  Euclidean norm of each column of A*X-B, where A is N-
       by-N upper bidiagonal, and X and B are N-by-NRHS


SYNOPSIS

       SUBROUTINE DLALSD( UPLO, SMLSIZ, N, NRHS, D,  E,  B,  LDB,
                          RCOND, RANK, WORK, IWORK, INFO )

           CHARACTER      UPLO

           INTEGER        INFO, LDB, N, NRHS, RANK, SMLSIZ

           DOUBLE         PRECISION RCOND

           INTEGER        IWORK( * )

           DOUBLE         PRECISION  B( LDB, * ), D( * ), E( * ),
                          WORK( * )


PURPOSE

       DLALSD uses the singular value decomposition of A to solve
       the  least  squares  problem  of finding X to minimize the
       Euclidean norm of each column of A*X-B, where A is  N-by-N
       upper  bidiagonal, and X and B are N-by-NRHS. The solution
       X overwrites B.  The singular values  of  A  smaller  than
       RCOND times the largest singular value are treated as zero
       in solving the least squares problem; in this case a mini­
       mum norm solution is returned.  The actual singular values
       are returned in D in ascending order.

       This code makes very mild assumptions about floating point
       arithmetic. It will work on machines with a guard digit in
       add/subtract, or on those binary  machines  without  guard
       digits  which subtract like the Cray XMP, Cray YMP, Cray C
       90, or Cray 2.  It could conceivably fail  on  hexadecimal
       or  decimal  machines without guard digits, but we know of
       none.


ARGUMENTS

       UPLO   (input) CHARACTER*1
              = 'U': D and E define an upper bidiagonal matrix.
              = 'L': D and E define a  lower bidiagonal matrix.

              SMLSIZ (input) INTEGER The maximum size of the sub­
              problems at the bottom of the computation tree.

       N      (input) INTEGER
              The dimension of the  bidiagonal matrix.  N >= 0.

       NRHS   (input) INTEGER
              The  number  of columns of B. NRHS must be at least


       D      (input/output) DOUBLE PRECISION array, dimension
              (N)
              On  entry D contains the main diagonal of the bidi­
              agonal matrix. On exit, if INFO = 0, D contains its
              singular values.

       E      (input) DOUBLE PRECISION array, dimension (N-1)
              Contains the super-diagonal entries of the bidiago­
              nal matrix.  On exit, E has been destroyed.

       B        (input/output)   DOUBLE   PRECISION   array,
              dimension (LDB,NRHS)
              On input, B contains the right hand  sides  of  the
              least  squares  problem.  On output, B contains the
              solution X.

       LDB    (input) INTEGER
              The leading dimension of B in the  calling  subpro­
              gram.  LDB must be at least max(1,N).

       RCOND  (input) DOUBLE PRECISION
              The  singular  values  of  A  less than or equal to
              RCOND times the largest singular value are  treated
              as  zero  in  solving the least squares problem. If
              RCOND  is  negative,  machine  precision  is   used
              instead.   For  example,  if  diag(S)*X=B  were the
              least squares problem, where diag(S) is a  diagonal
              matrix  of  singular  values, the solution would be
              X(i)  =  B(i)  /  S(i)  if  S(i)  is  greater  than
              RCOND*max(S),  and X(i) = 0 if S(i) is less than or
              equal to RCOND*max(S).

       RANK   (output) INTEGER
              The number of singular values  of  A  greater  than
              RCOND times the largest singular value.

       WORK   (workspace) DOUBLE PRECISION array, dimension at
              least
              (9*N + 2*N*SMLSIZ  +  8*N*NLVL  +  N*NRHS  +  (SML­
              SIZ+1)**2),  where NLVL = max(0, INT(log_2 (N/(SML­
              SIZ+1))) + 1).

       IWORK  (workspace) INTEGER array, dimension at least
              (3*N*NLVL + 11*N)

       INFO   (output) INTEGER
              = 0:  successful exit.
              < 0:  if INFO = -i, the i-th argument had an  ille­
              gal value.
              >  0:   The algorithm failed to compute an singular
              value while working on the submatrix lying in  rows
              and columns INFO/(N+1) through MOD(INFO,N+1).

       Based on contributions by
          Ming  Gu  and  Ren-Cang  Li, Computer Science Division,
       University of
            California at Berkeley, USA
          Osni Marques, LBNL/NERSC, USA


Man(1) output converted with man2html