bdsdc#
Functions
-
void sbdsdc(const char *uplo, const char *compq, const INT n, f32 *restrict D, f32 *restrict E, f32 *restrict U, const INT ldu, f32 *restrict VT, const INT ldvt, f32 *restrict Q, INT *restrict IQ, f32 *restrict work, INT *restrict IWORK, INT *info)#
SBDSDC computes the singular value decomposition (SVD) of a real N-by-N (upper or lower) bidiagonal matrix B: B = U * S * VT, using a divide and conquer method, where S is a diagonal matrix with non-negative diagonal elements (the singular values of B), and U and VT are orthogonal matrices of left and right singular vectors, respectively.
SBDSDC can be used to compute all singular values, and optionally, singular vectors or singular vectors in compact form.
The code currently calls SLASDQ if singular values only are desired. However, it can be slightly modified to compute singular values using the divide and conquer method.
Parameters
inuplo= ‘U’: B is upper bidiagonal. = ‘L’: B is lower bidiagonal.
incompq= ‘N’: Compute singular values only. = ‘P’: Compute singular values and vectors in compact form. = ‘I’: Compute singular values and singular vectors.
innThe order of the matrix B. n >= 0.
inoutDArray of dimension n. On entry, diagonal elements. On exit, singular values of B.
inoutEArray of dimension n-1. Off-diagonal elements. On exit, E has been destroyed.
outUArray (ldu, n). If compq=’I’, left singular vectors.
inlduLeading dimension of U.
outVTArray (ldvt, n). If compq=’I’, right singular vectors.
inldvtLeading dimension of VT.
outQArray. If compq=’P’, compact form of singular vectors.
outIQInteger array. If compq=’P’, compact form data.
outworkArray of dimension: if compq=’N’: 4*n if compq=’P’: 6*n if compq=’I’: 3*n^2 + 4*n
outIWORKInteger array of dimension 8*n.
outinfo= 0: success. < 0: illegal argument. > 0: not converged.
void sbdsdc(
const char* uplo,
const char* compq,
const INT n,
f32* restrict D,
f32* restrict E,
f32* restrict U,
const INT ldu,
f32* restrict VT,
const INT ldvt,
f32* restrict Q,
INT* restrict IQ,
f32* restrict work,
INT* restrict IWORK,
INT* info
);
Functions
-
void dbdsdc(const char *uplo, const char *compq, const INT n, f64 *restrict D, f64 *restrict E, f64 *restrict U, const INT ldu, f64 *restrict VT, const INT ldvt, f64 *restrict Q, INT *restrict IQ, f64 *restrict work, INT *restrict IWORK, INT *info)#
DBDSDC computes the singular value decomposition (SVD) of a real N-by-N (upper or lower) bidiagonal matrix B: B = U * S * VT, using a divide and conquer method, where S is a diagonal matrix with non-negative diagonal elements (the singular values of B), and U and VT are orthogonal matrices of left and right singular vectors, respectively.
DBDSDC can be used to compute all singular values, and optionally, singular vectors or singular vectors in compact form.
The code currently calls DLASDQ if singular values only are desired. However, it can be slightly modified to compute singular values using the divide and conquer method.
Parameters
inuplo= ‘U’: B is upper bidiagonal. = ‘L’: B is lower bidiagonal.
incompq= ‘N’: Compute singular values only. = ‘P’: Compute singular values and vectors in compact form. = ‘I’: Compute singular values and singular vectors.
innThe order of the matrix B. n >= 0.
inoutDArray of dimension n. On entry, diagonal elements. On exit, singular values of B.
inoutEArray of dimension n-1. Off-diagonal elements. On exit, E has been destroyed.
outUArray (ldu, n). If compq=’I’, left singular vectors.
inlduLeading dimension of U.
outVTArray (ldvt, n). If compq=’I’, right singular vectors.
inldvtLeading dimension of VT.
outQArray. If compq=’P’, compact form of singular vectors.
outIQInteger array. If compq=’P’, compact form data.
outworkArray of dimension: if compq=’N’: 4*n if compq=’P’: 6*n if compq=’I’: 3*n^2 + 4*n
outIWORKInteger array of dimension 8*n.
outinfo= 0: success. < 0: illegal argument. > 0: not converged.
void dbdsdc(
const char* uplo,
const char* compq,
const INT n,
f64* restrict D,
f64* restrict E,
f64* restrict U,
const INT ldu,
f64* restrict VT,
const INT ldvt,
f64* restrict Q,
INT* restrict IQ,
f64* restrict work,
INT* restrict IWORK,
INT* info
);