SRC/dgesdd.f(3)
SRC/dgesdd.f(3) π β¨
Okay bestie, this is the SRC/dgesdd.f(3) Library Functions Manual page, and it is so DGESDD β the divide-and-conquer SVD main character. We are keeping every flag, dimension, formula, and exit code fr fr, just with better vibes. π«Ά
NAME
SRC/dgesdd.f
SYNOPSIS
Functions/Subroutines
subroutine dgesdd (jobz, m, n, a, lda, s, u, ldu, vt, ldvt, work, lwork,
iwork, info)
DGESDD
Function/Subroutine Documentation π
subroutine dgesdd (character jobz, integer m, integer n, double precision,
dimension( lda, * ) a, integer lda, double precision, dimension( * ) s,
double precision, dimension( ldu, * ) u, integer ldu, double precision,
dimension( ldvt, * ) vt, integer ldvt, double precision, dimension( * )
work, integer lwork, integer, dimension( * ) iwork, integer info)
DGESDD
Purpose πΈ
Bestie, DGESDD computes the singular value decomposition (SVD) of a real M-by-N matrix A, and optionally computes the left and right singular vectors. If singular vectors are desired, it uses a divide-and-conquer algorithm. Iconic behavior, no cap.
The SVD is written as:
A = U * SIGMA * 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 orthogonal matrix, and V is an N-by-N orthogonal 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**T, notV. Not me forgetting the transpose, bestie. π
Parameters π
JOBZβCHARACTER*1. Specifies options for computing all or part of the matrixU:= 'A': allMcolumns ofUand allNrows ofV**Tare returned in the arraysUandVT;= 'S': the firstmin(M,N)columns ofUand the firstmin(M,N)rows ofV**Tare returned in the arraysUandVT;= 'O': IfM >= N, the firstNcolumns ofUare overwritten on the arrayAand all rows ofV**Tare returned in the arrayVT; otherwise, all columns ofUare returned in the arrayUand the firstMrows ofV**Tare overwritten in the arrayA;= 'N': no columns ofUor rows ofV**Tare computed.
MβINTEGER. The number of rows of the input matrixA.M >= 0.NβINTEGER. The number of columns of the input matrixA.N >= 0.AβDOUBLE PRECISION array, dimension (LDA,N). On entry, the M-by-N matrixA. 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**T(the right singular vectors, stored rowwise) otherwise. - if
JOBZ .ne. 'O', the contents ofAare destroyed.
- if
LDAβINTEGER. The leading dimension of the arrayA.LDA >= max(1,M).SβDOUBLE PRECISION array, dimension (min(M,N)). The singular values ofA, sorted so thatS(i) >= S(i+1).UβDOUBLE PRECISION array, dimension (LDU,UCOL).UCOL = MifJOBZ = 'A'orJOBZ = 'O'andM < N;UCOL = min(M,N)ifJOBZ = 'S'. IfJOBZ = 'A'orJOBZ = 'O'andM < N,Ucontains the M-by-M orthogonal matrixU; ifJOBZ = 'S',Ucontains the firstmin(M,N)columns ofU(the left singular vectors, stored columnwise); ifJOBZ = 'O'andM >= N, orJOBZ = 'N',Uis not referenced.LDUβINTEGER. The leading dimension of the arrayU.LDU >= 1; ifJOBZ = 'S'or'A'orJOBZ = 'O'andM < N,LDU >= M.VTβDOUBLE PRECISION array, dimension (LDVT,N). IfJOBZ = 'A'orJOBZ = 'O'andM >= N,VTcontains the N-by-N orthogonal matrixV**T; ifJOBZ = 'S',VTcontains the firstmin(M,N)rows ofV**T(the right singular vectors, stored rowwise); ifJOBZ = 'O'andM < N, orJOBZ = 'N',VTis not referenced.LDVTβINTEGER. The leading dimension of the arrayVT.LDVT >= 1; ifJOBZ = 'A'orJOBZ = 'O'andM >= N,LDVT >= N; ifJOBZ = 'S',LDVT >= min(M,N).WORKβDOUBLE PRECISION array, dimension (MAX(1,LWORK)). On exit, ifINFO = 0,WORK(1)returns the optimalLWORK.LWORKβINTEGER. The dimension of the arrayWORK.LWORK >= 1. IfLWORK = -1, a workspace query is assumed. The optimal size for theWORKarray is calculated and stored inWORK(1), and no other work except argument checking is performed.
Let mx = max(M,N) and mn = min(M,N). If JOBZ = 'N', LWORK >= 3*mn + max( mx, 7*mn ). If JOBZ = 'O', LWORK >= 3*mn + max( mx, 5*mn*mn + 4*mn ). If JOBZ = 'S', LWORK >= 4*mn*mn + 7*mn. If JOBZ = 'A', LWORK >= 4*mn*mn + 6*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.
IWORKβINTEGER array, dimension (8*min(M,N)).INFOβINTEGER:< 0: ifINFO = -i, the i-th argument had an illegal value.= -4: ifAhad aNANentry.> 0:DBDSDCdid not converge, updating process failed.= 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 211 of file dgesdd.f.
Author (the auto-generated footnote) π
Generated automatically by Doxygen for LAPACK from the source code.
Catch you later, bestie π β this page is from LAPACK Version 3.12.0, source SRC/dgesdd.f(3), auto-generated by Doxygen for LAPACK from the source code. Periodt. β¨
π¦ 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