sbdsqr - compute the singular value decomposition (SVD) of a real N-by-N (upper or lower) bidiagonal matrix B.
SUBROUTINE SBDSQR( UPLO, N, NCVT, NRU, NCC, D, E, VT, LDVT, U, LDU, * C, LDC, WORK, INFO) CHARACTER * 1 UPLO INTEGER N, NCVT, NRU, NCC, LDVT, LDU, LDC, INFO REAL D(*), E(*), VT(LDVT,*), U(LDU,*), C(LDC,*), WORK(*)
SUBROUTINE SBDSQR_64( UPLO, N, NCVT, NRU, NCC, D, E, VT, LDVT, U, * LDU, C, LDC, WORK, INFO) CHARACTER * 1 UPLO INTEGER*8 N, NCVT, NRU, NCC, LDVT, LDU, LDC, INFO REAL D(*), E(*), VT(LDVT,*), U(LDU,*), C(LDC,*), WORK(*)
SUBROUTINE BDSQR( UPLO, [N], [NCVT], [NRU], [NCC], D, E, VT, [LDVT], * U, [LDU], C, [LDC], [WORK], [INFO]) CHARACTER(LEN=1) :: UPLO INTEGER :: N, NCVT, NRU, NCC, LDVT, LDU, LDC, INFO REAL, DIMENSION(:) :: D, E, WORK REAL, DIMENSION(:,:) :: VT, U, C
SUBROUTINE BDSQR_64( UPLO, [N], [NCVT], [NRU], [NCC], D, E, VT, * [LDVT], U, [LDU], C, [LDC], [WORK], [INFO]) CHARACTER(LEN=1) :: UPLO INTEGER(8) :: N, NCVT, NRU, NCC, LDVT, LDU, LDC, INFO REAL, DIMENSION(:) :: D, E, WORK REAL, DIMENSION(:,:) :: VT, U, C
#include <sunperf.h>
void sbdsqr(char uplo, int n, int ncvt, int nru, int ncc, float *d, float *e, float *vt, int ldvt, float *u, int ldu, float *c, int ldc, int *info);
void sbdsqr_64(char uplo, long n, long ncvt, long nru, long ncc, float *d, float *e, float *vt, long ldvt, float *u, long ldu, float *c, long ldc, long *info);
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 Matrices 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, Mathematics Department, University of California at Berkeley, July 1992 for a detailed description of the algorithm.
= 'U': B is upper bidiagonal;
= 'L': B is lower bidiagonal.
E(N)
is used for workspace.
max(1,N)
if NCVT > 0; LDVT > = 1 if NCVT = 0.
max(1,N)
if NCC > 0; LDC > =1 if NCC = 0.
dimension(4*N)
= 0: successful exit
< 0: If INFO = -i, the i-th argument had an illegal value
> 0: the algorithm did not converge; D and E contain 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.