TESTING/EIG/ddrgev.f(3)
π Bestie's Guide to TESTING/EIG/ddrgev.f(3) π
okay so this is the Library Functions Manual page for TESTING/EIG/ddrgev.f(3), and we're about to make DDRGEV make sense. no cap, it's a whole situation, but we got this. π
β¨ NAME β¨
TESTING/EIG/ddrgev.f β that's the file, bestie. the whole icon. π«Ά
πΈ SYNOPSIS πΈ
Functions/Subroutines
subroutine ddrgev (nsizes, nn, ntypes, dotype, iseed, thresh, nounit, a,
lda, b, s, t, q, ldq, z, qe, ldqe, alphar, alphai, beta, alphr1,
alphi1, beta1, work, lwork, result, info)
DDRGEV
π Function/Subroutine Documentation π
subroutine ddrgev (integer nsizes, integer, dimension( * ) nn, integer
ntypes, logical, dimension( * ) dotype, integer, dimension( 4 ) iseed,
double precision thresh, integer nounit, double precision, dimension(
lda, * ) a, integer lda, double precision, dimension( lda, * ) b, double
precision, dimension( lda, * ) s, double precision, dimension( lda, * )
t, double precision, dimension( ldq, * ) q, integer ldq, double
precision, dimension( ldq, * ) z, double precision, dimension( ldqe, * )
qe, integer ldqe, double precision, dimension( * ) alphar, double
precision, dimension( * ) alphai, double precision, dimension( * ) beta,
double precision, dimension( * ) alphr1, double precision, dimension( *
) alphi1, double precision, dimension( * ) beta1, double precision,
dimension( * ) work, integer lwork, double precision, dimension( * )
result, integer info)
DDRGEV
π¦ Purpose π¦
DDRGEV checks the nonsymmetric generalized eigenvalue problem driver routine DGGEV. slay. π
DGGEV computes, for a pair of n-by-n nonsymmetric matrices (A,B), the generalized eigenvalues and, optionally, the left and right eigenvectors. iconic behavior. β¨
A generalized eigenvalue for a pair of matrices (A,B) is a scalar w or a ratio alpha/beta = w, such that A - w*B is singular. It is usually represented as the pair (alpha,beta), because there is a reasonable interpretation for beta=0, and even for both being zero. iykyk. π«Ά
A right generalized eigenvector corresponding to a generalized eigenvalue w for a pair of matrices (A,B) is a vector r such that (A - wB) * r = 0. A left generalized eigenvector is a vector l such that l**H * (A - wB) = 0, where l**H is the conjugate-transpose of l. literally the whole vibe. πΈ
When DDRGEV is called, a number of matrix () and a number of matrix types are specified. For each size () and each type of matrix, a pair of matrices (A, B) will be generated and used for testing. For each matrix pair, the following tests will be performed and compared with the threshold THRESH. π
Results from DGGEV:
Test (1): max over all left eigenvalue/-vector pairs (alpha/beta,l) of
| VL**H * (beta A - alpha B) |/( ulp max(|beta A|, |alpha B|) )
where VL**H is the conjugate-transpose of VL.
Test (2): | |VL(i)| - 1 | / ulp and whether largest component real
VL(i) denotes the i-th column of VL.
Test (3): max over all left eigenvalue/-vector pairs (alpha/beta,r) of
| (beta A - alpha B) * VR | / ( ulp max(|beta A|, |alpha B|) )
Test (4): | |VR(i)| - 1 | / ulp and whether largest component real
VR(i) denotes the i-th column of VR.
Test (5): W(full) = W(partial)
W(full) denotes the eigenvalues computed when both l and r are also computed, and W(partial) denotes the eigenvalues computed when only W, only W and r, or only W and l are computed.
Test (6): VL(full) = VL(partial)
VL(full) denotes the left eigenvectors computed when both l and r are computed, and VL(partial) denotes the result when only l is computed.
Test (7): VR(full) = VR(partial)
VR(full) denotes the right eigenvectors computed when both l and r are also computed, and VR(partial) denotes the result when only l is computed.
π Test Matrices π
The sizes of the test matrices are specified by an array NN(1:NSIZES); the value of each element NN(j) specifies one size. The types are specified by a logical array DOTYPE( 1:NTYPES ); if DOTYPE(j) is .TRUE., then matrix type j will be generated. Currently, the list of possible types is:
- Type (1):
( 0, 0 )β a pair of zero matrices. π - Type (2):
( I, 0 )β an identity and a zero matrix. - Type (3):
( 0, I )β an identity and a zero matrix. - Type (4):
( I, I )β a pair of identity matrices. - Type (5):
( J^t, J^t )β a pair of transposed Jordan blocks. - Type (6):
( X, Y )β where the whole setup is:
t ( I 0 )
(6) ( X, Y ) where X = ( J 0 ) and Y = ( t )
( 0 I ) ( 0 J )
and I is a k x k identity and J a (k+1)x(k+1)
Jordan block; k=(N-1)/2
- Type (7):
( D, I )β whereDisdiag( 0, 1,..., N-1 )(a diagonal matrix with those diagonal entries.) - Type (8):
( I, D ) - Type (9):
( big*D, small*I )β where is near overflow andsmall=1/big - Type (10):
( small*D, big*I ) - Type (11):
( big*I, small*D ) - Type (12):
( small*I, big*D ) - Type (13):
( big*D, big*I ) - Type (14):
( small*D, small*I ) - Type (15):
( D1, D2 )β whereD1isdiag( 0, 0, 1, ..., N-3, 0 )andD2isdiag( 0, N-3, N-4,..., 1, 0, 0 ) - Type (16):
Q ( J^t, J^t ) Zβ whereQandZare random orthogonal matrices. - Type (17):
Q ( T1, T2 ) Zβ whereT1andT2are upper triangular matrices with random O(1) entries above the diagonal and diagonal entriesdiag(T1) = ( 0, 0, 1, ..., N-3, 0 )anddiag(T2) = ( 0, N-3, N-4,..., 1, 0, 0 ) - Type (18):
Q ( T1, T2 ) Zβdiag(T1) = ( 0, 0, 1, 1, s, ..., s, 0 ),diag(T2) = ( 0, 1, 0, 1,..., 1, 0 ), ands = machine precision. - Type (19):
Q ( T1, T2 ) Zβdiag(T1)=( 0,0,1,1, 1-d, ..., 1-(N-5)*d=s, 0 ),diag(T2) = ( 0, 1, 0, 1, ..., 1, 0 ) - Type (20):
N-5
(20) Q ( T1, T2 ) Z diag(T1)=( 0, 0, 1, 1, a, ..., a =s, 0 )
diag(T2) = ( 0, 1, 0, 1, ..., 1, 0, 0 )
- Type (21):
Q ( T1, T2 ) Zβdiag(T1)=( 0, 0, 1, r1, r2, ..., r(N-4), 0 ),diag(T2) = ( 0, 1, 0, 1, ..., 1, 0, 0 ), wherer1,..., r(N-4)are random. - Type (22):
Q ( big*T1, small*T2 ) Zβdiag(T1) = ( 0, 0, 1, ..., N-3, 0 ),diag(T2) = ( 0, 1, ..., 1, 0, 0 ) - Type (23):
Q ( small*T1, big*T2 ) Zβdiag(T1) = ( 0, 0, 1, ..., N-3, 0 ),diag(T2) = ( 0, 1, ..., 1, 0, 0 ) - Type (24):
Q ( small*T1, small*T2 ) Zβdiag(T1) = ( 0, 0, 1, ..., N-3, 0 ),diag(T2) = ( 0, 1, ..., 1, 0, 0 ) - Type (25):
Q ( big*T1, big*T2 ) Zβdiag(T1) = ( 0, 0, 1, ..., N-3, 0 ),diag(T2) = ( 0, 1, ..., 1, 0, 0 ) - Type (26):
Q ( T1, T2 ) Zβ whereT1andT2are random upper-triangular matrices.
π Parameters π
NSIZESβ INTEGER. The number of sizes of matrices to use. If it is zero,DDRGESdoes nothing.NSIZES >= 0. okay so yes, it saysDDRGESthere. periodt. π«ΆNNβ INTEGER array, dimension(NSIZES). An array containing the sizes to be used for the matrices. Zero values will be skipped.NN >= 0.NTYPESβ INTEGER. The number of elements inDOTYPE. If it is zero,DDRGESdoes nothing. It must be at least zero. If it isMAXTYP+1andNSIZESis 1, then an additional type,MAXTYP+1is defined, which is to use whatever matrix is inA. This is only useful ifDOTYPE(1:MAXTYP)is.FALSE.andDOTYPE(MAXTYP+1)is.TRUE.. πDOTYPEβ LOGICAL array, dimension(NTYPES). IfDOTYPE(j)is.TRUE., then for each size inNNa matrix of that size and 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β INTEGER array, dimension(4). On entryISEEDspecifies the seed of the random number generator. The array elements should be between 0 and 4095; if not they will be reduced mod 4096. Also,ISEED(4)must be odd. The random number generator uses a linear congruential sequence limited to small integers, and so should produce machine independent random numbers. The values ofISEEDare changed on exit, and can be used in the next call toDDRGESto continue the same random number sequence. πTHRESHβ DOUBLE PRECISION. A test will count as a failure if the computed error, computed as described above, exceedsTHRESH. Note that the error is scaled to be O(1), soTHRESHshould be a reasonably small multiple of 1, e.g., 10 or 100. In particular, it should not depend on the precision (single vs. double) or the size of the matrix. It must be at least zero. π₯NOUNITβ INTEGER. The FORTRAN unit number for printing out error messages (e.g., if a routine returnsIERRnot equal to 0.)Aβ the part 1 page stops right after the parameter nameA, so its full description is in the next part. π«Ά
Okay so weβre still deep in the parameter list, and every single line here matters β no skimming, bestie. π
Aβ aDOUBLE PRECISIONarray,dimension(LDA, max(NN)). It holds the originalAmatrix. Itβs used as input only ifNTYPES=MAXTYP+1,DOTYPE(1:MAXTYP)=.FALSE., andDOTYPE(MAXTYP+1)=.TRUE.β those exact conditions, periodt.LDAβINTEGER. The leading dimension ofA,B,S, andT. It must be at least1and at leastmax( NN ). Respect the minimums, bestie. β¨Bβ aDOUBLE PRECISIONarray,dimension(LDA, max(NN)). It holds the originalBmatrix. Just likeA, itβs used as input only ifNTYPES=MAXTYP+1,DOTYPE(1:MAXTYP)=.FALSE., andDOTYPE(MAXTYP+1)=.TRUE.Sβ aDOUBLE PRECISIONarray,dimension (LDA, max(NN)). The Schur form matrix computed fromAbyDGGES. On exit,Scontains the Schur form matrix corresponding to the matrix inA. Slay. πTβ aDOUBLE PRECISIONarray,dimension (LDA, max(NN)). The upper triangular matrix computed fromBbyDGGES. Iconic triangular behavior. πQβ aDOUBLE PRECISIONarray,dimension (LDQ, max(NN)). The (left) eigenvectors matrix computed byDGGEV. Left-eigenvector main character energy. πLDQβINTEGER. The leading dimension ofQandZ. It must be at least1and at leastmax( NN ). Do not play with it. πZβ aDOUBLE PRECISIONarray,dimension( LDQ, max(NN) ). The (right) orthogonal matrix computed byDGGES. Right-orthogonal and ready. π¦QEβ aDOUBLE PRECISIONarray,dimension( LDQ, max(NN) ).QEholds the computed right or left eigenvectors. Itβs giving βeigenvectors went here.β πΈLDQEβINTEGER. The leading dimension ofQE.LDQE >= max(1,max(NN)). Thatβs the rule, no cap. π«ΆALPHARβ aDOUBLE PRECISIONarray,dimension (max(NN)). One-third of the generalized eigenvalue real/imag/beta trio. πALPHAIβ aDOUBLE PRECISIONarray,dimension (max(NN)). The imaginary part bestie of the trio. πBETAβ aDOUBLE PRECISIONarray,dimension (max(NN)). The generalized eigenvalues of(A,B)computed byDGGEV.( ALPHAR(k)+ALPHAI(k)*i ) / BETA(k)is the k-th generalized eigenvalue ofAandB. Math ate. π₯ALPHR1β aDOUBLE PRECISIONarray,dimension (max(NN)). The backup-ish real-part array. βALPHI1β aDOUBLE PRECISIONarray,dimension (max(NN)). The backup-ish imaginary-part array. β¨BETA1β aDOUBLE PRECISIONarray,dimension (max(NN)). LikeALPHAR,ALPHAI,BETA, these arrays contain the eigenvalues ofAandB, but those computed whenDGGEVonly computes a partial eigendecomposition, i.e. not the eigenvalues and left and right eigenvectors. Important distinction, iykyk. πWORKβ aDOUBLE PRECISIONarray,dimension (LWORK). Workspace, obviously. π§LWORKβINTEGER. The number of entries inWORK.LWORK >= MAX( 8*N, N*(N+1) ). Respect the workspace math, bestie β itβs not decorative. πRESULTβ aDOUBLE PRECISIONarray,dimension (2). The values computed by the tests described above. The values are currently limited to1/ulp, to avoid overflow. Safety first, overflow never. πINFOβINTEGER.= 0: successful exit.< 0: ifINFO = -i, the i-th argument had an illegal value.> 0: a routine returned an error code.INFOis the absolute value of theINFOvalue returned. Read the error code, donβt ignore it. π
π Author π
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
Definition at line 404 of file ddrgev.f.
π Author (yes, again, bestie) π
Generated automatically by Doxygen for LAPACK from the source code.
Mwah π β thatβs the whole page, bestie: LAPACK Version 3.12.0, TESTING/EIG/ddrgev.f(3), signinβ off with maximum documentation energy. 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