sbdsqr(3)
NAME
- SBDSQR - compute the singular value decomposition (SVD) of
- a real N-by-N (upper or lower) bidiagonal matrix B
SYNOPSIS
SUBROUTINE SBDSQR( UPLO, 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
REAL C( LDC, * ), D( * ), E( * ), U( LDU, *
), VT( LDVT, * ), WORK( * )
PURPOSE
- SBDSQR computes the singular value decomposition (SVD) of
- a real N-by-N (upper or lower) bidiagonal matrix B: B = Q * S *
- P' (P' denotes the transpose of P), where S is a diagonal matrix
- with non-negative diagonal elements (the singular values of B),
- and Q and P are orthogonal matrices.
- The routine computes S, and optionally computes U * Q, P'
- * VT, or Q' * C, for given real input matrices U, VT, and C.
- See "Computing Small Singular Values of Bidiagonal Matri
- ces With Guaranteed High Relative Accuracy," by J. Demmel and W.
- Kahan, LAPACK Working Note #3 (or SIAM J. Sci. Statist. Comput.
- vol. 11, no. 5, pp. 873-912, Sept 1990) and
"Accurate singular values and differential qd algorithms,"
- by B. Parlett and V. Fernando, Technical Report CPAM-554, Mathe
- matics Department, University of California at Berkeley, July
- 1992 for a detailed description of the algorithm.
ARGUMENTS
- UPLO (input) CHARACTER*1
- = 'U': B is upper bidiagonal;
= 'L': B is lower bidiagonal.
- N (input) INTEGER
- The order of the matrix B. N >= 0.
- NCVT (input) INTEGER
- The number of columns of the matrix VT. NCVT >= 0.
- NRU (input) INTEGER
- The number of rows of the matrix U. NRU >= 0.
- NCC (input) INTEGER
- The number of columns of the matrix C. NCC >= 0.
- D (input/output) REAL array, dimension (N)
- On entry, the n diagonal elements of the bidiago
- nal matrix B. On exit, if INFO=0, the singular values of B in
- decreasing order.
- E (input/output) REAL array, dimension (N)
- On entry, the elements of E contain the offdiago
- nal elements of the bidiagonal matrix whose SVD is desired. On
- normal exit (INFO = 0), E is destroyed. If the algorithm does
- not converge (INFO > 0), D and E will contain the diagonal and
- superdiagonal elements of a bidiagonal matrix orthogonally equiv
- alent to the one given as input. E(N) is used for workspace.
- VT (input/output) REAL array, dimension (LDVT, NCVT)
- On entry, an N-by-NCVT matrix VT. On exit, VT is
- overwritten by P' * VT. VT is not referenced if NCVT = 0.
- LDVT (input) INTEGER
- The leading dimension of the array VT. LDVT >=
- max(1,N) if NCVT > 0; LDVT >= 1 if NCVT = 0.
- U (input/output) REAL array, dimension (LDU, N)
- On entry, an NRU-by-N matrix U. On exit, U is
- overwritten by U * Q. U is not referenced if NRU = 0.
- LDU (input) INTEGER
- The leading dimension of the array U. LDU >=
- max(1,NRU).
- C (input/output) REAL array, dimension (LDC, NCC)
- On entry, an N-by-NCC matrix C. On exit, C is
- overwritten by Q' * C. C is not referenced if NCC = 0.
- LDC (input) INTEGER
- The leading dimension of the array C. LDC >=
- max(1,N) if NCC > 0; LDC >=1 if NCC = 0.
- WORK (workspace) REAL array, dimension (4*N)
- INFO (output) INTEGER
- = 0: successful exit
< 0: If INFO = -i, the i-th argument had an ille
- gal value
> 0: the algorithm did not converge; D and E con
- tain the elements of a bidiagonal matrix which is orthogonally
- similar to the input matrix B; if INFO = i, i elements of E have
- not converged to zero.
PARAMETERS
- TOLMUL REAL, default = max(10,min(100,EPS**(-1/8)))
- TOLMUL controls the convergence criterion of the
- QR loop. If it is positive, TOLMUL*EPS is the desired relative
- precision in the computed singular values. If it is negative,
- abs(TOLMUL*EPS*sigma_max) is the desired absolute accuracy in the
- computed singular values (corresponds to relative accuracy
- abs(TOLMUL*EPS) in the largest singular value. abs(TOLMUL)
- should be between 1 and 1/EPS, and preferably between 10 (for
- fast convergence) and .1/EPS (for there to be some accuracy in
- the results). Default is to lose at either one eighth or 2 of
- the available decimal digits in each computed singular value
- (whichever is smaller).
- MAXITR INTEGER, default = 6
- MAXITR controls the maximum number of passes of
- the algorithm through its inner loop. The algorithms stops (and
- so fails to converge) if the number of passes through the inner
- loop exceeds MAXITR*N**2.
- LAPACK version 3.0 15 June 2000