lasd0#

Functions

void slasd0(
    const INT           n,
    const INT           sqre,
          f32* restrict D,
          f32* restrict E,
          f32* restrict U,
    const INT           ldu,
          f32* restrict VT,
    const INT           ldvt,
    const INT           smlsiz,
          INT* restrict IWORK,
          f32* restrict work,
          INT*          info
);
void slasd0(const INT n, const INT sqre, f32 *restrict D, f32 *restrict E, f32 *restrict U, const INT ldu, f32 *restrict VT, const INT ldvt, const INT smlsiz, INT *restrict IWORK, f32 *restrict work, INT *info)#

Using a divide and conquer approach, SLASD0 computes the singular value decomposition (SVD) of a real upper bidiagonal N-by-M matrix B with diagonal D and offdiagonal E, where M = N + SQRE.

The algorithm computes orthogonal matrices U and VT such that B = U * S * VT. The singular values S are overwritten on D.

A related subroutine, SLASDA, computes only the singular values, and optionally, the singular vectors in compact form.

Parameters

in
n

Row dimension of upper bidiagonal matrix.

in
sqre

= 0: bidiagonal matrix has column dimension M = N. = 1: bidiagonal matrix has column dimension M = N+1.

inout
D

Array of dimension n. Main diagonal on entry, singular values on exit.

inout
E

Array of dimension m-1. Offdiagonal entries.

inout
U

Array (ldu, n). Left singular vectors if U passed in as N-by-N identity.

in
ldu

Leading dimension of U.

inout
VT

Array (ldvt, m). Right singular vectors transposed if VT passed in as M-by-M identity.

in
ldvt

Leading dimension of VT.

in
smlsiz

Maximum size of subproblems at bottom of tree.

out
IWORK

Integer array of dimension 8*n.

out
work

Double array of dimension 3*m^2 + 2*m.

out
info

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

Functions

void dlasd0(
    const INT           n,
    const INT           sqre,
          f64* restrict D,
          f64* restrict E,
          f64* restrict U,
    const INT           ldu,
          f64* restrict VT,
    const INT           ldvt,
    const INT           smlsiz,
          INT* restrict IWORK,
          f64* restrict work,
          INT*          info
);
void dlasd0(const INT n, const INT sqre, f64 *restrict D, f64 *restrict E, f64 *restrict U, const INT ldu, f64 *restrict VT, const INT ldvt, const INT smlsiz, INT *restrict IWORK, f64 *restrict work, INT *info)#

Using a divide and conquer approach, DLASD0 computes the singular value decomposition (SVD) of a real upper bidiagonal N-by-M matrix B with diagonal D and offdiagonal E, where M = N + SQRE.

The algorithm computes orthogonal matrices U and VT such that B = U * S * VT. The singular values S are overwritten on D.

A related subroutine, DLASDA, computes only the singular values, and optionally, the singular vectors in compact form.

Parameters

in
n

Row dimension of upper bidiagonal matrix.

in
sqre

= 0: bidiagonal matrix has column dimension M = N. = 1: bidiagonal matrix has column dimension M = N+1.

inout
D

Array of dimension n. Main diagonal on entry, singular values on exit.

inout
E

Array of dimension m-1. Offdiagonal entries.

inout
U

Array (ldu, n). Left singular vectors if U passed in as N-by-N identity.

in
ldu

Leading dimension of U.

inout
VT

Array (ldvt, m). Right singular vectors transposed if VT passed in as M-by-M identity.

in
ldvt

Leading dimension of VT.

in
smlsiz

Maximum size of subproblems at bottom of tree.

out
IWORK

Integer array of dimension 8*n.

out
work

Double array of dimension 3*m^2 + 2*m.

out
info

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