TESTING/EIG/cdrgsx.f(3)
π
TESTING/EIG/cdrgsx.f π
okay bestie, this is the TESTING/EIG/cdrgsx.f page from the Library Functions Manual, and itβs giving very βexpert driver test routineβ energy. no cap. π
β¨ NAME β¨
TESTING/EIG/cdrgsx.f π«Ά
π¦ SYNOPSIS π¦
Functions/Subroutines
hereβs the whole cast, bestie:
subroutine cdrgsx (nsize, ncmax, thresh, nin, nout, a, lda, b, ai, bi,
z, q, alpha, beta, c, ldc, s, work, lwork, rwork, iwork, liwork,
bwork, info)
CDRGSX
π Function/Subroutine Documentation π
subroutine cdrgsx (integer nsize, integer ncmax, real thresh, integer nin,
integer nout, complex, dimension( lda, * ) a, integer lda, complex,
dimension( lda, * ) b, complex, dimension( lda, * ) ai, complex,
dimension( lda, * ) bi, complex, dimension( lda, * ) z, complex,
dimension( lda, * ) q, complex, dimension( * ) alpha, complex,
dimension( * ) beta, complex, dimension( ldc, * ) c, integer ldc, real,
dimension( * ) s, complex, dimension( * ) work, integer lwork, real,
dimension( * ) rwork, integer, dimension( * ) iwork, integer liwork,
logical, dimension( * ) bwork, integer info)
CDRGSX
π Purpose π
CDRGSX is the routine that checks the nonsymmetric generalized eigenvalue (Schur form) problem expert driver CGGESX. iconic behavior, honestly. β¨
CGGES factors A and B as Q*S*Z' and Q*T*Z', where ' means conjugate transpose, S and T are upper triangular (i.e., in generalized Schur form), and Q and Z are unitary. It also computes the generalized eigenvalues (alpha(j),beta(j)), j=1,...,n. Thus, w(j) = alpha(j)/beta(j) is a root of the characteristic equation:
det( A - w(j) B ) = 0
Optionally it also reorders the eigenvalues so that a selected cluster of eigenvalues appears in the leading diagonal block of the Schur forms; computes a reciprocal condition number for the average of the selected eigenvalues; and computes a reciprocal condition number for the right and left deflating subspaces corresponding to the selected eigenvalues. so many jobs, but she ate. π
When CDRGSX is called with NSIZE > 0, five (5) types of built-in matrix pairs are used to test the routine CGGESX.
When CDRGSX is called with NSIZE = 0, it reads in test matrix data to test CGGESX. (need more details on what kind of read-in data are needed). π
For each matrix pair, the following tests will be performed and compared with the threshold THRESH except for the tests (7) and (9):
| A - Q S Z' | / ( |A| n ulp )| B - Q T Z' | / ( |B| n ulp )| I - QQ' | / ( n ulp )| I - ZZ' | / ( n ulp )- if
Ais in Schur form (i.e. triangular form) - maximum over
jofD(j)where:
|alpha(j) - S(j,j)| |beta(j) - T(j,j)|
D(j) = ------------------------ + -----------------------
max(|alpha(j)|,|S(j,j)|) max(|beta(j)|,|T(j,j)|)
- if sorting worked and
SDIMis the number of eigenvalues which were selected. - the estimated value
DIFdoes not differ from the true values ofDifuandDiflmore than a factor10*THRESH. If the estimateDIFequals zero the corresponding true values ofDifuandDiflshould be less thanEPS*norm(A, B). If the true value ofDifuandDiflequal zero, the estimateDIFshould be less thanEPS*norm(A, B). - If
INFO = N+3is returned byCGGESX, the reordering and we check thatDIF = PL = PR = 0and that the true value ofDifuandDiflis< EPS*norm(A, B). We count the events whenINFO=N+3. (the original sentence trails off there, bestie β Iβm not inventing words, fr fr) - the estimated value
PLdoes not differ from the true value ofPLTRUmore than a factorTHRESH. If the estimatePLequals zero the corresponding true value ofPLTRUshould be less thanEPS*norm(A, B). If the true value ofPLTRUequal zero, the estimatePLshould be less thanEPS*norm(A, B).
For read-in test matrices, the same tests are run except that the exact value for DIF (and PL) is input data. Additionally, there is one more test run for read-in test matrices:
- the estimated value
PLdoes not differ from the true value ofPLTRUmore than a factorTHRESH. If the estimatePLequals zero the corresponding true value ofPLTRUshould be less thanEPS*norm(A, B). If the true value ofPLTRUequal zero, the estimatePLshould be less thanEPS*norm(A, B). yes, she really said that twice in the source vibe β keeping all the details, always π
bestie, note that for the built-in tests, a total of10*NSIZE*(NSIZE-1)matrix pairs are generated and tested.NSIZEshould be kept small. π
SVD (routine CGESVD) is used for computing the true value of DIF_u and DIF_l when testing the built-in test problems.
πΈ Built-in Test Matrices πΈ
All built-in test matrices are the 2 by 2 block of triangular matrices:
A = [ A11 A12 ] and B = [ B11 B12 ]
[ A22 ] [ B22 ]
where for different type of A11 and A22 are given as the following. A12 and B12 are chosen so that the generalized Sylvester equation:
A11*R - L*A22 = -A12
B11*R - L*B22 = -B12
have prescribed solution R and L.
Type 1: A11 = J_m(1,-1) and A_22 = J_k(1-a,1). B11 = I_m, B22 = I_k where J_k(a,b) is the k-by-k Jordan block with a'' on diagonal and b'' on superdiagonal.
Type 2: A11 = (a_ij) = ( 2(.5-sin(i)) ) and B11 = (b_ij) = ( 2(.5-sin(ij)) ) for i=1,...,m, j=i,...,m A22 = (a_ij) = ( 2(.5-sin(i+j)) ) and B22 = (b_ij) = ( 2(.5-sin(ij)) ) for i=m+1,...,k, j=i,...,k
Type 3: A11, A22 and B11, B22 are chosen as for Type 2, but each second diagonal block in A_11 and each third diagonal block in A_22 are made as 2 by 2 blocks.
Type 4: A11 = ( 20(.5 - sin(ij)) ) and B22 = ( 2(.5 - sin(i+j)) ) for i=1,...,m, j=1,...,m and A22 = ( 20(.5 - sin(i+j)) ) and B22 = ( 2(.5 - sin(ij)) ) for i=m+1,...,k, j=m+1,...,k
Type 5: (A,B) and have potentially close or common eigenvalues and very large departure from block diagonality A_11 is chosen as the m x m leading submatrix of A_1:
| 1 b |
| -b 1 |
| 1+d b |
| -b 1+d |
A_1 = | d 1 |
| -1 d |
| -d 1 |
| -1 -d |
| 1 |
and A_22 is chosen as the k x k leading submatrix of A_2:
| -1 b |
| -b -1 |
| 1-d b |
| -b 1-d |
A_2 = | d 1+b |
| -1-b d |
| -d 1+b |
| -1+b -d |
| 1-d |
and matrix B are chosen as identity matrices (see SLATM5). π¦
π Parameters π
NSIZE
NSIZE is INTEGER. The maximum size of the matrices to use. NSIZE >= 0. If NSIZE = 0, no built-in tests matrices are used, but read-in test matrices are used to test SGGESX. (yes, it says SGGESX right there in the parameter β keeping it exactly, no editing bestie)
NCMAX
NCMAX is INTEGER. Maximum allowable NMAX for generating Kroneker matrix in call to CLAKF2.
THRESH
THRESH is REAL. A test will count as [blank in the original, bestie] if the [also blank in the original], computed as described above, exceeds THRESH. Note that the error is scaled to be O(1), so THRESH should 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. THRESH >= 0.
NIN
NIN is INTEGER. The FORTRAN unit number for reading in the data file of problems to solve.
NOUT
NOUT is INTEGER. The FORTRAN unit number for printing out error messages (e.g., if a routine returns INFO not equal to 0.)
A
A is COMPLEX array, dimension (LDA, NSIZE). Used to store the matrix whose eigenvalues are to be computed. On exit, A contains the last matrix actually used. π
LDA
LDA is INTEGER. The leading dimension of A, B, AI, BI, Z and Q, LDA >= max( 1, NSIZE ). For the read-in test, LDA >= max( 1, N ), N is the size of the test matrices.
B
B is COMPLEX array, dimension (LDA, NSIZE). Used to store the matrix whose eigenvalues are to be computed. On exit, B contains the last matrix actually used.
AI
AI is COMPLEX array, dimension (LDA, NSIZE). Copy of A, modified by CGGESX.
BI
BI is COMPLEX array, dimension (LDA, NSIZE). Copy of B, modified by CGGESX.
Z
Z is COMPLEX array, dimension (LDA, NSIZE). Z holds the left Schur vectors computed by CGGESX.
Q
Q is COMPLEX array, dimension (LDA, NSIZE). Q holds the right Schur vectors computed by CGGESX.
ALPHA
ALPHA is COMPLEX array, dimension (NSIZE)
BETA
BETA is COMPLEX array, dimension (NSIZE)
On exit, ALPHA/BETA are the eigenvalues.
C
Cβ aCOMPLEXarray, dimension(LDC, LDC). It stores the matrix generated by subroutineCLAKF2β the matrix formed by Kronecker products used for estimatingDIF. iykyk β¨LDCβ anINTEGER. Itβs the leading dimension ofC, and the vibe check saysLDC >= max(1, LDA*LDA/2 ). πSβ aREALarray, dimension(LDC). These are the singular values ofC, bestie. πWORKβ aCOMPLEXarray, dimension(LWORK). Your workspace, your moment. π«ΆLWORKβ anINTEGER. Itβs the dimension of the arrayWORK, and it needsLWORK >= 3*NSIZE*NSIZE/2. No skimping. πRWORKβ aREALarray, dimension(5*NSIZE*NSIZE/2 - 4). Thatβs the whole mood. πΈIWORKβ anINTEGERarray, dimension(LIWORK). π¦LIWORKβ anINTEGER. Itβs the dimension of the arrayIWORK, and it has to satisfyLIWORK >= NSIZE + 2. Periodt. πBWORKβ aLOGICALarray, dimension(NSIZE). Yes, logical. We love a boolean moment. βINFOβ anINTEGER, and itβs literally the status report:= 0: successful exit β¨< 0: ifINFO = -i, the i-th argument had an illegal value. π> 0: a routine returned an error code. π
π Author π
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
π Definition at line 346 of file cdrgsx.f.
π§ Author π§
This page? Generated automatically by Doxygen for LAPACK from the source code. No cap. π
Sign-off time, bestie: source is TESTING/EIG/cdrgsx.f(3), LAPACK version 3.12.0; the date isnβt listed in this footer, so Iβm not making one up β 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