Developer Reference for Intel® oneAPI Math Kernel Library for C

ID 766684
Date 11/07/2023
Public

A newer version of this document is available. Customers should click here to go to the newest version.

Document Table of Contents

?lasda

Computes the singular value decomposition (SVD) of a real upper bidiagonal matrix with diagonal d and off-diagonal e. Used by ?bdsdc.

Syntax

void slasda( lapack_int *icompq, lapack_int *smlsiz, lapack_int *n, lapack_int *sqre, float *d, float *e, float *u, lapack_int *ldu, float *vt, lapack_int *k, float *difl, float *difr, float *z, float *poles, lapack_int *givptr, lapack_int *givcol, lapack_int *ldgcol, lapack_int *perm, float *givnum, float *c, float *s, float *work, lapack_int *iwork, lapack_int *info );

void dlasda( lapack_int *icompq, lapack_int *smlsiz, lapack_int *n, lapack_int *sqre, double *d, double *e, double *u, lapack_int *ldu, double *vt, lapack_int *k, double *difl, double *difr, double *z, double *poles, lapack_int *givptr, lapack_int *givcol, lapack_int *ldgcol, lapack_int *perm, double *givnum, double *c, double *s, double *work, lapack_int *iwork, lapack_int *info );

Include Files

  • mkl.h

Description

Using a divide and conquer approach, ?lasda computes the singular value decomposition (SVD) of a real upper bidiagonal n-by-m matrix B with diagonal d and off-diagonal e, where m = n + sqre.

The algorithm computes the singular values in the SVDB = U*S*VT. The orthogonal matrices U and VT are optionally computed in compact form. A related subroutine ?lasd0 computes the singular values and the singular vectors in explicit form.

Input Parameters

icompq

Specifies whether singular vectors are to be computed in compact form, as follows:

= 0: Compute singular values only.

= 1: Compute singular vectors of upper bidiagonal matrix in compact form.

smlsiz

The maximum size of the subproblems at the bottom of the computation tree.

n

The row dimension of the upper bidiagonal matrix. This is also the dimension of the main diagonal array d.

sqre

Specifies the column dimension of the bidiagonal matrix.

If sqre = 0: the bidiagonal matrix has column dimension m = n

If sqre = 1: the bidiagonal matrix has column dimension m = n + 1.

d

Array, DIMENSION (n). On entry, d contains the main diagonal of the bidiagonal matrix.

e

Array, DIMENSION ( m - 1 ). Contains the subdiagonal entries of the bidiagonal matrix. On exit, e is destroyed.

ldu

The leading dimension of arrays u, vt, difl, difr, poles, givnum, and z. ldun.

ldgcol

The leading dimension of arrays givcol and perm. ldgcoln.

work

Workspace array, DIMENSION (6n+(smlsiz+1)2).

iwork

Workspace array, Dimension must be at least (7n).

Output Parameters

d

On exit d, if info = 0, contains the singular values of the bidiagonal matrix.

u

Array, DIMENSION (ldu, smlsiz) if icompq =1.

Not referenced if icompq = 0.

If icompq = 1, on exit, u contains the left singular vector matrices of all subproblems at the bottom level.

vt

Array, DIMENSION ( ldu, smlsiz+1 ) if icompq = 1, and not referenced if icompq = 0. If icompq = 1, on exit, vt' contains the right singular vector matrices of all subproblems at the bottom level.

k

Array, DIMENSION (n) if icompq = 1 and

DIMENSION (1) if icompq = 0.

If icompq = 1, on exit, k(i) is the dimension of the i-th secular equation on the computation tree.

difl

REAL for slasda

DOUBLE PRECISION for dlasda.

Array, DIMENSION ( ldu, nlvl ),

where nlvl = floor(log2(n/smlsiz)).

difr

Array,

DIMENSION ( ldu, 2 nlvl ) if icompq = 1 and

DIMENSION (n) if icompq = 0.

If icompq = 1, on exit, difl(1:n, i) and difr(1:n,2i -1) record distances between singular values on the i-th level and singular values on the (i -1)-th level, and difr(1:n, 2i ) contains the normalizing factors for the right singular vector matrix. See ?lasd8 for details.

z

Array,

DIMENSION ( ldu, nlvl ) if icompq = 1 and

DIMENSION (n) if icompq = 0. The first k elements of z(1, i) contain the components of the deflation-adjusted updating row vector for subproblems on the i-th level.

poles

Array, DIMENSION(ldu, 2*nlvl)

if icompq = 1, and not referenced if icompq = 0. If icompq = 1, on exit, poles(1, 2i - 1) and poles(1, 2i) contain the new and old singular values involved in the secular equations on the i-th level.

givptr

Array, DIMENSION (n) if icompq = 1, and not referenced if icompq = 0. If icompq = 1, on exit, givptr( i ) records the number of Givens rotations performed on the i-th problem on the computation tree.

givcol

Array, DIMENSION(ldgcol, 2*nlvl) if icompq = 1, and not referenced if icompq = 0. If icompq = 1, on exit, for each i, givcol(1, 2 i - 1) and givcol(1, 2 i) record the locations of Givens rotations performed on the i-th level on the computation tree.

perm

Array, DIMENSION ( ldgcol, nlvl ) if icompq = 1, and not referenced if icompq = 0. If icompq = 1, on exit, perm (1, i) records permutations done on the i-th level of the computation tree.

givnum

Array DIMENSION ( ldu, 2*nlvl ) if icompq = 1, and not referenced if icompq = 0. If icompq = 1, on exit, for each i, givnum(1, 2 i - 1) and givnum(1, 2 i) record the C- and S-values of Givens rotations performed on the i-th level on the computation tree.

c

Array,

DIMENSION (n) if icompq = 1, and

DIMENSION (1) if icompq = 0.

If icompq = 1 and the i-th subproblem is not square, on exit, c(i) contains the C-value of a Givens rotation related to the right null space of the i-th subproblem.

s

Array,

DIMENSION (n) icompq = 1, and

DIMENSION (1) if icompq = 0.

If icompq = 1 and the i-th subproblem is not square, on exit, s(i) contains the S-value of a Givens rotation related to the right null space of the i-th subproblem.

info

= 0: successful exit.

< 0: if info = -i, the i-th argument had an illegal value

> 0: If info = 1, an singular value did not converge