SRC/zgesdd.f(3)
π SRC/zgesdd.f π
Okay bestie, welcome to the SRC/zgesdd.f page from the Library Functions Manual. Itβs giving linear algebra main character energy, and weβre gonna get through every last detail together. π«Άβ¨
πΈ NAME πΈ
SRC/zgesdd.f β thatβs it, thatβs the name. This page lives in the Library Functions Manual. π
π SYNOPSIS π
β¨ Functions/Subroutines β¨
subroutine zgesdd (jobz, m, n, a, lda, s, u, ldu, vt, ldvt, work, lwork,
rwork, iwork, info)
ZGESDD
π¦ Function/Subroutine Documentation π¦
π ZGESDD π
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 π₯
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. ππ«Ά
π Parameters π
JOBZβJOBZ is CHARACTER*1. Specifies options for computing all or part of the matrix U:= 'A'β all M columns of U and all N rows of V**H are returned in the arrays U and VT;= 'S'β the firstmin(M,N)columns of U and the firstmin(M,N)rows of V**H are 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 of VH are returned in the array VT; otherwise, all columns of U are returned in the array U and the first M rows of VH are overwritten in the array A;= 'N'β no columns of U or rows of V**H are 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*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 of V**H (the right singular vectors, stored rowwise) otherwise. - if
JOBZ .ne. 'O', the contents of A are destroyed.
- if
LDAβLDA is INTEGER. The leading dimension of the array A.LDA >= max(1,M).SβS is DOUBLE PRECISION array, dimension (min(M,N)). The singular values of A, sorted so thatS(i) >= S(i+1).UβU is COMPLEX*16 array, dimension (LDU,UCOL).UCOL = MifJOBZ = 'A'orJOBZ = 'O'andM < N;UCOL = min(M,N)ifJOBZ = 'S'. IfJOBZ = 'A'orJOBZ = 'O'andM < N, U contains the M-by-M unitary matrix U; ifJOBZ = 'S', U contains the firstmin(M,N)columns of U (the left singular vectors, stored columnwise); ifJOBZ = 'O'andM >= N, orJOBZ = 'N', U is not referenced.LDUβLDU is INTEGER. The leading dimension of the array U.LDU >= 1; ifJOBZ = 'S'or'A'orJOBZ = 'O'andM < N,LDU >= M.VTβVT is COMPLEX*16 array, dimension (LDVT,N). IfJOBZ = 'A'orJOBZ = 'O'andM >= N, VT contains the N-by-N unitary matrix VH; ifJOBZ = 'S', VT contains the firstmin(M,N)rows of VH (the right singular vectors, stored rowwise); ifJOBZ = 'O'andM < N, orJOBZ = 'N', VT is not referenced.LDVTβLDVT is INTEGER. The leading dimension of the array VT.LDVT >= 1; ifJOBZ = 'A'orJOBZ = 'O'andM >= N,LDVT >= N; ifJOBZ = 'S',LDVT >= min(M,N).WORKβWORK is COMPLEX*16 array, dimension (MAX(1,LWORK)). On exit, ifINFO = 0,WORK(1)returns the optimalLWORK.LWORKβLWORK is INTEGER. The dimension of the array WORK.LWORK >= 1. IfLWORK = -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. Letmx = 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βRWORK is DOUBLE PRECISION array, dimension (MAX(1,LRWORK)). Letmx = max(M,N)andmn = 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 ).
- If
IWORKβIWORK is INTEGER array, dimension (8*min(M,N)).INFOβINFO is INTEGER.< 0: ifINFO = -i, the i-th argument had an illegal value.= -4: if A had a NAN entry.> 0: The updating process of DBDSDC did 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 zgesdd.f.
π§ Author π§
Generated automatically by Doxygen for LAPACK from the source code.
Okay bestie, thatβs the whole page π«Ά Itβs SRC/zgesdd.f(3) from LAPACK Version 3.12.0, auto-generated by Doxygen for LAPACK from the source code, and the footer doesnβt show a date β so thatβs the final tea π
β¨
π¦ 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