--- rpl/lapack/lapack/dlasdq.f 2011/07/22 07:38:08 1.8 +++ rpl/lapack/lapack/dlasdq.f 2011/11/21 20:42:59 1.9 @@ -1,10 +1,220 @@ +*> \brief \b DLASDQ +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLASDQ + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLASDQ( UPLO, SQRE, N, NCVT, NRU, NCC, D, E, VT, LDVT, +* U, LDU, C, LDC, WORK, INFO ) +* +* .. Scalar Arguments .. +* CHARACTER UPLO +* INTEGER INFO, LDC, LDU, LDVT, N, NCC, NCVT, NRU, SQRE +* .. +* .. Array Arguments .. +* DOUBLE PRECISION C( LDC, * ), D( * ), E( * ), U( LDU, * ), +* $ VT( LDVT, * ), WORK( * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLASDQ computes the singular value decomposition (SVD) of a real +*> (upper or lower) bidiagonal matrix with diagonal D and offdiagonal +*> E, accumulating the transformations if desired. Letting B denote +*> the input bidiagonal matrix, the algorithm computes orthogonal +*> matrices Q and P such that B = Q * S * P**T (P**T denotes the transpose +*> of P). The singular values S are overwritten on D. +*> +*> The input matrix U is changed to U * Q if desired. +*> The input matrix VT is changed to P**T * VT if desired. +*> The input matrix C is changed to Q**T * C if desired. +*> +*> See "Computing Small Singular Values of Bidiagonal Matrices With +*> Guaranteed High Relative Accuracy," by J. Demmel and W. Kahan, +*> LAPACK Working Note #3, for a detailed description of the algorithm. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] UPLO +*> \verbatim +*> UPLO is CHARACTER*1 +*> On entry, UPLO specifies whether the input bidiagonal matrix +*> is upper or lower bidiagonal, and wether it is square are +*> not. +*> UPLO = 'U' or 'u' B is upper bidiagonal. +*> UPLO = 'L' or 'l' B is lower bidiagonal. +*> \endverbatim +*> +*> \param[in] SQRE +*> \verbatim +*> SQRE is INTEGER +*> = 0: then the input matrix is N-by-N. +*> = 1: then the input matrix is N-by-(N+1) if UPLU = 'U' and +*> (N+1)-by-N if UPLU = 'L'. +*> +*> The bidiagonal matrix has +*> N = NL + NR + 1 rows and +*> M = N + SQRE >= N columns. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> On entry, N specifies the number of rows and columns +*> in the matrix. N must be at least 0. +*> \endverbatim +*> +*> \param[in] NCVT +*> \verbatim +*> NCVT is INTEGER +*> On entry, NCVT specifies the number of columns of +*> the matrix VT. NCVT must be at least 0. +*> \endverbatim +*> +*> \param[in] NRU +*> \verbatim +*> NRU is INTEGER +*> On entry, NRU specifies the number of rows of +*> the matrix U. NRU must be at least 0. +*> \endverbatim +*> +*> \param[in] NCC +*> \verbatim +*> NCC is INTEGER +*> On entry, NCC specifies the number of columns of +*> the matrix C. NCC must be at least 0. +*> \endverbatim +*> +*> \param[in,out] D +*> \verbatim +*> D is DOUBLE PRECISION array, dimension (N) +*> On entry, D contains the diagonal entries of the +*> bidiagonal matrix whose SVD is desired. On normal exit, +*> D contains the singular values in ascending order. +*> \endverbatim +*> +*> \param[in,out] E +*> \verbatim +*> E is DOUBLE PRECISION array. +*> dimension is (N-1) if SQRE = 0 and N if SQRE = 1. +*> On entry, the entries of E contain the offdiagonal entries +*> of the bidiagonal matrix whose SVD is desired. On normal +*> exit, E will contain 0. If the algorithm does not converge, +*> D and E will contain the diagonal and superdiagonal entries +*> of a bidiagonal matrix orthogonally equivalent to the one +*> given as input. +*> \endverbatim +*> +*> \param[in,out] VT +*> \verbatim +*> VT is DOUBLE PRECISION array, dimension (LDVT, NCVT) +*> On entry, contains a matrix which on exit has been +*> premultiplied by P**T, dimension N-by-NCVT if SQRE = 0 +*> and (N+1)-by-NCVT if SQRE = 1 (not referenced if NCVT=0). +*> \endverbatim +*> +*> \param[in] LDVT +*> \verbatim +*> LDVT is INTEGER +*> On entry, LDVT specifies the leading dimension of VT as +*> declared in the calling (sub) program. LDVT must be at +*> least 1. If NCVT is nonzero LDVT must also be at least N. +*> \endverbatim +*> +*> \param[in,out] U +*> \verbatim +*> U is DOUBLE PRECISION array, dimension (LDU, N) +*> On entry, contains a matrix which on exit has been +*> postmultiplied by Q, dimension NRU-by-N if SQRE = 0 +*> and NRU-by-(N+1) if SQRE = 1 (not referenced if NRU=0). +*> \endverbatim +*> +*> \param[in] LDU +*> \verbatim +*> LDU is INTEGER +*> On entry, LDU specifies the leading dimension of U as +*> declared in the calling (sub) program. LDU must be at +*> least max( 1, NRU ) . +*> \endverbatim +*> +*> \param[in,out] C +*> \verbatim +*> C is DOUBLE PRECISION array, dimension (LDC, NCC) +*> On entry, contains an N-by-NCC matrix which on exit +*> has been premultiplied by Q**T dimension N-by-NCC if SQRE = 0 +*> and (N+1)-by-NCC if SQRE = 1 (not referenced if NCC=0). +*> \endverbatim +*> +*> \param[in] LDC +*> \verbatim +*> LDC is INTEGER +*> On entry, LDC specifies the leading dimension of C as +*> declared in the calling (sub) program. LDC must be at +*> least 1. If NCC is nonzero, LDC must also be at least N. +*> \endverbatim +*> +*> \param[out] WORK +*> \verbatim +*> WORK is DOUBLE PRECISION array, dimension (4*N) +*> Workspace. Only referenced if one of NCVT, NRU, or NCC is +*> nonzero, and if N is at least 2. +*> \endverbatim +*> +*> \param[out] INFO +*> \verbatim +*> INFO is INTEGER +*> On exit, a value of 0 indicates a successful exit. +*> If INFO < 0, argument number -INFO is illegal. +*> If INFO > 0, the algorithm did not converge, and INFO +*> specifies how many superdiagonals did not converge. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2011 +* +*> \ingroup auxOTHERauxiliary +* +*> \par Contributors: +* ================== +*> +*> Ming Gu and Huan Ren, Computer Science Division, University of +*> California at Berkeley, USA +*> +* ===================================================================== SUBROUTINE DLASDQ( UPLO, SQRE, N, NCVT, NRU, NCC, D, E, VT, LDVT, $ U, LDU, C, LDC, WORK, INFO ) * -* -- LAPACK auxiliary routine (version 3.2) -- +* -- LAPACK auxiliary routine (version 3.4.0) -- * -- LAPACK is a software package provided by Univ. of Tennessee, -- * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- -* November 2006 +* November 2011 * * .. Scalar Arguments .. CHARACTER UPLO @@ -15,120 +225,6 @@ $ VT( LDVT, * ), WORK( * ) * .. * -* Purpose -* ======= -* -* DLASDQ computes the singular value decomposition (SVD) of a real -* (upper or lower) bidiagonal matrix with diagonal D and offdiagonal -* E, accumulating the transformations if desired. Letting B denote -* the input bidiagonal matrix, the algorithm computes orthogonal -* matrices Q and P such that B = Q * S * P**T (P**T denotes the transpose -* of P). The singular values S are overwritten on D. -* -* The input matrix U is changed to U * Q if desired. -* The input matrix VT is changed to P**T * VT if desired. -* The input matrix C is changed to Q**T * C if desired. -* -* See "Computing Small Singular Values of Bidiagonal Matrices With -* Guaranteed High Relative Accuracy," by J. Demmel and W. Kahan, -* LAPACK Working Note #3, for a detailed description of the algorithm. -* -* Arguments -* ========= -* -* UPLO (input) CHARACTER*1 -* On entry, UPLO specifies whether the input bidiagonal matrix -* is upper or lower bidiagonal, and wether it is square are -* not. -* UPLO = 'U' or 'u' B is upper bidiagonal. -* UPLO = 'L' or 'l' B is lower bidiagonal. -* -* SQRE (input) INTEGER -* = 0: then the input matrix is N-by-N. -* = 1: then the input matrix is N-by-(N+1) if UPLU = 'U' and -* (N+1)-by-N if UPLU = 'L'. -* -* The bidiagonal matrix has -* N = NL + NR + 1 rows and -* M = N + SQRE >= N columns. -* -* N (input) INTEGER -* On entry, N specifies the number of rows and columns -* in the matrix. N must be at least 0. -* -* NCVT (input) INTEGER -* On entry, NCVT specifies the number of columns of -* the matrix VT. NCVT must be at least 0. -* -* NRU (input) INTEGER -* On entry, NRU specifies the number of rows of -* the matrix U. NRU must be at least 0. -* -* NCC (input) INTEGER -* On entry, NCC specifies the number of columns of -* the matrix C. NCC must be at least 0. -* -* D (input/output) DOUBLE PRECISION array, dimension (N) -* On entry, D contains the diagonal entries of the -* bidiagonal matrix whose SVD is desired. On normal exit, -* D contains the singular values in ascending order. -* -* E (input/output) DOUBLE PRECISION array. -* dimension is (N-1) if SQRE = 0 and N if SQRE = 1. -* On entry, the entries of E contain the offdiagonal entries -* of the bidiagonal matrix whose SVD is desired. On normal -* exit, E will contain 0. If the algorithm does not converge, -* D and E will contain the diagonal and superdiagonal entries -* of a bidiagonal matrix orthogonally equivalent to the one -* given as input. -* -* VT (input/output) DOUBLE PRECISION array, dimension (LDVT, NCVT) -* On entry, contains a matrix which on exit has been -* premultiplied by P**T, dimension N-by-NCVT if SQRE = 0 -* and (N+1)-by-NCVT if SQRE = 1 (not referenced if NCVT=0). -* -* LDVT (input) INTEGER -* On entry, LDVT specifies the leading dimension of VT as -* declared in the calling (sub) program. LDVT must be at -* least 1. If NCVT is nonzero LDVT must also be at least N. -* -* U (input/output) DOUBLE PRECISION array, dimension (LDU, N) -* On entry, contains a matrix which on exit has been -* postmultiplied by Q, dimension NRU-by-N if SQRE = 0 -* and NRU-by-(N+1) if SQRE = 1 (not referenced if NRU=0). -* -* LDU (input) INTEGER -* On entry, LDU specifies the leading dimension of U as -* declared in the calling (sub) program. LDU must be at -* least max( 1, NRU ) . -* -* C (input/output) DOUBLE PRECISION array, dimension (LDC, NCC) -* On entry, contains an N-by-NCC matrix which on exit -* has been premultiplied by Q**T dimension N-by-NCC if SQRE = 0 -* and (N+1)-by-NCC if SQRE = 1 (not referenced if NCC=0). -* -* LDC (input) INTEGER -* On entry, LDC specifies the leading dimension of C as -* declared in the calling (sub) program. LDC must be at -* least 1. If NCC is nonzero, LDC must also be at least N. -* -* WORK (workspace) DOUBLE PRECISION array, dimension (4*N) -* Workspace. Only referenced if one of NCVT, NRU, or NCC is -* nonzero, and if N is at least 2. -* -* INFO (output) INTEGER -* On exit, a value of 0 indicates a successful exit. -* If INFO < 0, argument number -INFO is illegal. -* If INFO > 0, the algorithm did not converge, and INFO -* specifies how many superdiagonals did not converge. -* -* Further Details -* =============== -* -* Based on contributions by -* Ming Gu and Huan Ren, Computer Science Division, University of -* California at Berkeley, USA -* * ===================================================================== * * .. Parameters ..