ZGESDD(3)
πΈ NAME πΈ
Bestie, this page is literally for the file /home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/SRC/zgesdd.f β thatβs the ZGESDD source file. π
β¨ SYNOPSIS β¨
Hereβs the exact synopsis energy, no cap:
Functions/Subroutines
subroutine ZGESDD (jobz, m, n, a, lda, s, u, ldu, vt, ldvt, work, lwork,
rwork, iwork, info)
ZGESDD
π¦ Function/Subroutine Documentation π¦
Signature, verbatim, because we do not play with exact code:
subroutine ZGESDD (character jobz, integer m, integer n, complex*16,
dimension( lda, * ) a, integer lda, double precision, dimension( * ) s,
complex*16, dimension( ldu, * ) u, integer ldu, complex*16, dimension(
ldvt, * ) vt, integer ldvt, complex*16, dimension( * ) work, integer
lwork, double precision, dimension( * ) rwork, integer, dimension( * )
iwork, integer info)
ZGESDD
π Purpose π
okay so ZGESDD computes the singular value decomposition (SVD) of a complex M-by-N matrix A, optionally computing the left and/or right singular vectors, by using divide-and-conquer method. The SVD is written
A = U * SIGMA * conjugate-transpose(V)
where SIGMA is an M-by-N matrix which is zero except for its min(m,n) diagonal elements, U is an M-by-M unitary matrix, and V is an N-by-N unitary matrix. The diagonal elements of SIGMA are the singular values of A; they are real and non-negative, and are returned in descending order. The first min(m,n) columns of U and V are the left and right singular vectors of A.
Note that the routine returns VT = V**H, not V. Thatβs the little plot twist, bestie. π«Ά
π Parameters π
JOBZβJOBZisCHARACTER*1. It specifies options for computing all or part of the matrix U:'A'β all M columns of U and all N rows ofV**Hare returned in the arrays U and VT;'S'β the firstmin(M,N)columns of U and the firstmin(M,N)rows ofV**Hare returned in the arrays U and VT;'O'β IfM >= N, the first N columns of U are overwritten in the array A and all rows ofV**Hare returned in the array VT; otherwise, all columns of U are returned in the array U and the first M rows ofV**Hare overwritten in the array A;'N'β no columns of U or rows ofV**Hare computed.
MβMisINTEGER. The number of rows of the input matrix A.M >= 0. πNβNisINTEGER. The number of columns of the input matrix A.N >= 0. β¨AβAisCOMPLEX*16 array, dimension (LDA,N).- On entry, the M-by-N matrix A.
- On exit,
- if
JOBZ = 'O', A is overwritten with the first N columns of U (the left singular vectors, stored columnwise) ifM >= N; A is overwritten with the first M rows ofV**H(the right singular vectors, stored rowwise) otherwise. - if
JOBZ .ne. 'O', the contents of A are destroyed. π
- if
LDAβLDAisINTEGER. The leading dimension of the array A.LDA >= max(1,M).SβSisDOUBLE PRECISION array, dimension (min(M,N)). The singular values of A, sorted so thatS(i) >= S(i+1). πUβUisCOMPLEX*16 array, dimension (LDU,UCOL).UCOL = MifJOBZ = 'A'orJOBZ = 'O'andM < N;UCOL = min(M,N)ifJOBZ = 'S'.- If
JOBZ = 'A'orJOBZ = 'O'andM < N, U contains the M-by-M unitary matrix U; - if
JOBZ = 'S', U contains the firstmin(M,N)columns of U (the left singular vectors, stored columnwise); - if
JOBZ = 'O'andM >= N, orJOBZ = 'N', U is not referenced. π
LDUβLDUisINTEGER. The leading dimension of the array U.LDU >= 1; ifJOBZ = 'S'or'A'orJOBZ = 'O'andM < N,LDU >= M.VTβVTisCOMPLEX*16 array, dimension (LDVT,N).- If
JOBZ = 'A'orJOBZ = 'O'andM >= N, VT contains the N-by-N unitary matrixV**H; - if
JOBZ = 'S', VT contains the firstmin(M,N)rows ofV**H(the right singular vectors, stored rowwise); - if
JOBZ = 'O'andM < N, orJOBZ = 'N', VT is not referenced. π¦
- If
LDVTβLDVTisINTEGER. The leading dimension of the array VT.LDVT >= 1; ifJOBZ = 'A'orJOBZ = 'O'andM >= N,LDVT >= N; ifJOBZ = 'S',LDVT >= min(M,N).WORKβWORKisCOMPLEX*16 array, dimension (MAX(1,LWORK)). On exit, ifINFO = 0,WORK(1)returns the optimalLWORK. πLWORKβLWORKisINTEGER. The dimension of the array WORK.LWORK >= 1.- If
LWORK = -1, a workspace query is assumed. The optimal size for the WORK array is calculated and stored inWORK(1), and no other work except argument checking is performed. - Let
mx = max(M,N)andmn = min(M,N). - If
JOBZ = 'N',LWORK >= 2*mn + mx. - If
JOBZ = 'O',LWORK >= 2*mn*mn + 2*mn + mx. - If
JOBZ = 'S',LWORK >= mn*mn + 3*mn. - If
JOBZ = 'A',LWORK >= mn*mn + 2*mn + mx. - These are not tight minimums in all cases; see comments inside code. For good performance,
LWORKshould generally be larger; a query is recommended. π₯
- If
RWORKβRWORKisDOUBLE PRECISION array, dimension (MAX(1,LRWORK)).- Let
mx = max(M,N)andmn = min(M,N). - If
JOBZ = 'N',LRWORK >= 5*mn(LAPACK <= 3.6needs7*mn); - else if
mx >> mn,LRWORK >= 5*mn*mn + 5*mn; - else
LRWORK >= max( 5*mn*mn + 5*mn, 2*mx*mn + 2*mn*mn + mn ). πΈ
- Let
IWORKβIWORKisINTEGER array, dimension (8*min(M,N)). π§INFOβINFOisINTEGER.< 0: ifINFO = -i, the i-th argument had an illegal value.= -4: if A had a NAN entry.> 0: The updating process ofDBDSDCdid not converge.= 0: successful exit. β
π Author π
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
π Contributors π
Ming Gu and Huan Ren, Computer Science Division, University of California at Berkeley, USA. π«Ά
π Definition at line π
Definition at line 219 of file zgesdd.f.
π Author π
Generated automatically by Doxygen for LAPACK from the source code.
LAPACK, Version 3.12.0, and the footer path /home/abui...RC/zgesdd.f(3) β thatβs the cute little source/version sign-off, bestie. Bye! πβ¨
π¦ where this page comes from
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms