zbdsqr - N (upper or lower) bidiagonal matrix B
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(*) F95 INTERFACE 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 C INTERFACE #include <sunperf.h> 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);
Oracle Solaris Studio Performance Library zbdsqr(3P) NAME zbdsqr - compute the singular value decomposition (SVD) of a real N-by- N (upper or lower) bidiagonal matrix B SYNOPSIS 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(*) F95 INTERFACE 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 C INTERFACE #include <sunperf.h> 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); PURPOSE zbdsqr 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 diago- nal 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 complex input matrices U, VT, and C. See "Computing Small Singular Values of Bidiagonal Matrices With Guar- anteed High Relative Accuracy," by J. Demmel and W. Kahan, LAPACK Work- ing 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. Par- lett and V. Fernando, Technical Report CPAM-554, Mathematics Depart- ment, University of California at Berkeley, July 1992 for a detailed description of the algorithm. ARGUMENTS UPLO (input) = 'U': B is upper bidiagonal; = 'L': B is lower bidiagonal. N (input) The order of the matrix B. N >= 0. NCVT (input) The number of columns of the matrix VT. NCVT >= 0. NRU (input) The number of rows of the matrix U. NRU >= 0. NCC (input) The number of columns of the matrix C. NCC >= 0. D (input/output) On entry, the n diagonal elements of the bidiagonal matrix B. On exit, if INFO=0, the singular values of B in decreasing order. E (input/output) On entry, the elements of E contain the offdiagonal elements of 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 equivalent to the one given as input. E(N) is used for workspace. VT (input/output) 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) The leading dimension of the array VT. LDVT >= max(1,N) if NCVT > 0; LDVT >= 1 if NCVT = 0. U (input/output) 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) The leading dimension of the array U. LDU >= max(1,NRU). C (input/output) 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) The leading dimension of the array C. LDC >= max(1,N) if NCC > 0; LDC >=1 if NCC = 0. WORK (workspace) dimension (4*N) INFO (output) = 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. 7 Nov 2015 zbdsqr(3P)