SUBROUTINE ZBDSQR( UPLO, N, NCVT, NRU, NCC, D, E, VT, LDVT, U, LDU, * C, LDC, WORK, INFO) CHARACTER * 1 UPLO DOUBLE COMPLEX VT(LDVT,*), U(LDU,*), C(LDC,*) INTEGER N, NCVT, NRU, NCC, LDVT, LDU, LDC, INFO DOUBLE PRECISION D(*), E(*), WORK(*) SUBROUTINE ZBDSQR_64( UPLO, N, NCVT, NRU, NCC, D, E, VT, LDVT, U, * LDU, C, LDC, WORK, INFO) CHARACTER * 1 UPLO DOUBLE COMPLEX VT(LDVT,*), U(LDU,*), C(LDC,*) INTEGER*8 N, NCVT, NRU, NCC, LDVT, LDU, LDC, INFO DOUBLE PRECISION D(*), E(*), WORK(*)
SUBROUTINE BDSQR( UPLO, [N], [NCVT], [NRU], [NCC], D, E, VT, [LDVT], * U, [LDU], C, [LDC], [WORK], [INFO]) CHARACTER(LEN=1) :: UPLO COMPLEX(8), DIMENSION(:,:) :: VT, U, C INTEGER :: N, NCVT, NRU, NCC, LDVT, LDU, LDC, INFO REAL(8), DIMENSION(:) :: D, E, WORK SUBROUTINE BDSQR_64( UPLO, [N], [NCVT], [NRU], [NCC], D, E, VT, * [LDVT], U, [LDU], C, [LDC], [WORK], [INFO]) CHARACTER(LEN=1) :: UPLO COMPLEX(8), DIMENSION(:,:) :: VT, U, C INTEGER(8) :: N, NCVT, NRU, NCC, LDVT, LDU, LDC, INFO REAL(8), DIMENSION(:) :: D, E, WORK
void zbdsqr(char uplo, int n, int ncvt, int nru, int ncc, double *d, double *e, doublecomplex *vt, int ldvt, doublecomplex *u, int ldu, doublecomplex *c, int ldc, int *info);
void zbdsqr_64(char uplo, long n, long ncvt, long nru, long ncc, double *d, double *e, doublecomplex *vt, long ldvt, doublecomplex *u, long ldu, doublecomplex *c, long ldc, long *info);
The routine computes S, and optionally computes U * Q, P' * VT, or Q' * C, for given complex 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.