CLALSD - 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 CLALSD( UPLO, SMLSIZ, N, NRHS, D, E, B, LDB,
RCOND, RANK, WORK, RWORK, IWORK, INFO )
CHARACTER UPLO
INTEGER INFO, LDB, N, NRHS, RANK, SMLSIZ
REAL RCOND
INTEGER IWORK( * )
REAL D( * ), E( * ), RWORK( * )
COMPLEX B( LDB, * ), WORK( * )
PURPOSE
CLALSD 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.
The number of columns of B. NRHS must be at least
1.
D (input/output) REAL 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) REAL array, dimension (N-1)
Contains the super-diagonal entries of the bidiago
nal matrix. On exit, E has been destroyed.
B (input/output) COMPLEX 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) COMPLEX array, dimension at least
(N * NRHS).
RWORK (workspace) REAL array, dimension at least
(9*N + 2*N*SMLSIZ + 8*N*NLVL + 3*SMLSIZ*NRHS +
(SMLSIZ+1)**2), where NLVL = MAX( 0, INT( LOG_2(
MIN( M,N )/(SMLSIZ+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
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
California at Berkeley, USA
Osni Marques, LBNL/NERSC, USA
Man(1) output converted with
man2html