laed7(3)
๐ laed7(3) โ Library Functions Manual ๐
okay bestie, buckle up โจ this is laed7(3) from the Library Functions Manual, and it's a whole four-parter, so we're pacing ourselves. It's the LAPACK divide-and-conquer merge-step crew โ claed7, dlaed7, slaed7, zlaed7 โ four little subroutines doing the exact same iconic job in four different precisions/flavours. no cap, it's giving "same energy, different types." ๐
๐ธ NAME ๐ธ
laed7 โ laed7: D&C step: merge subproblems
literally what it says on the tin, bestie ๐
โจ SYNOPSIS โจ
๐ซถ Functions
claed7๐ง
subroutine claed7 (n, cutpnt, qsiz, tlvls, curlvl, curpbm, d, q, ldq,
rho, indxq, qstore, qptr, prmptr, perm, givptr, givcol, givnum,
work, rwork, iwork, info)
CLAED7 used by CSTEDC. Computes the updated eigensystem of a diagonal matrix after modification by a rank-one symmetric matrix. Used when the original matrix is dense.
dlaed7๐
subroutine dlaed7 (icompq, n, qsiz, tlvls, curlvl, curpbm, d, q, ldq,
indxq, rho, cutpnt, qstore, qptr, prmptr, perm, givptr, givcol,
givnum, work, iwork, info)
DLAED7 used by DSTEDC. Computes the updated eigensystem of a diagonal matrix after modification by a rank-one symmetric matrix. Used when the original matrix is dense.
slaed7๐
subroutine slaed7 (icompq, n, qsiz, tlvls, curlvl, curpbm, d, q, ldq,
indxq, rho, cutpnt, qstore, qptr, prmptr, perm, givptr, givcol,
givnum, work, iwork, info)
SLAED7 used by SSTEDC. Computes the updated eigensystem of a diagonal matrix after modification by a rank-one symmetric matrix. Used when the original matrix is dense.
zlaed7๐ฆ
subroutine zlaed7 (n, cutpnt, qsiz, tlvls, curlvl, curpbm, d, q, ldq,
rho, indxq, qstore, qptr, prmptr, perm, givptr, givcol, givnum,
work, rwork, iwork, info)
ZLAED7 used by ZSTEDC. Computes the updated eigensystem of a diagonal matrix after modification by a rank-one symmetric matrix. Used when the original matrix is dense.
๐ซ Detailed Description ๐ซ
okay so the Detailed Description section here is lowkey just an empty room with good lighting โ the real main-character content lives under Function Documentation, so that's where we're headed. ๐ซก
๐ฅ Function Documentation ๐ฅ
๐งฎ subroutine claed7
subroutine claed7 (integer n, integer cutpnt, integer qsiz, integer tlvls,
integer curlvl, integer curpbm, real, dimension( * ) d, complex,
dimension( ldq, * ) q, integer ldq, real rho, integer, dimension( * )
indxq, real, dimension( * ) qstore, integer, dimension( * ) qptr,
integer, dimension( * ) prmptr, integer, dimension( * ) perm, integer,
dimension( * ) givptr, integer, dimension( 2, * ) givcol, real,
dimension( 2, * ) givnum, complex, dimension( * ) work, real, dimension(
* ) rwork, integer, dimension( * ) iwork, integer info)
CLAED7 used by CSTEDC. Computes the updated eigensystem of a diagonal matrix after modification by a rank-one symmetric matrix. Used when the original matrix is dense.
๐ Purpose
okay so here's the whole vibe, straight from the source:
CLAED7 computes the updated eigensystem of a diagonal matrix after modification by a rank-one symmetric matrix. This routine is used only for the eigenproblem which requires all eigenvalues and optionally eigenvectors of a dense or banded Hermitian matrix that has been reduced to tridiagonal form.
and then the actual math, which is honestly iconic:
T = Q(in) ( D(in) + RHO * Z*Z**H ) Q**H(in) = Q(out) * D(out) * Q**H(out)
where Z = Q**Hu, u is a vector of length N with ones in the
CUTPNT and CUTPNT + 1 th elements and zeros elsewhere.
The eigenvectors of the original matrix are stored in Q, and the eigenvalues are in D. The algorithm consists of three stages:
- Stage one ๐
โ deflating the size of the problem when there are multiple eigenvalues or if there is a zero in the
Zvector. For each such occurrence the dimension of the secular equation problem is reduced by one. This stage is performed by the routineSLAED2. - Stage two โจ โ calculating the updated eigenvalues. This is done by finding the roots of the secular equation via the routine
SLAED4(as called bySLAED3). This routine also calculates the eigenvectors of the current problem. - Stage three ๐ฆ โ computing the updated eigenvectors directly using the updated eigenvalues. The eigenvectors for the current problem are multiplied with the eigenvectors from the overall problem.
๐ Parameters
Nโ INTEGER. The dimension of the symmetric tridiagonal matrix.N >= 0.CUTPNTโ INTEGER. Contains the location of the last eigenvalue in the leading sub-matrix.min(1,N) <= CUTPNT <= N.QSIZโ INTEGER. The dimension of the unitary matrix used to reduce the full matrix to tridiagonal form.QSIZ >= N.TLVLSโ INTEGER. The total number of merging levels in the overall divide and conquer tree.CURLVLโ INTEGER. The current level in the overall merge routine,0 <= curlvl <= tlvls.CURPBMโ INTEGER. The current problem in the current level in the overall merge routine (counting from upper left to lower right).Dโ REAL array, dimension(N). On entry, the eigenvalues of the rank-1-perturbed matrix. On exit, the eigenvalues of the repaired matrix.Qโ COMPLEX array, dimension(LDQ,N). On entry, the eigenvectors of the rank-1-perturbed matrix. On exit, the eigenvectors of the repaired tridiagonal matrix.LDQโ INTEGER. The leading dimension of the arrayQ.LDQ >= max(1,N).RHOโ REAL. Contains the subdiagonal element used to create the rank-1 modification.INDXQโ INTEGER array, dimension(N). This contains the permutation which will reintegrate the subproblem just solved back into sorted order, ie.D( INDXQ( I = 1, N ) )will be in ascending order.IWORKโ INTEGER array, dimension(4*N).RWORKโ REAL array, dimension(3*N+2*QSIZ*N).WORKโ COMPLEX array, dimension(QSIZ*N).QSTOREโ REAL array, dimension(N**2+1). Stores eigenvectors of submatrices encountered during divide and conquer, packed together.QPTRpoints to beginning of the submatrices.QPTRโ INTEGER array, dimension(N+2). List of indices pointing to beginning of submatrices stored inQSTORE. The submatrices are numbered starting at the bottom left of the divide and conquer tree, from left to right and bottom to top.PRMPTRโ INTEGER array, dimension(N lg N). Contains a list of pointers which indicate where inPERMa level's permutation is stored.PRMPTR(i+1) - PRMPTR(i)indicates the size of the permutation and also the size of the full, non-deflated problem.PERMโ INTEGER array, dimension(N lg N). Contains the permutations (from deflation and sorting) to be applied to each eigenblock.GIVPTRโ INTEGER array, dimension(N lg N). Contains a list of pointers which indicate where inGIVCOLa level's Givens rotations are stored.GIVPTR(i+1) - GIVPTR(i)indicates the number of Givens rotations.GIVCOLโ INTEGER array, dimension(2, N lg N). Each pair of numbers indicates a pair of columns to take place in a Givens rotation.GIVNUMโ REAL array, dimension(2, N lg N). Each number indicates theSvalue to be used in the corresponding Givens rotation.INFOโ INTEGER.= 0: successful exit.< 0: ifINFO = -i, the i-th argument had an illegal value.> 0: ifINFO = 1, an eigenvalue did not converge.
๐จ bestie heads up:INFO > 0withINFO = 1means an eigenvalue did not converge. that's a real "the algorithm said no โค๏ธ" moment.
๐ Author
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.
Definition at line 245 of file claed7.f.
๐งฎ subroutine dlaed7
subroutine dlaed7 (integer icompq, integer n, integer qsiz, integer tlvls,
integer curlvl, integer curpbm, double precision, dimension( * ) d,
double precision, dimension( ldq, * ) q, integer ldq, integer,
dimension( * ) indxq, double precision rho, integer cutpnt, double
precision, dimension( * ) qstore, integer, dimension( * ) qptr, integer,
dimension( * ) prmptr, integer, dimension( * ) perm, integer, dimension(
* ) givptr, integer, dimension( 2, * ) givcol, double precision,
dimension( 2, * ) givnum, double precision, dimension( * ) work,
integer, dimension( * ) iwork, integer info)
DLAED7 used by DSTEDC. Computes the updated eigensystem of a diagonal matrix after modification by a rank-one symmetric matrix. Used when the original matrix is dense.
๐ Purpose
So real talk, here's the whole DLAED7 purpose block, because the math is actually gorgeous once you stop being scared of it:
DLAED7 computes the updated eigensystem of a diagonal matrix after modification by a rank-one symmetric matrix. Like, it's only used for the eigenproblem that wants all the eigenvalues and, if you're feeling extra, the eigenvectors of a dense symmetric matrix that's already been reduced to tridiagonal form. For the case where all eigenvalues and eigenvectors of a symmetric tridiagonal matrix are desired, that's DLAED1's job โ different girl, same friend group.
The whole vibe, in one line:
T = Q(in) ( D(in) + RHO * Z*Z**T ) Q**T(in) = Q(out) * D(out) * Q**T(out)
where Z = Q**Tu, and u is a vector of length N with ones in the CUTPNT and CUTPNT + 1 th elements and zeros elsewhere. Bestie. That's the whole plot. ๐
The eigenvectors of the original matrix are stored in Q, and the eigenvalues are in D. The algorithm does its thing in three stages:
- The first stage consists of deflating the size of the problem when there are multiple eigenvalues or if there is a zero in the
Zvector. For each such occurrence the dimension of the secular equation problem is reduced by one. This stage is performed by the routineDLAED8. - The second stage consists of calculating the updated eigenvalues. This is done by finding the roots of the secular equation via the routine
DLAED4(as called byDLAED9). This routine also calculates the eigenvectors of the current problem. - The final stage consists of computing the updated eigenvectors directly using the updated eigenvalues. The eigenvectors for the current problem are multiplied with the eigenvectors from the overall problem.
๐ธ Parameters ๐ธ
ICOMPQโ INTEGER. The little switch that decides how much you get back:= 0: Compute eigenvalues only.= 1: Compute eigenvectors of the original dense symmetric matrix also. On entry,Qcontains the orthogonal matrix used to reduce the original matrix to tridiagonal form.
Nโ INTEGER. The dimension of the symmetric tridiagonal matrix.N >= 0. (Zero is allowed, she's valid even when she's empty, we love a low-maintenance icon.)QSIZโ INTEGER. The dimension of the orthogonal matrix used to reduce the full matrix to tridiagonal form.QSIZ >= NifICOMPQ = 1.TLVLSโ INTEGER. The total number of merging levels in the overall divide and conquer tree. Yes, it's a whole tree, we're doing tree lore now. ๐ณCURLVLโ INTEGER. The current level in the overall merge routine,0 <= CURLVL <= TLVLS.CURPBMโ INTEGER. The current problem in the current level in the overall merge routine (counting from upper left to lower right). Like reading a book, but the book is matrices.Dโ DOUBLE PRECISION array, dimension(N). On entry, the eigenvalues of the rank-1-perturbed matrix. On exit, the eigenvalues of the repaired matrix. She gets fixed, that's her whole arc. ๐Qโ DOUBLE PRECISION array, dimension(LDQ, N). On entry, the eigenvectors of the rank-1-perturbed matrix. On exit, the eigenvectors of the repaired tridiagonal matrix.LDQโ INTEGER. The leading dimension of the arrayQ.LDQ >= max(1,N). Respect the leading dimension, she's the bouncer at the club.INDXQโ INTEGER array, dimension(N). The permutation which will reintegrate the subproblem just solved back into sorted order, i.e.,D( INDXQ( I = 1, N ) )will be in ascending order. Glow-up: sorted edition.RHOโ DOUBLE PRECISION. The subdiagonal element used to create the rank-1 modification. Tiny number, massive consequences, main character energy honestly.CUTPNTโ INTEGER. Contains the location of the last eigenvalue in the leading sub-matrix.min(1,N) <= CUTPNT <= N.QSTOREโ DOUBLE PRECISION array, dimension(N**2+1). Stores eigenvectors of submatrices encountered during divide and conquer, packed together.QPTRpoints to the beginning of the submatrices. It's a storage unit, but make it fashion. ๐งณQPTRโ INTEGER array, dimension(N+2). List of indices pointing to the beginning of submatrices stored inQSTORE. The submatrices are numbered starting at the bottom left of the divide and conquer tree, from left to right and bottom to top.PRMPTRโ INTEGER array, dimension(N lg N). Contains a list of pointers which indicate where inPERMa level's permutation is stored.PRMPTR(i+1) - PRMPTR(i)indicates the size of the permutation and also the size of the full, non-deflated problem.PERMโ INTEGER array, dimension(N lg N). Contains the permutations (from deflation and sorting) to be applied to each eigenblock.GIVPTRโ INTEGER array, dimension(N lg N). Contains a list of pointers which indicate where inGIVCOLa level's Givens rotations are stored.GIVPTR(i+1) - GIVPTR(i)indicates the number of Givens rotations.GIVCOLโ INTEGER array, dimension(2, N lg N). Each pair of numbers indicates a pair of columns to take place in a Givens rotation.GIVNUMโ DOUBLE PRECISION array, dimension(2, N lg N). Each number indicates theSvalue to be used in the corresponding Givens rotation.WORKโ DOUBLE PRECISION array, dimension(3*N+2*QSIZ*N). Scratch space. No thoughts, just numbers. โจIWORKโ INTEGER array, dimension(4*N). Integer scratch space, same deal but it's the integer department.INFOโ INTEGER. The receipts:= 0: successful exit.< 0: ifINFO = -i, the i-th argument had an illegal value.> 0: ifINFO = 1, an eigenvalue did not converge. ๐ญ (rare but she will absolutely tell you)
๐ Author ๐
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.
๐ซถ Contributors ๐ซถ
Jeff Rutter, Computer Science Division, University of California at Berkeley, USA
Definition at line 256 of file dlaed7.f.
๐ฆ subroutine slaed7 ๐ฆ
Okay so now the single-precision sibling shows up and honestly? She's the same girl in a different font. Here's the signature, verbatim, don't touch:
subroutine slaed7 (integer icompq, integer n, integer qsiz, integer tlvls,
integer curlvl, integer curpbm, real, dimension( * ) d, real, dimension(
ldq, * ) q, integer ldq, integer, dimension( * ) indxq, real rho,
integer cutpnt, real, dimension( * ) qstore, integer, dimension( * )
qptr, integer, dimension( * ) prmptr, integer, dimension( * ) perm,
integer, dimension( * ) givptr, integer, dimension( 2, * ) givcol, real,
dimension( 2, * ) givnum, real, dimension( * ) work, integer, dimension(
* ) iwork, integer info)
SLAED7 is used by SSTEDC. It computes the updated eigensystem of a diagonal matrix after modification by a rank-one symmetric matrix, and it's the one you call when the original matrix is dense.
โจ Purpose โจ
SLAED7 computes the updated eigensystem of a diagonal matrix after modification by a rank-one symmetric matrix. This routine is used only for the eigenproblem which requires all eigenvalues and optionally eigenvectors of a dense symmetric matrix that has been reduced to tridiagonal form. SLAED1 handles the case in which all eigenvalues and eigenvectors of a symmetric tridiagonal matrix are desired.
T = Q(in) ( D(in) + RHO * Z*Z**T ) Q**T(in) = Q(out) * D(out) * Q**T(out)
where Z = Q**Tu, u is a vector of length N with ones in the CUTPNT and CUTPNT + 1 th elements and zeros elsewhere.
The eigenvectors of the original matrix are stored in Q, and the eigenvalues are in D. The algorithm consists of three stages:
- The first stage consists of deflating the size of the problem when there are multiple eigenvalues or if there is a zero in the
Zvector. For each such occurrence the dimension of the secular equation problem is reduced by one. This stage is performed by the routineSLAED8. - The second stage consists of calculating the updated eigenvalues. This is done by finding the roots of the secular equation via the routine
SLAED4(as called bySLAED9). This routine also calculates the eigenvectors of the current problem. - The final stage consists of computing the updated eigenvectors directly using the updated eigenvalues. The eigenvectors for the current problem are multiplied with the eigenvectors from the overall problem.
๐ Parameters ๐
ICOMPQโ INTEGER.= 0: Compute eigenvalues only.= 1: Compute eigenvectors of original dense symmetric matrix also. On entry,Qcontains the orthogonal matrix used to reduce the original matrix to tridiagonal form.
Nโ INTEGER. The dimension of the symmetric tridiagonal matrix.N >= 0.QSIZโ INTEGER. The dimension of the orthogonal matrix used to reduce the full matrix to tridiagonal form.QSIZ >= NifICOMPQ = 1.TLVLSโ INTEGER. The total number of merging levels in the overall divide and conquer tree.CURLVLโ INTEGER. The current level in the overall merge routine,0 <= CURLVL <= TLVLS.CURPBMโ INTEGER. The current problem in the current level in the overall merge routine (counting from upper left to lower right).Dโ REAL array, dimension(N). On entry, the eigenvalues of the rank-1-perturbed matrix. On exit, the eigenvalues of the repaired matrix.Qโ REAL array, dimension(LDQ, N). On entry, the eigenvectors of the rank-1-perturbed matrix. On exit, the eigenvectors of the repaired tridiagonal matrix.LDQโ INTEGER. The leading dimension of the arrayQ.LDQ >= max(1,N).INDXQโ INTEGER array, dimension(N). The permutation which will reintegrate the subproblem just solved back into sorted order, i.e.,D( INDXQ( I = 1, N ) )will be in ascending order.RHOโ REAL. The subdiagonal element used to create the rank-1 modification.CUTPNTโ INTEGER. Contains the location of the last eigenvalue in the leading sub-matrix.min(1,N) <= CUTPNT <= N.QSTOREโ REAL array, dimension(N**2+1). Stores eigenvectors of submatrices encountered during divide and conquer, packed together.QPTRpoints to beginning of the submatrices.QPTRโ INTEGER array, dimension(N+2). List of indices pointing to beginning of submatrices stored inQSTORE. The submatrices are numbered starting at the bottom left of the divide and conquer tree, from left to right and bottom to top.PRMPTRโ INTEGER array, dimension(N lg N). Contains a list of pointers which indicate where inPERMa level's permutation is stored.PRMPTR(i+1) - PRMPTR(i)indicates the size of the permutation and also the size of the full, non-deflated problem.PERMโ INTEGER array, dimension(N lg N). Contains the permutations (from deflation and sorting) to be applied to each eigenblock.GIVPTRโ INTEGER array, dimension(N lg N). Contains a list of pointers which indicate where inGIVCOLa level's Givens rotations are stored.GIVPTR(i+1) - GIVPTR(i)indicates the number of Givens rotations.GIVCOLโ INTEGER array, dimension(2, N lg N). Each pair of numbers indicates a pair of columns to take place in a Givens rotation.GIVNUMโ REAL array, dimension(2, N lg N). Each number indicates theSvalue to be used in the corresponding Givens rotation.WORKโ REAL array, dimension(3*N+2*QSIZ*N).IWORKโ INTEGER array, dimension(4*N).INFOโ INTEGER.= 0: successful exit.< 0: ifINFO = -i, the i-th argument had an illegal value.> 0: ifINFO = 1, an eigenvalue did not converge.
Dโ bestie, this is aREALarray, dimension(N). On entry, it holds the eigenvalues of the rank-1-perturbed matrix. On exit, it holds the eigenvalues of the repaired matrix. ๐Qโ this is aREALarray, dimension(LDQ, N). On entry, itโs the eigenvectors of the rank-1-perturbed matrix. On exit, itโs the eigenvectors of the repaired tridiagonal matrix. ๐LDQโ anINTEGER. Itโs the leading dimension of the arrayQ.LDQ >= max(1,N). no cap. โจINDXQโ anINTEGERarray, dimension(N). This is the permutation that will reintegrate the subproblem just solved back into sorted order, i.e.,D( INDXQ( I = 1, N ) )will be in ascending order. ๐ฆRHOโ aREAL. Itโs the subdiagonal element used to create the rank-1 modification. ๐CUTPNTโ anINTEGER. It contains the location of the last eigenvalue in the leading sub-matrix.min(1,N) <= CUTPNT <= N. ๐ธQSTOREโ aREALarray, dimension(N**2+1). It stores eigenvectors of submatrices encountered during divide and conquer, packed together.QPTRpoints to the beginning of the submatrices. ๐ซถQPTRโ anINTEGERarray, dimension(N+2). Itโs a list of indices pointing to the beginning of submatrices stored inQSTORE. The submatrices are numbered starting at the bottom left of the divide and conquer tree, from left to right and bottom to top. ๐PRMPTRโ anINTEGERarray, dimension(N lg N). It contains a list of pointers which indicate where inPERMa levelโs permutation is stored.PRMPTR(i+1) - PRMPTR(i)indicates the size of the permutation and also the size of the full, non-deflated problem. โญPERMโ anINTEGERarray, dimension(N lg N). It contains the permutations (from deflation and sorting) to be applied to each eigenblock. ๐GIVPTRโ anINTEGERarray, dimension(N lg N). It contains a list of pointers which indicate where inGIVCOLa levelโs Givens rotations are stored.GIVPTR(i+1) - GIVPTR(i)indicates the number of Givens rotations. ๐ฅGIVCOLโ anINTEGERarray, dimension(2, N lg N). Each pair of numbers indicates a pair of columns to take place in a Givens rotation. ๐GIVNUMโ aREALarray, dimension(2, N lg N). Each number indicates theSvalue to be used in the corresponding Givens rotation. ๐WORKโ aREALarray, dimension(3*N+2*QSIZ*N). ๐งIWORKโ anINTEGERarray, dimension(4*N). ๐ธINFOโ anINTEGER.= 0: successful exit.< 0: ifINFO = -i, the i-th argument had an illegal value.> 0: ifINFO = 1, an eigenvalue did not converge. ๐
Author ๐
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
Contributors: ๐ซถ
- Jeff Rutter, Computer Science Division, University of California at Berkeley, USA
Definition at line 256 of file slaed7.f.
subroutine zlaed7 (integer n, integer cutpnt, integer qsiz, integer tlvls,
integer curlvl, integer curpbm, double precision, dimension( * ) d,
complex*16, dimension( ldq, * ) q, integer ldq, double precision rho,
integer, dimension( * ) indxq, double precision, dimension( * ) qstore,
integer, dimension( * ) qptr, integer, dimension( * ) prmptr, integer,
dimension( * ) perm, integer, dimension( * ) givptr, integer, dimension(
2, * ) givcol, double precision, dimension( 2, * ) givnum, complex*16,
dimension( * ) work, double precision, dimension( * ) rwork, integer,
dimension( * ) iwork, integer info)
ZLAED7 used by ZSTEDC. Computes the updated eigensystem of a diagonal matrix after modification by a rank-one symmetric matrix. Used when the original matrix is dense. โจ
Purpose ๐ฏ
ZLAED7 computes the updated eigensystem of a diagonal matrix after modification by a rank-one symmetric matrix. This routine is used only for the eigenproblem which requires all eigenvalues and optionally eigenvectors of a dense or banded Hermitian matrix that has been reduced to tridiagonal form. ๐ฆ
T = Q(in) ( D(in) + RHO * Z*Z**H ) Q**H(in) = Q(out) * D(out) * Q**H(out)
where Z = Q**Hu, u is a vector of length N with ones in the
CUTPNT and CUTPNT + 1 th elements and zeros elsewhere.
The eigenvectors of the original matrix are stored in Q, and the eigenvalues are in D. The algorithm consists of three stages: ๐
- The first stage consists of deflating the size of the problem when there are multiple eigenvalues or if there is a zero in the
Zvector. For each such occurrence the dimension of the secular equation problem is reduced by one. This stage is performed by the routineDLAED2. ๐ธ - The second stage consists of calculating the updated eigenvalues. This is done by finding the roots of the secular equation via the routine
DLAED4(as called bySLAED3). This routine also calculates the eigenvectors of the current problem. ๐ฅ - The final stage consists of computing the updated eigenvectors directly using the updated eigenvalues. The eigenvectors for the current problem are multiplied with the eigenvectors from the overall problem. ๐
Parameters ๐
Nโ anINTEGER. The dimension of the symmetric tridiagonal matrix.N >= 0. ๐CUTPNTโ anINTEGER. It contains the location of the last eigenvalue in the leading sub-matrix.min(1,N) <= CUTPNT <= N. ๐QSIZโ anINTEGER. The dimension of the unitary matrix used to reduce the full matrix to tridiagonal form.QSIZ >= N. ๐ซถTLVLSโ anINTEGER. The total number of merging levels in the overall divide and conquer tree. โญCURLVLโ anINTEGER. The current level in the overall merge routine,0 <= curlvl <= tlvls. ๐CURPBMโ anINTEGER. The current problem in the current level in the overall merge routine (counting from upper left to lower right). ๐Dโ aDOUBLE PRECISIONarray, dimension(N). On entry, the eigenvalues of the rank-1-perturbed matrix. On exit, the eigenvalues of the repaired matrix. ๐Qโ aCOMPLEX*16array, dimension(LDQ,N). On entry, the eigenvectors of the rank-1-perturbed matrix. On exit, the eigenvectors of the repaired tridiagonal matrix. ๐ฆLDQโ anINTEGER. The leading dimension of the arrayQ.LDQ >= max(1,N). โจRHOโ aDOUBLE PRECISION. It contains the subdiagonal element used to create the rank-1 modification. ๐ธINDXQโ anINTEGERarray, dimension(N). This contains the permutation which will reintegrate the subproblem just solved back into sorted order, ie.D( INDXQ( I = 1, N ) )will be in ascending order. ๐IWORKโ anINTEGERarray, dimension(4*N). ๐RWORKโ aDOUBLE PRECISIONarray, dimension(3*N+2*QSIZ*N). ๐ซถWORKโ aCOMPLEX*16array, dimension(QSIZ*N). ๐ฅQSTOREโ aDOUBLE PRECISIONarray, dimension(N**2+1). It stores eigenvectors of submatrices encountered during divide and conquer, packed together.QPTRpoints to the beginning of the submatrices. ๐QPTRโ anINTEGERarray, dimension(N+2). Itโs a list of indices pointing to the beginning of submatrices stored inQSTORE. The submatrices are numbered starting at the bottom left of the divide and conquer tree, from left to right and bottom to top. ๐PRMPTRโ anINTEGERarray, dimension(N lg N). It contains a list of pointers which indicate where inPERMa levelโs permutation is stored.PRMPTR(i+1) - PRMPTR(i)indicates the size of the permutation and also the size of the full, non-deflated problem. โญPERMโ anINTEGERarray, dimension(N lg N). It contains the permutations (from deflation and sorting) to be applied to each eigenblock. ๐GIVPTRโ anINTEGERarray, dimension(N lg N). It contains a list of pointers which indicate where inGIVCOLa levelโs Givens rotations are stored.GIVPTR(i+1) - GIVPTR(i)indicates the number of Givens rotations. ๐GIVCOLโ anINTEGERarray, dimension(2, N lg N). Each pair of numbers indicates a pair of columns to take place in a Givens rotation. ๐งGIVNUMโ aDOUBLE PRECISIONarray, dimension(2, N lg N). Each number indicates theSvalue to be used in the corresponding Givens rotation. ๐ธINFOINFOโ this one's anINTEGER, and it's basically the โจvibe checkโจ of how everything went:= 0: successful exit, we love a clean getaway, no notes ๐< 0: ifINFO = -i, then the i-th argument had an illegal value โ someone handed it nonsense and it's telling on them ๐ญ> 0: ifINFO = 1, an eigenvalue did not converge โ that's the bad one, that's the ๐ one, do not ignore it
๐ Author
Like, the actual whole squad behind this, no cap:
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
Absolute icons, every single one ๐ซถ
Definition at line 245 of file zlaed7.f.
If you ever need to go touch the source directly (iykyk), that's exactly where it's living ๐
๐ธ Author
This one's not a person โ it's the receipt ๐งพ. Literally generated automatically by Doxygen for LAPACK from the source code, so it's giving very much "the docs wrote themselves" energy โจ
And that's the whole page, bestie โ you made it to the end, main character behaviour honestly ๐๐
Source/version and date, for the record: this is from LAPACK, Version 3.12.0, and the page is dated laed7(3). Slay, go converge some eigenvalues ๐๐ฆ๐
๐ฆ 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