# ?lasd0

Computes the singular values of a real upper bidiagonal n-by-m matrix B with diagonal d and off-diagonal e. Used by ?bdsdc.

## Syntax

call slasd0( n, sqre, d, e, u, ldu, vt, ldvt, smlsiz, iwork, work, info )

call dlasd0( n, sqre, d, e, u, ldu, vt, ldvt, smlsiz, iwork, work, info )

## Description

Using a divide and conquer approach, the routine ?lasd0 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.

The related subroutine ?lasda computes only the singular values, and optionally, the singular vectors in compact form.

## Input Parameters

n

  INTEGER. On entry, the row dimension of the upper bidiagonal matrix. This is also the dimension of the main diagonal array d.

sqre

  INTEGER. 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

  REAL for slasd0

  DOUBLE PRECISION for dlasd0

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

e

  REAL for slasd0

  DOUBLE PRECISION for dlasd0

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

ldu

  INTEGER. On entry, leading dimension of the output array u.

ldvt

  INTEGER. On entry, leading dimension of the output array vt.

smlsiz

  INTEGER. On entry, maximum size of the subproblems at the bottom of the computation tree.

iwork

  INTEGER.

  Workspace array, dimension must be at least `(8n)`.

work

  REAL for slasd0

  DOUBLE PRECISION for dlasd0

  Workspace array, dimension must be at least `(3m2+2m)`.

## Output Parameters

d

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

u

  REAL for slasd0

  DOUBLE PRECISION for dlasd0

  Array, DIMENSION at least (ldq, n). On exit, u contains the left singular vectors.

vt

  REAL for slasd0

  DOUBLE PRECISION for dlasd0

  Array, DIMENSION at least (ldvt, m). On exit, vt' contains the right singular vectors.

info

  INTEGER.

  If `info = 0`: successful exit.

  If `info = -i < 0`, the i-th argument had an illegal value.

  If `info = 1`, an singular value did not converge.

Parent topic: Auxiliary Routines