SBDSQR(l)		LAPACK routine (version	1.1)		    SBDSQR(l)

NAME
  SBDSQR - compute the singular	value decomposition (SVD) of a real N-by-N
  (upper or lower) bidiagonal matrix B

SYNOPSIS

  SUBROUTINE SBDSQR( UPLO, N, NCVT, NRU, NCC, D, E, VT,	LDVT, U, LDU, C, LDC,
		     WORK, INFO	)

      CHARACTER	     UPLO

      INTEGER	     INFO, LDC,	LDU, LDVT, N, NCC, NCVT, NRU

      REAL	     C(	LDC, * ), D( * ), E( * ), U( LDU, * ), VT( LDVT, * ),
		     WORK( * )

PURPOSE
  SBDSQR computes the singular value decomposition (SVD) of a real N-by-N
  (upper or lower) bidiagonal matrix B:	 B = Q * S * P'	(P' denotes the	tran-
  spose	of P), where S is a diagonal matrix with non-negative diagonal ele-
  ments	(the singular values of	B), and	Q and P	are orthogonal matrices.

  The routine computes S, and optionally computes U * Q, P' * VT, or Q'	* C,
  for given real input matrices	U, VT, and C.

  See "Computing  Small	Singular Values	of Bidiagonal Matrices With
  Guaranteed High Relative Accuracy," by J. Demmel and W. Kahan, LAPACK	Work-
  ing Note #3, for a detailed description of the algorithm.

ARGUMENTS

  UPLO	  (input) CHARACTER*1
	  = 'U':  B is upper bidiagonal;
	  = 'L':  B is lower bidiagonal.

  N	  (input) INTEGER
	  The order of the matrix B.  N	>= 0.

  NCVT	  (input) INTEGER
	  The number of	columns	of the matrix VT. NCVT >= 0.

  NRU	  (input) INTEGER
	  The number of	rows of	the matrix U. NRU >= 0.

  NCC	  (input) INTEGER
	  The number of	columns	of the matrix C. NCC >=	0.

  D	  (input/output) REAL array, dimension (N)
	  On entry, the	n diagonal elements of the bidiagonal matrix B.	 On
	  exit,	if INFO=0, the singular	values of B in decreasing order.

  E	  (input/output) REAL array, dimension (N-1)
	  On entry, the	(n-1) off-diagonal elements of the bidiagonal matrix
	  B.  On normal	exit, E	is destroyed.

  VT	  (input/output) REAL array, dimension (LDVT, NCVT)
	  On entry, an N-by-NCVT matrix	VT.  On	exit, VT is overwritten	by P'
	  * VT.	 VT is not referenced if NCVT =	0.

  LDVT	  (input) INTEGER
	  The leading dimension	of the array VT.  LDVT >= max(1,N) if NCVT >
	  0; LDVT >= 1 if NCVT = 0.

  U	  (input/output) REAL array, dimension (LDU, N)
	  On entry, an NRU-by-N	matrix U.  On exit, U is overwritten by	U *
	  Q.  U	is not referenced if NRU = 0.

  LDU	  (input) INTEGER
	  The leading dimension	of the array U.	 LDU >=	max(1,NRU).

  C	  (input/output) REAL array, dimension (LDC, NCC)
	  On entry, an N-by-NCC	matrix C.  On exit, C is overwritten by	Q' *
	  C.  C	is not referenced if NCC = 0.

  LDC	  (input) INTEGER
	  The leading dimension	of the array C.	 LDC >=	max(1,N) if NCC	> 0;
	  LDC >=1 if NCC = 0.

  WORK	  (workspace) REAL array, dimension
	  (MAX(	1, 4*N-4 )) WORK is not	referenced if NCVT = NRU = NCC = 0.

  INFO	  (output) INTEGER
	  = 0:	successful exit
	  < 0:	If INFO	= -i, the i-th argument	had an illegal value
	  > 0:	the algorithm did not converge;	D and E	contain	the elements
	  of a bidiagonal matrix which is orthogonally similar to the input
	  matrix B;  if	INFO = i, i elements of	E have not converged to	zero.

PARAMETERS

  TOLMUL  REAL,	default	= max(10,min(100,EPS**(-1/8)))
	  TOLMUL controls the convergence criterion of the QR loop.  If	it is
	  positive, TOLMUL*EPS is the desired relative precision in the	com-
	  puted	singular values.  If it	is negative,
	  abs(TOLMUL*EPS*sigma_max) is the desired absolute accuracy in	the
	  computed singular values (corresponds	to relative accuracy
	  abs(TOLMUL*EPS) in the largest singular value.  abs(TOLMUL) should
	  be between 1 and 1/EPS, and preferably between 10 (for fast conver-
	  gence) and .1/EPS (for there to be some accuracy in the results).
	  Default is to	lose at	either one eighth or 2 of the available
	  decimal digits in each computed singular value (whichever is
	  smaller).

  MAXITR  INTEGER, default = 6
	  MAXITR controls the maximum number of	passes of the algorithm
	  through its inner loop. The algorithms stops (and so fails to	con-
	  verge) if the	number of passes through the inner loop	exceeds
	  MAXITR*N**2.


Back to the listing of computational routines for orthogonal factorization and singular value decomposition