SLALSD  -  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 SLALSD( UPLO, SMLSIZ, N, NRHS, D,  E,  B,  LDB,
                          RCOND, RANK, WORK, IWORK, INFO )

           CHARACTER      UPLO

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

           REAL           RCOND

           INTEGER        IWORK( * )

           REAL           B( LDB, * ), D( * ), E( * ), WORK( * )


PURPOSE

       SLALSD 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
              1.

              On  entry D contains the main diagonal of the bidi­
              agonal matrix. On exit, if INFO = 0, D contains its
              singular values.

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

       B      (input/output) REAL 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) REAL
              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) REAL 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).


FURTHER DETAILS

       Based on contributions by
          Ming Gu and Ren-Cang  Li,  Computer  Science  Division,
       University of

          Osni Marques, LBNL/NERSC, USA


Man(1) output converted with man2html