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
);
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

in
uplo

= ‘U’: B is upper bidiagonal. = ‘L’: B is lower bidiagonal.

in
compq

= ‘N’: Compute singular values only. = ‘P’: Compute singular values and vectors in compact form. = ‘I’: Compute singular values and singular vectors.

in
n

The order of the matrix B. n >= 0.

inout
D

Array of dimension n. On entry, diagonal elements. On exit, singular values of B.

inout
E

Array of dimension n-1. Off-diagonal elements. On exit, E has been destroyed.

out
U

Array (ldu, n). If compq=’I’, left singular vectors.

in
ldu

Leading dimension of U.

out
VT

Array (ldvt, n). If compq=’I’, right singular vectors.

in
ldvt

Leading dimension of VT.

out
Q

Array. If compq=’P’, compact form of singular vectors.

out
IQ

Integer array. If compq=’P’, compact form data.

out
work

Array of dimension: if compq=’N’: 4*n if compq=’P’: 6*n if compq=’I’: 3*n^2 + 4*n

out
IWORK

Integer array of dimension 8*n.

out
info

  • = 0: success. < 0: illegal argument. > 0: not converged.

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
);
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

in
uplo

= ‘U’: B is upper bidiagonal. = ‘L’: B is lower bidiagonal.

in
compq

= ‘N’: Compute singular values only. = ‘P’: Compute singular values and vectors in compact form. = ‘I’: Compute singular values and singular vectors.

in
n

The order of the matrix B. n >= 0.

inout
D

Array of dimension n. On entry, diagonal elements. On exit, singular values of B.

inout
E

Array of dimension n-1. Off-diagonal elements. On exit, E has been destroyed.

out
U

Array (ldu, n). If compq=’I’, left singular vectors.

in
ldu

Leading dimension of U.

out
VT

Array (ldvt, n). If compq=’I’, right singular vectors.

in
ldvt

Leading dimension of VT.

out
Q

Array. If compq=’P’, compact form of singular vectors.

out
IQ

Integer array. If compq=’P’, compact form data.

out
work

Array of dimension: if compq=’N’: 4*n if compq=’P’: 6*n if compq=’I’: 3*n^2 + 4*n

out
IWORK

Integer array of dimension 8*n.

out
info

  • = 0: success. < 0: illegal argument. > 0: not converged.