DDRVBD(3)
DDRVBD(3) π β¨
Okay bestie, this page is from the Library Functions Manual, and it is so LAPACK testing coded. We are in DDRVBD(3) territory: SVD drivers, test ratios, and a whole lot of βbestie, trust the math.β π¦
πΈ NAME πΈ
/home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/TESTING/EIG/ddrvbd.f β that is literally the file, no extra lore. Slay. π
β¨ SYNOPSIS β¨
π Functions/Subroutines π
subroutine DDRVBDβ the icon itself, with the full crew of arguments in the code block below. π
subroutine DDRVBD (nsizes, mm, nn, ntypes, dotype, iseed, thresh, a,
lda, u, ldu, vt, ldvt, asav, usav, vtsav, s, ssav, e, work, lwork,
iwork, nout, info)
DDRVBD
π Function/Subroutine Documentation π
π¦ subroutine DDRVBD π¦
subroutine DDRVBD (integer nsizes, integer, dimension( * ) mm, integer,
dimension( * ) nn, integer ntypes, logical, dimension( * ) dotype,
integer, dimension( 4 ) iseed, double precision thresh, double
precision, dimension( lda, * ) a, integer lda, double precision,
dimension( ldu, * ) u, integer ldu, double precision, dimension( ldvt, *
) vt, integer ldvt, double precision, dimension( lda, * ) asav, double
precision, dimension( ldu, * ) usav, double precision, dimension( ldvt,
* ) vtsav, double precision, dimension( * ) s, double precision,
dimension( * ) ssav, double precision, dimension( * ) e, double
precision, dimension( * ) work, integer lwork, integer, dimension( * )
iwork, integer nout, integer info)
DDRVBD
π― Purpose π―
Okay so DDRVBD checks the singular value decomposition (SVD) drivers DGESVD, DGESDD, DGESVDQ, DGESVJ, DGEJSV, and DGESVDX. It is giving βquality control but make it couture.β π
Both DGESVD and DGESDD factor A = U diag(S) VT, where U and VT are orthogonal and diag(S) is diagonal with the entries of the array S on its diagonal. The entries of S are the singular values, nonnegative and stored in decreasing order. U and VT can be optionally not computed, overwritten on A, or computed partially. π«Ά
A is M by N. Let MNMIN = min( M, N ). S has dimension MNMIN. U can be M by M or M by MNMIN. VT can be N by N or MNMIN by N. Literally the shape lore. π
When DDRVBD is called, a number of matrix sizes (M's and N's) and a number of matrix types are specified. For each size (M,N) and each type of matrix, and for the minimal workspace as well as workspace adequate to permit blocking, an M x N matrix will be generated and used to test the SVD routines. For each matrix, A will be factored as A = U diag(S) VT and the following 12 tests computed: π₯
Test for DGESVD:
- (1)
| A - U diag(S) VT | / ( |A| max(M,N) ulp ) - (2)
| I - U'U | / ( M ulp ) - (3)
| I - VT VT' | / ( N ulp ) - (4)
ScontainsMNMINnonnegative values in decreasing order. (Return0if true,1/ULPif false.) - (5)
| U - Upartial | / ( M ulp )whereUpartialis a partially computedU. - (6)
| VT - VTpartial | / ( N ulp )whereVTpartialis a partially computedVT. - (7)
| S - Spartial | / ( MNMIN ulp |S| )whereSpartialis the vector of singular values from the partial SVD.
Test for DGESDD:
- (8)
| A - U diag(S) VT | / ( |A| max(M,N) ulp ) - (9)
| I - U'U | / ( M ulp ) - (10)
| I - VT VT' | / ( N ulp ) - (11)
ScontainsMNMINnonnegative values in decreasing order. (Return0if true,1/ULPif false.) - (12)
| U - Upartial | / ( M ulp )whereUpartialis a partially computedU. - (13)
| VT - VTpartial | / ( N ulp )whereVTpartialis a partially computedVT. - (14)
| S - Spartial | / ( MNMIN ulp |S| )whereSpartialis the vector of singular values from the partial SVD.
Test for DGESVDQ:
- (36)
| A - U diag(S) VT | / ( |A| max(M,N) ulp ) - (37)
| I - U'U | / ( M ulp ) - (38)
| I - VT VT' | / ( N ulp ) - (39)
ScontainsMNMINnonnegative values in decreasing order. (Return0if true,1/ULPif false.)
Test for DGESVJ:
- (15)
| A - U diag(S) VT | / ( |A| max(M,N) ulp ) - (16)
| I - U'U | / ( M ulp ) - (17)
| I - VT VT' | / ( N ulp ) - (18)
ScontainsMNMINnonnegative values in decreasing order. (Return0if true,1/ULPif false.)
Test for DGEJSV:
- (19)
| A - U diag(S) VT | / ( |A| max(M,N) ulp ) - (20)
| I - U'U | / ( M ulp ) - (21)
| I - VT VT' | / ( N ulp ) - (22)
ScontainsMNMINnonnegative values in decreasing order. (Return0if true,1/ULPif false.)
Test for DGESVDX( 'V', 'V', 'A' )/DGESVDX( 'N', 'N', 'A' ):
- (23)
| A - U diag(S) VT | / ( |A| max(M,N) ulp ) - (24)
| I - U'U | / ( M ulp ) - (25)
| I - VT VT' | / ( N ulp ) - (26)
ScontainsMNMINnonnegative values in decreasing order. (Return0if true,1/ULPif false.) - (27)
| U - Upartial | / ( M ulp )whereUpartialis a partially computedU. - (28)
| VT - VTpartial | / ( N ulp )whereVTpartialis a partially computedVT. - (29)
| S - Spartial | / ( MNMIN ulp |S| )whereSpartialis the vector of singular values from the partial SVD.
Test for DGESVDX( 'V', 'V', 'I' ):
- (30)
| U' A VT''' - diag(S) | / ( |A| max(M,N) ulp ) - (31)
| I - U'U | / ( M ulp ) - (32)
| I - VT VT' | / ( N ulp )
Test for DGESVDX( 'V', 'V', 'V' ):
- (33)
| U' A VT''' - diag(S) | / ( |A| max(M,N) ulp ) - (34)
| I - U'U | / ( M ulp ) - (35)
| I - VT VT' | / ( N ulp )
The sizes are specified by the arrays MM(1:NSIZES) and NN(1:NSIZES); the value of each element pair (MM(j),NN(j)) specifies one size. The types are specified by a logical array DOTYPE( 1:NTYPES ); if DOTYPE(j) is .TRUE., then matrix type will be generated. π§
Currently, the list of possible types is:
- The zero matrix.
- The identity matrix.
- A matrix of the form
U D V, whereUandVare orthogonal andDhas evenly spaced entries1, ..., ULPwith random signs on the diagonal. - Same as
(3), but multiplied by the underflow-threshold /ULP. - Same as
(3), but multiplied by the overflow-threshold *ULP.
π§ͺ Parameters π§ͺ
NSIZESβNSIZESisINTEGER. It is the number of matrix sizes(M,N)contained in the vectorsMMandNN. Count βem, bestie. β¨MMβMMisINTEGER array, dimension (NSIZES). The values of the matrix row dimensionM. πNNβNNisINTEGER array, dimension (NSIZES). The values of the matrix column dimensionN. π¦NTYPESβNTYPESisINTEGER. It is the number of elements inDOTYPE. If it is zero,DDRVBDdoes nothing. It must be at least zero. If it isMAXTYP+1andNSIZESis1, then an additional type,MAXTYP+1, is defined, which is to use whatever matrices are inAandB. This is only useful ifDOTYPE(1:MAXTYP)is.FALSE.andDOTYPE(MAXTYP+1)is.TRUE.. Keep that exact condition, iykyk. πDOTYPEβDOTYPEisLOGICAL array, dimension (NTYPES). IfDOTYPE(j)is.TRUE., then for each size(m,n), a matrix of typejwill be generated. IfNTYPESis smaller than the maximum number of types defined (PARAMETER MAXTYP), then typesNTYPES+1throughMAXTYPwill not be generated. IfNTYPESis larger thanMAXTYP,DOTYPE(MAXTYP+1)throughDOTYPE(NTYPES)will be ignored. π«ΆISEEDβISEEDisINTEGER array, dimension (4). On entry, it is the seed of the random number generator. The array elements should be between0and4095; if not, they will be reduced mod4096. Also,ISEED(4)must be odd. On exit,ISEEDis changed and can be used in the next call toDDRVBDto continue the same random number sequence. π₯THRESHβTHRESHisDOUBLE PRECISION. It is the threshold value for the test ratios. A result is included in the output file ifRESULT >= THRESH. The test ratios are scaled to beO(1), soTHRESHshould be a small multiple of1, e.g.,10or100. To have every test ratio printed, useTHRESH = 0. πAβAisDOUBLE PRECISION array, dimension (LDA,NMAX), whereNMAXis the maximum value ofNinNN. πLDAβLDAisINTEGER. It is the leading dimension of the arrayA.LDA >= max(1,MMAX), whereMMAXis the maximum value ofMinMM. πUβUisDOUBLE PRECISION array, dimension (LDU,MMAX). βLDUβLDUisINTEGER. It is the leading dimension of the arrayU.LDU >= max(1,MMAX). πVTβVTisDOUBLE PRECISION array, dimension (LDVT,NMAX). π¦LDVTβLDVTisINTEGER. It is the leading dimension of the arrayVT.LDVT >= max(1,NMAX). πASAVβASAVisDOUBLE PRECISION array, dimension (LDA,NMAX). πUSAVβUSAVisDOUBLE PRECISION array, dimension (LDU,MMAX). πΈVTSAVβVTSAVisDOUBLE PRECISION array, dimension (LDVT,NMAX). β¨SβSisDOUBLE PRECISION array, dimension (max(min(MM,NN))). πSSAVβSSAVisDOUBLE PRECISION array, dimension (max(min(MM,NN))). π§EβEisDOUBLE PRECISION array, dimension (max(min(MM,NN))). πWORKβWORKisDOUBLE PRECISION array, dimension (LWORK). πLWORKβ this is where part 1 cuts off; the original page ends atLWORKbefore giving the description. Part 2 has the rest. π«Ά
okay so the argument-list queen is still going, and honestly? we love a thorough icon. hereβs the rest, with every little detail intact:
LWORKβINTEGER. The number of entries inWORK. This must be at least:
max(3*MN+MX,5*MN-4)+2*MN**2
for all pairs pairs (MN,MX)=( min(MM(j),NN(j), max(MM(j),NN(j)) )
IWORKβINTEGERarray, dimension at least8*min(M,N).NOUTβINTEGER. The FORTRAN unit number for printing out error messages (e.g., if a routine returnsIINFOnot equal to0.)INFOβINTEGER. If0, then everything ran OK.-1:NSIZES < 0-2: SomeMM(j) < 0-3: SomeNN(j) < 0-4:NTYPES < 0-7:THRESH < 0-10:LDA < 1orLDA < MMAX, whereMMAXismax( MM(j) ).-12:LDU < 1orLDU < MMAX.-14:LDVT < 1orLDVT < NMAX, whereNMAXismax( NN(j) ).-21:LWORKtoo small.
If DLATMS, or DGESVD returns an error code, the absolute value of it is returned.
π Author
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
Definition at line 363 of file ddrvbd.f.
π€ Author
Generated automatically by Doxygen for LAPACK from the source code.
π okay thatβs the whole page, bestie! the footer is giving LAPACK Version 3.12.0 plus the source path /home/abui...IG/ddrvbd.f(3), with the date chillinβ in that same footer energy. byeeee! π
π¦ 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