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:

  1. Stage one ๐Ÿ’… โ€” deflating the size of the problem when there are multiple eigenvalues or if there is a zero in the Z vector. For each such occurrence the dimension of the secular equation problem is reduced by one. This stage is performed by the routine SLAED2.
  2. Stage two โœจ โ€” calculating the updated eigenvalues. This is done by finding the roots of the secular equation via the routine SLAED4 (as called by SLAED3). This routine also calculates the eigenvectors of the current problem.
  3. 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 array Q. 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. QPTR points to beginning of the submatrices.
  • QPTR โ€” INTEGER array, dimension (N+2). List of indices pointing to beginning of submatrices stored in QSTORE. 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 in PERM a 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 in GIVCOL a 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 the S value to be used in the corresponding Givens rotation.
  • INFO โ€” INTEGER.
    • = 0: successful exit.
    • < 0: if INFO = -i, the i-th argument had an illegal value.
    • > 0: if INFO = 1, an eigenvalue did not converge.
๐Ÿšจ bestie heads up: INFO > 0 with INFO = 1 means 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 Z vector. For each such occurrence the dimension of the secular equation problem is reduced by one. This stage is performed by the routine DLAED8.
  • 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 by DLAED9). 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, Q contains 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 >= N if ICOMPQ = 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 array Q. 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. QPTR points 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 in QSTORE. 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 in PERM a 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 in GIVCOL a 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 the S value 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: if INFO = -i, the i-th argument had an illegal value.
    • > 0: if INFO = 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 Z vector. For each such occurrence the dimension of the secular equation problem is reduced by one. This stage is performed by the routine SLAED8.
  • 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 by SLAED9). 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, Q contains 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 >= N if ICOMPQ = 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 array Q. 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. QPTR points to beginning of the submatrices.
  • QPTR โ€” INTEGER array, dimension (N+2). List of indices pointing to beginning of submatrices stored in QSTORE. 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 in PERM a 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 in GIVCOL a 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 the S value 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: if INFO = -i, the i-th argument had an illegal value.
    • > 0: if INFO = 1, an eigenvalue did not converge.
  • D โ€” bestie, this is a REAL array, 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 a REAL array, 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 โ€” an INTEGER. Itโ€™s the leading dimension of the array Q. LDQ >= max(1,N). no cap. โœจ
  • INDXQ โ€” an INTEGER array, 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 โ€” a REAL. Itโ€™s the subdiagonal element used to create the rank-1 modification. ๐ŸŽ€
  • CUTPNT โ€” an INTEGER. It contains the location of the last eigenvalue in the leading sub-matrix. min(1,N) <= CUTPNT <= N. ๐ŸŒธ
  • QSTORE โ€” a REAL array, dimension (N**2+1). It stores eigenvectors of submatrices encountered during divide and conquer, packed together. QPTR points to the beginning of the submatrices. ๐Ÿซถ
  • QPTR โ€” an INTEGER array, dimension (N+2). Itโ€™s a list of indices pointing to the beginning of submatrices stored in QSTORE. The submatrices are numbered starting at the bottom left of the divide and conquer tree, from left to right and bottom to top. ๐ŸŒˆ
  • PRMPTR โ€” an INTEGER array, dimension (N lg N). It contains a list of pointers which indicate where in PERM a 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 โ€” an INTEGER array, dimension (N lg N). It contains the permutations (from deflation and sorting) to be applied to each eigenblock. ๐Ÿ’œ
  • GIVPTR โ€” an INTEGER array, dimension (N lg N). It contains a list of pointers which indicate where in GIVCOL a levelโ€™s Givens rotations are stored. GIVPTR(i+1) - GIVPTR(i) indicates the number of Givens rotations. ๐Ÿ”ฅ
  • GIVCOL โ€” an INTEGER array, dimension (2, N lg N). Each pair of numbers indicates a pair of columns to take place in a Givens rotation. ๐Ÿ‘‘
  • GIVNUM โ€” a REAL array, dimension (2, N lg N). Each number indicates the S value to be used in the corresponding Givens rotation. ๐Ÿ“
  • WORK โ€” a REAL array, dimension (3*N+2*QSIZ*N). ๐Ÿงš
  • IWORK โ€” an INTEGER array, dimension (4*N). ๐ŸŒธ
  • INFO โ€” an INTEGER. = 0: successful exit. < 0: if INFO = -i, the i-th argument had an illegal value. > 0: if INFO = 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 Z vector. For each such occurrence the dimension of the secular equation problem is reduced by one. This stage is performed by the routine DLAED2. ๐ŸŒธ
  • 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 by SLAED3). 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 โ€” an INTEGER. The dimension of the symmetric tridiagonal matrix. N >= 0. ๐ŸŒˆ
  • CUTPNT โ€” an INTEGER. It contains the location of the last eigenvalue in the leading sub-matrix. min(1,N) <= CUTPNT <= N. ๐ŸŽ€
  • QSIZ โ€” an INTEGER. The dimension of the unitary matrix used to reduce the full matrix to tridiagonal form. QSIZ >= N. ๐Ÿซถ
  • TLVLS โ€” an INTEGER. The total number of merging levels in the overall divide and conquer tree. โญ
  • CURLVL โ€” an INTEGER. The current level in the overall merge routine, 0 <= curlvl <= tlvls. ๐Ÿ’œ
  • CURPBM โ€” an INTEGER. The current problem in the current level in the overall merge routine (counting from upper left to lower right). ๐Ÿ“
  • D โ€” a DOUBLE PRECISION array, dimension (N). On entry, the eigenvalues of the rank-1-perturbed matrix. On exit, the eigenvalues of the repaired matrix. ๐Ÿ’–
  • Q โ€” a COMPLEX*16 array, dimension (LDQ,N). On entry, the eigenvectors of the rank-1-perturbed matrix. On exit, the eigenvectors of the repaired tridiagonal matrix. ๐Ÿฆ‹
  • LDQ โ€” an INTEGER. The leading dimension of the array Q. LDQ >= max(1,N). โœจ
  • RHO โ€” a DOUBLE PRECISION. It contains the subdiagonal element used to create the rank-1 modification. ๐ŸŒธ
  • INDXQ โ€” an 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 โ€” an INTEGER array, dimension (4*N). ๐ŸŒˆ
  • RWORK โ€” a DOUBLE PRECISION array, dimension (3*N+2*QSIZ*N). ๐Ÿซถ
  • WORK โ€” a COMPLEX*16 array, dimension (QSIZ*N). ๐Ÿ”ฅ
  • QSTORE โ€” a DOUBLE PRECISION array, dimension (N**2+1). It stores eigenvectors of submatrices encountered during divide and conquer, packed together. QPTR points to the beginning of the submatrices. ๐Ÿ‘‘
  • QPTR โ€” an INTEGER array, dimension (N+2). Itโ€™s a list of indices pointing to the beginning of submatrices stored in QSTORE. The submatrices are numbered starting at the bottom left of the divide and conquer tree, from left to right and bottom to top. ๐ŸŽ€
  • PRMPTR โ€” an INTEGER array, dimension (N lg N). It contains a list of pointers which indicate where in PERM a 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 โ€” an INTEGER array, dimension (N lg N). It contains the permutations (from deflation and sorting) to be applied to each eigenblock. ๐Ÿ’œ
  • GIVPTR โ€” an INTEGER array, dimension (N lg N). It contains a list of pointers which indicate where in GIVCOL a levelโ€™s Givens rotations are stored. GIVPTR(i+1) - GIVPTR(i) indicates the number of Givens rotations. ๐Ÿ“
  • GIVCOL โ€” an INTEGER array, dimension (2, N lg N). Each pair of numbers indicates a pair of columns to take place in a Givens rotation. ๐Ÿงš
  • GIVNUM โ€” a DOUBLE PRECISION array, dimension (2, N lg N). Each number indicates the S value to be used in the corresponding Givens rotation. ๐ŸŒธ
  • INFO
  • INFO โ€” this one's an INTEGER, and it's basically the โœจvibe checkโœจ of how everything went:
    • = 0: successful exit, we love a clean getaway, no notes ๐Ÿ’–
    • < 0: if INFO = -i, then the i-th argument had an illegal value โ€” someone handed it nonsense and it's telling on them ๐Ÿ˜ญ
    • > 0: if INFO = 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