SRC/cgesdd.f(3)
π NAME π
SRC/cgesdd.f β bestie, welcome to the Library Functions Manual page for this iconic LAPACK routine. Itβs giving βcomplex SVD, divide-and-conquer, main character energy.β π
β¨ SYNOPSIS β¨
Functions/Subroutines
subroutine cgesdd (jobz, m, n, a, lda, s, u, ldu, vt, ldvt, work, lwork,
rwork, iwork, info)
CGESDD
π Function/Subroutine Documentation π
subroutine cgesdd (character jobz, integer m, integer n, complex, dimension(
lda, * ) a, integer lda, real, dimension( * ) s, complex, dimension(
ldu, * ) u, integer ldu, complex, dimension( ldvt, * ) vt, integer ldvt,
complex, dimension( * ) work, integer lwork, real, dimension( * ) rwork,
integer, dimension( * ) iwork, integer info)
CGESDD
π― Purpose: π―
okay so CGESDD 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 like:
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 returnsVT = V**H, notV. Thatβs the vibe. Donβt get it twisted, bestie.
πΈ Parameters πΈ
π JOBZ
JOBZ is CHARACTER*1. Specifies options for computing all or part of the matrix U:
'A'β allMcolumns ofUand allNrows ofV**Hare returned in the arraysUandVT.'S'β the firstmin(M,N)columns ofUand the firstmin(M,N)rows ofV**Hare returned in the arraysUandVT.'O'β ifM >= N, the firstNcolumns ofUare overwritten in the arrayAand all rows ofV**Hare returned in the arrayVT; otherwise, all columns ofUare returned in the arrayUand the firstMrows ofV**Hare overwritten in the arrayA.'N'β no columns ofUor rows ofV**Hare computed.
π M
M is INTEGER. The number of rows of the input matrix A. M >= 0.
π N
N is INTEGER. The number of columns of the input matrix A. N >= 0.
π A
A is COMPLEX array, dimension (LDA,N).
On entry, the M-by-N matrix A.
On exit:
- if
JOBZ = 'O',Ais overwritten with the firstNcolumns ofU(the left singular vectors, stored columnwise) ifM >= N;Ais overwritten with the firstMrows ofV**H(the right singular vectors, stored rowwise) otherwise. - if
JOBZ .ne. 'O', the contents ofAare destroyed.
π«Ά heads up, bestie: that βcontents of A are destroyedβ line is not a drill. Itβs literally in the spec.
π LDA
LDA is INTEGER. The leading dimension of the array A. LDA >= max(1,M).
π S
S is REAL array, dimension (min(M,N)). The singular values of A, sorted so that S(i) >= S(i+1).
π U
U is COMPLEX array, dimension (LDU,UCOL).
UCOL = M if JOBZ = 'A' or JOBZ = 'O' and M < N;
UCOL = min(M,N) if JOBZ = 'S'.
- If
JOBZ = 'A'orJOBZ = 'O'andM < N,Ucontains theM-by-Munitary matrixU. - if
JOBZ = 'S',Ucontains the firstmin(M,N)columns ofU(the left singular vectors, stored columnwise). - if
JOBZ = 'O'andM >= N, orJOBZ = 'N',Uis not referenced.
π LDU
LDU is INTEGER. The leading dimension of the array U. LDU >= 1; if JOBZ = 'S' or 'A' or JOBZ = 'O' and M < N, LDU >= M.
π VT
VT is COMPLEX array, dimension (LDVT,N).
- If
JOBZ = 'A'orJOBZ = 'O'andM >= N,VTcontains theN-by-Nunitary matrixV**H. - if
JOBZ = 'S',VTcontains the firstmin(M,N)rows ofV**H(the right singular vectors, stored rowwise). - if
JOBZ = 'O'andM < N, orJOBZ = 'N',VTis not referenced.
π LDVT
LDVT is INTEGER. The leading dimension of the array VT. LDVT >= 1; if JOBZ = 'A' or JOBZ = 'O' and M >= N, LDVT >= N; if JOBZ = 'S', LDVT >= min(M,N).
π WORK
WORK is COMPLEX array, dimension (MAX(1,LWORK)). On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
π LWORK
LWORK is INTEGER. 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 in WORK(1), and no other work except argument checking is performed.
Let mx = max(M,N) and mn = 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, LWORK should generally be larger; a query is recommended.
π RWORK
RWORK is REAL array, dimension (MAX(1,LRWORK)).
Let mx = max(M,N) and mn = min(M,N).
If JOBZ = 'N', LRWORK >= 5*mn (LAPACK <= 3.6 needs 7*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 ).
π IWORK
IWORK is INTEGER array, dimension (8*min(M,N)).
π INFO
INFO is INTEGER.
< 0β ifINFO = -i, thei-th argument had an illegal value.= -4β ifAhad aNANentry.> 0β The updating process ofSBDSDCdid 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 219 of file cgesdd.f.
π Author π
Generated automatically by Doxygen for LAPACK from the source code.
π thatβs the whole page, bestie β this was SRC/cgesdd.f(3), from the Library Functions Manual, LAPACK Version 3.12.0. mwah π
β¨
π¦ where this page comes from
- arch rolling: lapack-doc 3.12.1-2 Β· custom
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms