SCHKST2STG(3)
π NAME π
okay bestie, this is the manual page for TESTING/EIG/schkst2stg.f(3) from the Library Functions Manual, and the manual name folded in right up top is TESTING/EIG/schkst2stg.f. Itβs giving βI live in TESTING/EIG and I have a whole subroutine to introduceβ energy π
β¨ SYNOPSIS β¨
π§ Functions/Subroutines π§
subroutine schkst2stg (...)β this is theSCHKST2STGsubroutine, and hereβs the full signature exactly as written, no edits, no cap:
subroutine schkst2stg (nsizes, nn, ntypes, dotype, iseed, thresh,
nounit, a, lda, ap, sd, se, d1, d2, d3, d4, d5, wa1, wa2, wa3, wr,
u, ldu, v, vp, tau, z, work, lwork, iwork, liwork, result, info)
SCHKST2STG
π₯ Function/Subroutine Documentation π₯
bestie, this is the full βwho disβ for the subroutine. Same name, same whole squad of arguments, now with all the types and dimensions. Keep your eyes on the code block β every integer, real, dimension, lda, ldu, etc. is exactly as the page says π«Ά
subroutine schkst2stg (integer nsizes, integer, dimension( * ) nn, integer
ntypes, logical, dimension( * ) dotype, integer, dimension( 4 ) iseed,
real thresh, integer nounit, real, dimension( lda, * ) a, integer lda,
real, dimension( * ) ap, real, dimension( * ) sd, real, dimension( * )
se, real, dimension( * ) d1, real, dimension( * ) d2, real, dimension( *
) d3, real, dimension( * ) d4, real, dimension( * ) d5, real, dimension(
* ) wa1, real, dimension( * ) wa2, real, dimension( * ) wa3, real,
dimension( * ) wr, real, dimension( ldu, * ) u, integer ldu, real,
dimension( ldu, * ) v, real, dimension( * ) vp, real, dimension( * )
tau, real, dimension( ldu, * ) z, real, dimension( * ) work, integer
lwork, integer, dimension( * ) iwork, integer liwork, real, dimension( *
) result, integer info)
SCHKST2STG
π― Purpose: π―
okay so SCHKST2STG checks the symmetric eigenvalue problem routines using the 2-stage reduction techniques. Since the generation of Q or the vectors is not available in this release, we only compare the eigenvalue resulting when using the 2-stage to the one considered as reference using the standard 1-stage reduction SSYTRD. For that, we call the standard SSYTRD and compute D1 using SSTEQR, then we call the 2-stage SSYTRD_2STAGE with Upper and Lower and we compute D2 and D3 using SSTEQR and then we replaced tests 3 and 4 by tests 11 and 12. test 1 and 2 remain to verify that the 1-stage results are OK and can be trusted. This testing routine will converge to the SCHKST in the next release when vectors and generation of Q will be implemented. π
the cast of routines, no cap:
SSYTRDfactors A asU S U', where'means transpose,Sis symmetric tridiagonal, andUis orthogonal.SSYTRDcan use either just the lower or just the upper triangle of A; SCHKST2STG checks both cases.Uis represented as a product of Householder transformations, whose vectors are stored in the firstn-1columns ofV, and whose scale factors are inTAU.SSPTRDdoes the same asSSYTRD, except that A and V are stored in format.SORGTRconstructs the matrix U from the contents of V and TAU.SOPGTRconstructs the matrix U from the contents of VP and TAU.SSTEQRfactors S asZ D1 Z', where Z is the orthogonal matrix of eigenvectors and D1 is a diagonal matrix with the eigenvalues on the diagonal.D2is the matrix of eigenvalues computed when Z is not computed.SSTERFcomputesD3, the matrix of eigenvalues, by thePWKmethod, which does not yield eigenvectors.SPTEQRfactors S asZ4 D4 Z4', for a symmetric positive definite tridiagonal matrix.D5is the matrix of eigenvalues computed when Z is not computed.SSTEBZcomputes selected eigenvalues.WA1,WA2, andWA3will denote eigenvalues computed to high absolute accuracy, with different range options.WRwill denote eigenvalues computed to high relative accuracy.SSTEINcomputesY, the eigenvectors of S, given the eigenvalues.SSTEDCfactors S asZ D1 Z', where Z is the orthogonal matrix of eigenvectors and D1 is a diagonal matrix with the eigenvalues on the diagonal ('I'option). It may also update an input orthogonal matrix, usually the output fromSSYTRD/SORGTRorSSPTRD/SOPGTR('V'option). It may also just compute eigenvalues ('N'option).SSTEMRfactors S asZ D1 Z', where Z is the orthogonal matrix of eigenvectors and D1 is a diagonal matrix with the eigenvalues on the diagonal ('I'option).SSTEMRuses the Relatively Robust Representation whenever possible.
When SCHKST2STG is called, a number of matrix () and a number of matrix are specified. For each size () and each type of matrix, one matrix will be generated and used to test the symmetric eigenroutines. For each matrix, a number of tests will be performed:
- Test (1):
| A - V S V' | / ( |A| n ulp )forSSYTRD( UPLO='U', ... ) - Test (2):
| I - UV' | / ( n ulp )forSORGTR( UPLO='U', ... ) - Test (3):
| A - V S V' | / ( |A| n ulp )forSSYTRD( UPLO='L', ... ), replaced by| D1 - D2 | / ( |D1| ulp )whereD1is the eigenvalue matrix computed using S andD2is the eigenvalue matrix computed usingS_2stagethe output ofSSYTRD_2STAGE(, ,....).D1andD2are computed viaSSTEQR('N',...) - Test (4):
| I - UV' | / ( n ulp )forSORGTR( UPLO='L', ... ), replaced by| D1 - D3 | / ( |D1| ulp )whereD1is the eigenvalue matrix computed using S andD3is the eigenvalue matrix computed usingS_2stagethe output ofSSYTRD_2STAGE(, ,....).D1andD3are computed viaSSTEQR('N',...) - Tests (5β8): Same as 1β4, but for
SSPTRDandSOPGTR. - Test (9):
| S - Z D Z' | / ( |S| n ulp )forSSTEQR('V',...) - Test (10):
| I - ZZ' | / ( n ulp )forSSTEQR('V',...) - Test (11):
| D1 - D2 | / ( |D1| ulp )forSSTEQR('N',...) - Test (12):
| D1 - D3 | / ( |D1| ulp )forSSTERF - Test (13):
0if the true eigenvalues (computed by sturm count) of S are withinTHRESHof those inD1.2*THRESHif they are not. (Tested usingSSTECH)
For S positive definite,
- Test (14):
| S - Z4 D4 Z4' | / ( |S| n ulp )forSPTEQR('V',...) - Test (15):
| I - Z4 Z4' | / ( n ulp )forSPTEQR('V',...) - Test (16):
| D4 - D5 | / ( 100 |D4| ulp )forSPTEQR('N',...)
When S is also diagonally dominant by the factor gamma < 1,
- Test (17):
max | D4(i) - WR(i) | / ( |D4(i)| omega ) ,
i
omega = 2 (2n-1) ULP (1 + 8 gamma**2) / (1 - gamma)**4
for SSTEBZ( 'A', 'E', ... )
- Test (18):
| WA1 - D3 | / ( |D3| ulp )forSSTEBZ( 'A', 'E', ... ) - Test (19):
( max { min | WA2(i)-WA3(j) | } +
i j
max { min | WA3(i)-WA2(j) | } ) / ( |D3| ulp )
i j
for SSTEBZ( 'I', 'E', ... )
- Test (20):
| S - Y WA1 Y' | / ( |S| n ulp )forSSTEBZ, SSTEIN - Test (21):
| I - Y Y' | / ( n ulp )forSSTEBZ, SSTEIN - Test (22):
| S - Z D Z' | / ( |S| n ulp )forSSTEDC('I') - Test (23):
| I - ZZ' | / ( n ulp )forSSTEDC('I') - Test (24):
| S - Z D Z' | / ( |S| n ulp )forSSTEDC('V') - Test (25):
| I - ZZ' | / ( n ulp )forSSTEDC('V') - Test (26):
| D1 - D2 | / ( |D1| ulp )forSSTEDC('V')andSSTEDC('N')
β οΈ Test 27 is disabled at the moment because SSTEMR does not guarantee high relatvie accuracy.
- Test (27):
max | D6(i) - WR(i) | / ( |D6(i)| omega ) ,
i
omega = 2 (2n-1) ULP (1 + 8 gamma**2) / (1 - gamma)**4
for SSTEMR('V', 'A')
- Test (28):
max | D6(i) - WR(i) | / ( |D6(i)| omega ) ,
i
omega = 2 (2n-1) ULP (1 + 8 gamma**2) / (1 - gamma)**4
for SSTEMR('V', 'I')
β οΈ Tests 29 through 34 are disable at present because SSTEMR does not handle partial spectrum requests.
- Test (29):
| S - Z D Z' | / ( |S| n ulp )forSSTEMR('V', 'I') - Test (30):
| I - ZZ' | / ( n ulp )forSSTEMR('V', 'I') - Test (31):
( max { min | WA2(i)-WA3(j) | } +
i j
max { min | WA3(i)-WA2(j) | } ) / ( |D3| ulp )
i j
for SSTEMR('N', 'I') vs. SSTEMR('V', 'I')
- Test (32):
| S - Z D Z' | / ( |S| n ulp )forSSTEMR('V', 'V') - Test (33):
| I - ZZ' | / ( n ulp )forSSTEMR('V', 'V') - Test (34):
( max { min | WA2(i)-WA3(j) | } +
i j
max { min | WA3(i)-WA2(j) | } ) / ( |D3| ulp )
i j
for SSTEMR('N', 'V') vs. SSTEMR('V', 'V')
- Test (35):
| S - Z D Z' | / ( |S| n ulp )forSSTEMR('V', 'A') - Test (36):
| I - ZZ' | / ( n ulp )forSSTEMR('V', 'A') - Test (37):
( max { min | WA2(i)-WA3(j) | } +
i j
max { min | WA3(i)-WA2(j) | } ) / ( |D3| ulp )
i j
for SSTEMR('N', 'A') vs. SSTEMR('V', 'A')
The are specified by an array NN(1:NSIZES); the value of each element NN(j) specifies one size. The 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:
- (1) The zero matrix.
- (2) The identity matrix.
- (3) A diagonal matrix with evenly spaced entries
1, ..., ULPand random signs. (ULP = (first number larger than 1) - 1) - (4) A diagonal matrix with geometrically spaced entries
1, ..., ULPand random signs. - (5) A diagonal matrix with entries
1, ULP, ..., ULPand random signs. - (6) Same as (4), but multiplied by
SQRT( overflow threshold ) - (7) Same as (4), but multiplied by
SQRT( underflow threshold ) - (8) A matrix of the form
U' D U, where U is orthogonal and D has evenly spaced entries1, ..., ULPwith random signs on the diagonal. - (9) A matrix of the form
U' D U, where U is orthogonal and D has geometrically spaced entries1, ..., ULPwith random signs on the diagonal. - (10) A matrix of the form
U' D U, where U is orthogonal and D has entries1, ULP,..., ULPwith random signs on the diagonal. - (11) Same as (8), but multiplied by
SQRT( overflow threshold ) - (12) Same as (8), but multiplied by
SQRT( underflow threshold ) - (13) Symmetric matrix with random entries chosen from
(-1,1). - (14) Same as (13), but multiplied by
SQRT( overflow threshold ) - (15) Same as (13), but multiplied by
SQRT( underflow threshold ) - (16) Same as (8), but diagonal elements are all positive.
- (17) Same as (9), but diagonal elements are all positive.
- (18) Same as (10), but diagonal elements are all positive.
- (19) Same as (16), but multiplied by
SQRT( overflow threshold ) - (20) Same as (16), but multiplied by
SQRT( underflow threshold ) - (21) A diagonally dominant tridiagonal matrix with geometrically spaced diagonal entries
1, ..., ULP.
πΈ Parameters πΈ
ok so here's the whole cast of characters π every single one of these gets passed in, and every single one has rules, so let's go through them one by one, no skipping, bestie.
NSIZESβNSIZESisINTEGER. It's the number of sizes of matrices we're gonna use. If it's zero,SCHKST2STGdoes literally nothing (iconic but useless). It must be at least zero.NNβNNisINTEGER array, dimension(NSIZES). This array holds the sizes we're using for the matrices. Zero values get skipped, bestie, they're just not invited. The values must be at least zero.NTYPESβNTYPESisINTEGER. It's the number of elements inDOTYPE. If it's zero, again,SCHKST2STGdoes nothing. Must be at least zero. BUT β and this is the fun part β if it'sMAXTYP+1andNSIZESis 1, then an extra type,MAXTYP+1, gets defined, and that one just uses whatever matrix is already sitting inA. This is only useful ifDOTYPE(1:MAXTYP)is.FALSE.andDOTYPE(MAXTYP+1)is.TRUE.. very niche, very specific, we respect it π«ΆDOTYPEβDOTYPEisLOGICAL array, dimension(NTYPES). IfDOTYPE(j)is.TRUE., then for each size inNN, a matrix of that size and of typejgets generated. IfNTYPESis smaller than the max number of types defined (PARAMETER MAXTYP), then typesNTYPES+1throughMAXTYPjust won't be generated. And ifNTYPESis larger thanMAXTYP, thenDOTYPE(MAXTYP+1)throughDOTYPE(NTYPES)get straight-up ignored. rude but fair πISEEDβISEEDisINTEGER array, dimension(4). On entry,ISEEDspecifies the seed of the random number generator. The array elements should be between0and4095β if they're not, they get reduced mod4096. Also,ISEED(4)must be odd. (yes, mandatory oddness, it's a whole thing). The random number generator uses a linear congruential sequence limited to small integers, so it should produce machine independent random numbers β¨ The values ofISEEDget changed on exit, and you can use them in the next call toSCHKST2STGto continue the same random number sequence. continuity queen.THRESHβTHRESHisREAL. A test will count as if the , 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.,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.NOUNITβNOUNITisINTEGER. It's the FORTRAN unit number for printing out error messages (e.g., if a routine returnsIINFOnot equal to0). your designated snitch unit, honestly.AβAisREAL arrayof dimension( LDA , max(NN) ). It holds the matrix whose eigenvalues are gonna be computed. On exit,Acontains the last matrix actually used. it keeps receipts.LDAβLDAisINTEGER. The leading dimension ofA. It must be at least1and at leastmax( NN ).APβAPisREAL arrayof dimension( max(NN)*max(NN+1)/2 ). It's the matrixAstored in packed format. lil compact icon.SDβSDisREAL arrayof dimension( max(NN) ). The diagonal of the tridiagonal matrix computed bySSYTRD. On exit,SDandSEcontain the tridiagonal form of the matrix inA.SEβSEisREAL arrayof dimension( max(NN) ). The off-diagonal of the tridiagonal matrix computed bySSYTRD. On exit,SDandSEcontain the tridiagonal form of the matrix inA. (yes, same sentence, they're a package deal π)D1βD1isREAL arrayof dimension( max(NN) ). The eigenvalues ofA, as computed bySSTEQRsimultaneously withZ. On exit, the eigenvalues inD1correspond with the matrix inA.D2βD2isREAL arrayof dimension( max(NN) ). The eigenvalues ofA, as computed bySSTEQRifZis not computed. On exit, the eigenvalues inD2correspond with the matrix inA.D3βD3isREAL arrayof dimension( max(NN) ). The eigenvalues ofA, as computed bySSTERF. On exit, the eigenvalues inD3correspond with the matrix inA.D4βD4isREAL arrayof dimension( max(NN) ). The eigenvalues ofA, as computed bySPTEQR(V).SPTEQRfactorsSasZ4 D4 Z4*. On exit, the eigenvalues inD4correspond with the matrix inA.D5βD5isREAL arrayof dimension( max(NN) ). The eigenvalues ofA, as computed bySPTEQR(N)whenZis not computed. On exit, the eigenvalues inD4correspond with the matrix inA. (yes, it saysD4in the docs, we're reporting it exactly, don't come for me π)WA1βWA1isREAL arrayof dimension( max(NN) ). All eigenvalues ofA, computed to high absolute accuracy, with different range options, as computed bySSTEBZ. highkey accurate.WA2βWA2isREAL arrayof dimension( max(NN) ). Selected eigenvalues ofA, computed to high absolute accuracy, with different range options, as computed bySSTEBZ. The move here: choose random values forILandIU, and ask for theIL-th throughIU-th eigenvalues π²WA3βWA3isREAL arrayof dimension( max(NN) ). Selected eigenvalues ofA, computed to high absolute accuracy, with different range options, as computed bySSTEBZ. This time: determine the valuesVLandVUof theIL-th andIU-th eigenvalues, and ask for all eigenvalues in this range.WRβWRisREAL arrayof dimension( max(NN) ). All eigenvalues ofA, computed to high absolute accuracy, with different options, as computed bySSTEBZ.UβUisREAL arrayof dimension( LDU, max(NN) ). The orthogonal matrix computed bySSYTRD+SORGTR. teamwork makes the dream work πLDUβLDUisINTEGER. The leading dimension ofU,Z, andV. It must be at least1and at leastmax( NN ).VβVisREAL arrayof dimension( LDU, max(NN) ). The Householder vectors computed bySSYTRDin reducingAto tridiagonal form. The vectors computed withUPLO='U'are in the upper triangle, and the vectors computed withUPLO='L'are in the lower triangle. (As described inSSYTRD, the sub- and superdiagonal are not set to1, even though the true Householder vector has a1in that position. The routines that useV, such asSORGTR, set those entries to1before using them, and then restore them later. iconic cleanup behaviour honestly.)VPβVPisREAL arrayof dimension( max(NN)*max(NN+1)/2 ). The matrixVstored in packed format.TAUβTAUisREAL arrayof dimension( max(NN) ). The Householder factors computed bySSYTRDin reducingAto tridiagonal form.ZβZisREAL arrayof dimension( LDU, max(NN) ). The orthogonal matrix of eigenvectors computed bySSTEQR,SPTEQR, andSSTEIN.WORKβWORKisREAL arrayof dimension( LWORK ).LWORKβLWORKisINTEGER. The number of entries inWORK. This must be at least1 + 4 * Nmax + 2 * Nmax * lg Nmax + 3 * Nmax**2whereNmax = max( NN(j), 2 )andlg = log base 2. do not skimp on the workspace bestie, it WILL notice πIWORKβIWORKisINTEGER array. Workspace. that's it, that's the whole description, and honestly? respect.LIWORKβLIWORKisINTEGER. The number of entries inIWORK. This must be at least
6 + 6*Nmax + 5 * Nmax * lg Nmax
where Nmax = max( NN(j), 2 ) and lg = log base 2.
RESULTβRESULTisREAL array, dimension(26). The values computed by the tests described above. The values are currently limited to1/ulp, to avoid overflow. twenty-six little report cards π₯INFOβINFOisINTEGER. (and that's exactly where this part hands off, don't worry, more coming π¦)
INFO is an INTEGER π«Ά and honestly it's the vibe check at the end of the run. If it comes back as 0, then everything ran OK β periodt. β¨
-1βNSIZES < 0.-2β someNN(j) < 0.-3βNTYPES < 0.-5βTHRESH < 0.-9βLDA < 1orLDA < NMAX, whereNMAXismax( NN(j) ).-23βLDU < 1orLDU < NMAX.-29βLWORKtoo small.
If SLATMR, SLATMS, SSYTRD, SORGTR, SSTEQR, SSTERF, or SORMC2 returns an error code, the absolute value of it is returned. π
πΈ Some Local Variables and Parameters
okay bestie these are the backstage girlies keeping the receipts π
ZERO,ONEβ real0and1.MAXTYPβ the number of types defined.NTESTβ the number of tests performed, or which can be performed so far, for the current matrix.NTESTTβ the total number of tests performed so far.NBLOCKβ blocksize as returned byENVIR.NMAXβ largest value inNN.NMATSβ the number of matrices generated so far.NERRSβ the number of tests which have exceededTHRESHso far.COND,IMODEβ values to be passed to the matrix generators.ANORMβ norm ofA; passed to matrix generators.OVFL,UNFLβ overflow and underflow thresholds.ULP,ULPINVβ finest relative precision and its inverse.RTOVFL,RTUNFLβ square roots of the previous 2 values.
The following four arrays decode JTYPE:
KTYPE(j)β the general type (1-10) for type .KMODE(j)β theMODEvalue to be passed to the matrix generator for type .KMAGN(j)β the order of magnitude (O(1),O(overflow^(1/2)),O(underflow^(1/2)))
π Author
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
Definition at line 608 of file schkst2stg.f.
Generated automatically by Doxygen for LAPACK from the source code.
and that's a wrap on this one, bestie π
β LAPACK Version 3.12.0, from TESTING/EIG/schkst2stg.f(3). Doxygen really said βI'll do it myselfβ and honestly? iconic π
π¦ 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