DDRGVX(3)
π NAME π
so this whole page is literally about the file /home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/TESTING/EIG/ddrgvx.f β and it lives in the Library Functions Manual, bestie, that's the manual name, putting it here so it's not lost π
β¨ SYNOPSIS β¨
π¦ Functions/Subroutines π¦
subroutine DDRGVX (nsize, thresh, nin, nout, a, lda, b, ai, bi, alphar,
alphai, beta, vl, vr, ilo, ihi, lscale, rscale, s, dtru, dif,
diftru, work, lwork, iwork, liwork, result, bwork, info)
DDRGVX
π Function/Subroutine Documentation π
πΈ subroutine DDRGVX πΈ
okay so here's the full signature, every single type and dimension, no cap:
subroutine DDRGVX (integer nsize, double precision thresh, integer nin,
integer nout, double precision, dimension( lda, * ) a, integer lda,
double precision, dimension( lda, * ) b, double precision, dimension(
lda, * ) ai, double precision, dimension( lda, * ) bi, double precision,
dimension( * ) alphar, double precision, dimension( * ) alphai, double
precision, dimension( * ) beta, double precision, dimension( lda, * )
vl, double precision, dimension( lda, * ) vr, integer ilo, integer ihi,
double precision, dimension( * ) lscale, double precision, dimension( *
) rscale, double precision, dimension( * ) s, double precision,
dimension( * ) dtru, double precision, dimension( * ) dif, double
precision, dimension( * ) diftru, double precision, dimension( * ) work,
integer lwork, integer, dimension( * ) iwork, integer liwork, double
precision, dimension( 4 ) result, logical, dimension( * ) bwork, integer
info)
DDRGVX
π Purpose π
okay so the whole point of DDRGVX is that it checks the nonsymmetric generalized eigenvalue problem expert driver DGGEVX. it's a tester, she's the vibe check π
what DGGEVX actually does: computes the generalized eigenvalues, (optionally) the left and/or right eigenvectors, (optionally) computes a balancing transformation to improve the conditioning, and (optionally) reciprocal condition numbers for the eigenvalues and eigenvectors. a whole multitasking icon β¨
when DDRGVX is called with NSIZE > 0, two types of test matrix pairs are generated by the subroutine DLATM6 and test the driver DGGEVX. the test matrices have the known exact condition numbers for eigenvalues. for the condition numbers of the eigenvectors corresponding the first and last eigenvalues are also know ``exactly'' (see DLATM6).
for each matrix pair, the following tests will be performed and compared with the threshold THRESH.
- max over all left eigenvalue/-vector pairs (beta/alpha,l) of
| l**H * (beta A - alpha B) | / ( ulp max( |beta A|, |alpha B| ) )
where l**H is the conjugate transpose of l. conjugate transpose representation, we love to see it π«Ά
- max over all right eigenvalue/-vector pairs (beta/alpha,r) of
| (beta A - alpha B) r | / ( ulp max( |beta A|, |alpha B| ) )
- the condition number
S(i)of eigenvalues computed byDGGEVXdiffers less than a factorTHRESHfrom the exactS(i)(seeDLATM6). DIF(i)computed byDTGSNAdiffers less than a factor10*THRESHfrom the exact value (for the 1st and 5th vectors only).
π Test Matrices π
Two kinds of test matrix pairs
(A, B) = inverse(YH) * (Da, Db) * inverse(X)
are used in the tests:
1: Da = 1+a 0 0 0 0 Db = 1 0 0 0 0
0 2+a 0 0 0 0 1 0 0 0
0 0 3+a 0 0 0 0 1 0 0
0 0 0 4+a 0 0 0 0 1 0
0 0 0 0 5+a , 0 0 0 0 1 , and
2: Da = 1 -1 0 0 0 Db = 1 0 0 0 0
1 1 0 0 0 0 1 0 0 0
0 0 1 0 0 0 0 1 0 0
0 0 0 1+a 1+b 0 0 0 1 0
0 0 0 -1-b 1+a , 0 0 0 0 1 .
in both cases the same inverse(YH) and inverse(X) are used to compute (A, B), giving the exact eigenvectors to (A,B) as (YH, X):
YH: = 1 0 -y y -y X = 1 0 -x -x x
0 1 -y y -y 0 1 x -x -x
0 0 1 0 0 0 0 1 0 0
0 0 0 1 0 0 0 0 1 0
0 0 0 0 1, 0 0 0 0 1 , where
a, b, x and y will have all values independently of each other from { sqrt(sqrt(ULP)), 0.1, 1, 10, 1/sqrt(sqrt(ULP)) }. those are the exact characters, do not touch them π
π Parameters π
NSIZEβNSIZEisINTEGER. The number of sizes of matrices to use.NSIZEmust be at least zero. If it is zero, no randomly generated matrices are tested, but any test matrices read fromNINwill be tested. zero is a valid lifestyle choice πTHRESHβTHRESHisDOUBLE PRECISION. A test will count as if the , computed as described above, exceedsTHRESH. (ngl the original page literally has gaps right there, not me, I'm just the messenger π). Note that the error is scaled to be O(1), soTHRESHshould be a reasonably small multiple of 1, e.g.,10or100. In particular, it should not depend on the precision (single vs. double) or the size of the matrix. It must be at least zero.NINβNINisINTEGER. The FORTRAN unit number for reading in the data file of problems to solve. πNOUTβNOUTisINTEGER. The FORTRAN unit number for printing out error messages (e.g., if a routine returnsIINFOnot equal to 0.)AβAisDOUBLE PRECISIONarray, dimension(LDA, NSIZE). Used to hold the matrix whose eigenvalues are to be computed. On exit,Acontains the last matrix actually used. she stays πLDAβLDAisINTEGER. The leading dimension ofA,B,AI,BI,Ao, andBo. It must be at least 1 and at leastNSIZE.BβBisDOUBLE PRECISIONarray, dimension(LDA, NSIZE). Used to hold the matrix whose eigenvalues are to be computed. On exit,Bcontains the last matrix actually used.AIβAIisDOUBLE PRECISIONarray, dimension(LDA, NSIZE). Copy ofA, modified byDGGEVX.BIβBIisDOUBLE PRECISIONarray, dimension(LDA, NSIZE). Copy ofB, modified byDGGEVX.ALPHARβALPHARisDOUBLE PRECISIONarray, dimension(NSIZE).ALPHAIβALPHAIisDOUBLE PRECISIONarray, dimension(NSIZE).BETAβBETAisDOUBLE PRECISIONarray, dimension(NSIZE). On exit,(ALPHAR + ALPHAI*i)/BETAare the eigenvalues. the math is mathing β¨VLβVLisDOUBLE PRECISIONarray, dimension(LDA, NSIZE).VLholds the left eigenvectors computed byDGGEVX.VRβVRisDOUBLE PRECISIONarray, dimension(LDA, NSIZE).VRholds the right eigenvectors computed byDGGEVX.ILOβILOisINTEGER.IHIβIHIisINTEGER.LSCALEβLSCALEisDOUBLE PRECISIONarray, dimension(N).RSCALEβRSCALEisDOUBLE PRECISIONarray, dimension(N).SβSisDOUBLE PRECISIONarray, dimension(N).DTRUβDTRUisDOUBLE PRECISIONarray, dimension(N).DIFβDIFisDOUBLE PRECISIONarray, dimension(N).DIFTRUβDIFTRUisDOUBLE PRECISIONarray, dimension(N).WORKβWORKisDOUBLE PRECISIONarray, dimension(LWORK).LWORKβLWORKisINTEGER. Leading dimension ofWORK.LWORK >= 2*N*N+12*N+16. write that down fr fr πIWORKβIWORKisINTEGERarray, dimension(LIWORK).LIWORKβLIWORKisINTEGER. Leading dimension ofIWORK. Must be at leastN+6.RESULTβRESULTisDOUBLE PRECISIONarray, dimension(4).BWORKβBWORKisLOGICALarray, dimension(N).INFOβINFOisINTEGER. exit status time, pay attention:= 0: successful exit π< 0: ifINFO = -i, the i-th argument had an illegal value.> 0: A routine returned an error code.
lowkey obsessed with INFO having three whole moods. main character exit status energy π
π Author π
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
Definition at line 296 of file ddrgvx.f.
πΈ Author πΈ
Generated automatically by Doxygen for LAPACK from the source code. (yes the author section happens twice, that's how the page is built, no notes π)
okay that's the whole page bestie, you ate that π
π«Ά this was LAPACK, Version 3.12.0, signed off from /home/abui...IG/ddrgvx.f(3) β go forth and test those generalized eigenvalue problems, mwah ππ
π¦ 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