zbdsqr - compute the singular value decomposition (SVD) of a real N-by-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(*)
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
#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);
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 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 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.
= '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.
= 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.