fortran-lapack
Loading...
Searching...
No Matches
la_lapack_eigv_tridiag3 Module Reference

Symmetric tridiagonal eigenvalue drivers: divide and conquer, MRRR, bisection and inverse iteration. More...

Functions/Subroutines

pure subroutine, public la_sstebz (range, order, n, vl, vu, il, iu, abstol, d, e, m, nsplit, w, iblock, isplit, work, iwork, info)
 SSTEBZ: computes the eigenvalues of a symmetric tridiagonal matrix T. The user may ask for all eigenvalues, all eigenvalues in the half-open interval (VL, VU], or the IL-th through IU-th eigenvalues. To avoid overflow, the matrix must be scaled so that its largest element is no greater than overflow**(1/2) * underflow**(1/4) in absolute value, and for greatest accuracy, it should not be much smaller than that. See W. Kahan "Accurate Eigenvalues of a Symmetric Tridiagonal Matrix", Report CS41, Computer Science Dept., Stanford University, July 21, 1966.
 
pure subroutine, public la_dstebz (range, order, n, vl, vu, il, iu, abstol, d, e, m, nsplit, w, iblock, isplit, work, iwork, info)
 DSTEBZ: computes the eigenvalues of a symmetric tridiagonal matrix T. The user may ask for all eigenvalues, all eigenvalues in the half-open interval (VL, VU], or the IL-th through IU-th eigenvalues. To avoid overflow, the matrix must be scaled so that its largest element is no greater than overflow**(1/2) * underflow**(1/4) in absolute value, and for greatest accuracy, it should not be much smaller than that. See W. Kahan "Accurate Eigenvalues of a Symmetric Tridiagonal Matrix", Report CS41, Computer Science Dept., Stanford University, July 21, 1966.
 
pure subroutine, public la_qstebz (range, order, n, vl, vu, il, iu, abstol, d, e, m, nsplit, w, iblock, isplit, work, iwork, info)
 QSTEBZ: computes the eigenvalues of a symmetric tridiagonal matrix T. The user may ask for all eigenvalues, all eigenvalues in the half-open interval (VL, VU], or the IL-th through IU-th eigenvalues. To avoid overflow, the matrix must be scaled so that its largest element is no greater than overflow**(1/2) * underflow**(1/4) in absolute value, and for greatest accuracy, it should not be much smaller than that. See W. Kahan "Accurate Eigenvalues of a Symmetric Tridiagonal Matrix", Report CS41, Computer Science Dept., Stanford University, July 21, 1966.
 
pure subroutine, public la_sstein (n, d, e, m, w, iblock, isplit, z, ldz, work, iwork, ifail, info)
 SSTEIN: computes the eigenvectors of a real symmetric tridiagonal matrix T corresponding to specified eigenvalues, using inverse iteration. The maximum number of iterations allowed for each eigenvector is specified by an internal parameter MAXITS (currently set to 5).
 
pure subroutine, public la_dstein (n, d, e, m, w, iblock, isplit, z, ldz, work, iwork, ifail, info)
 DSTEIN: computes the eigenvectors of a real symmetric tridiagonal matrix T corresponding to specified eigenvalues, using inverse iteration. The maximum number of iterations allowed for each eigenvector is specified by an internal parameter MAXITS (currently set to 5).
 
pure subroutine, public la_qstein (n, d, e, m, w, iblock, isplit, z, ldz, work, iwork, ifail, info)
 QSTEIN: computes the eigenvectors of a real symmetric tridiagonal matrix T corresponding to specified eigenvalues, using inverse iteration. The maximum number of iterations allowed for each eigenvector is specified by an internal parameter MAXITS (currently set to 5).
 
pure subroutine, public la_ssterf (n, d, e, info)
 SSTERF: computes all eigenvalues of a symmetric tridiagonal matrix using the Pal-Walker-Kahan variant of the QL or QR algorithm.
 
pure subroutine, public la_dsterf (n, d, e, info)
 DSTERF: computes all eigenvalues of a symmetric tridiagonal matrix using the Pal-Walker-Kahan variant of the QL or QR algorithm.
 
pure subroutine, public la_qsterf (n, d, e, info)
 QSTERF: computes all eigenvalues of a symmetric tridiagonal matrix using the Pal-Walker-Kahan variant of the QL or QR algorithm.
 
pure subroutine, public la_sstev (jobz, n, d, e, z, ldz, work, info)
 SSTEV: computes all eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix A.
 
pure subroutine, public la_dstev (jobz, n, d, e, z, ldz, work, info)
 DSTEV: computes all eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix A.
 
pure subroutine, public la_qstev (jobz, n, d, e, z, ldz, work, info)
 QSTEV: computes all eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix A.
 
pure subroutine, public la_sstevx (jobz, range, n, d, e, vl, vu, il, iu, abstol, m, w, z, ldz, work, iwork, ifail, info)
 SSTEVX: computes selected eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix A. Eigenvalues and eigenvectors can be selected by specifying either a range of values or a range of indices for the desired eigenvalues.
 
pure subroutine, public la_dstevx (jobz, range, n, d, e, vl, vu, il, iu, abstol, m, w, z, ldz, work, iwork, ifail, info)
 DSTEVX: computes selected eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix A. Eigenvalues and eigenvectors can be selected by specifying either a range of values or a range of indices for the desired eigenvalues.
 
pure subroutine, public la_qstevx (jobz, range, n, d, e, vl, vu, il, iu, abstol, m, w, z, ldz, work, iwork, ifail, info)
 QSTEVX: computes selected eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix A. Eigenvalues and eigenvectors can be selected by specifying either a range of values or a range of indices for the desired eigenvalues.
 
pure subroutine, public la_sstedc (compz, n, d, e, z, ldz, work, lwork, iwork, liwork, info)
 SSTEDC: computes all eigenvalues and, optionally, eigenvectors of a symmetric tridiagonal matrix using the divide and conquer method. The eigenvectors of a full or band real symmetric matrix can also be found if SSYTRD or SSPTRD or SSBTRD has been used to reduce this matrix to tridiagonal form. This code makes very mild assumptions about floating point arithmetic. It will work on machines with a guard digit in add/subtract, or on those binary machines without guard digits which subtract like the Cray X-MP, Cray Y-MP, Cray C-90, or Cray-2. It could conceivably fail on hexadecimal or decimal machines without guard digits, but we know of none. See SLAED3 for details.
 
pure subroutine, public la_dstedc (compz, n, d, e, z, ldz, work, lwork, iwork, liwork, info)
 DSTEDC: computes all eigenvalues and, optionally, eigenvectors of a symmetric tridiagonal matrix using the divide and conquer method. The eigenvectors of a full or band real symmetric matrix can also be found if DSYTRD or DSPTRD or DSBTRD has been used to reduce this matrix to tridiagonal form. This code makes very mild assumptions about floating point arithmetic. It will work on machines with a guard digit in add/subtract, or on those binary machines without guard digits which subtract like the Cray X-MP, Cray Y-MP, Cray C-90, or Cray-2. It could conceivably fail on hexadecimal or decimal machines without guard digits, but we know of none. See DLAED3 for details.
 
pure subroutine, public la_qstedc (compz, n, d, e, z, ldz, work, lwork, iwork, liwork, info)
 QSTEDC: computes all eigenvalues and, optionally, eigenvectors of a symmetric tridiagonal matrix using the divide and conquer method. The eigenvectors of a full or band real symmetric matrix can also be found if QSYTRD or QSPTRD or QSBTRD has been used to reduce this matrix to tridiagonal form. This code makes very mild assumptions about floating point arithmetic. It will work on machines with a guard digit in add/subtract, or on those binary machines without guard digits which subtract like the Cray X-MP, Cray Y-MP, Cray C-90, or Cray-2. It could conceivably fail on hexadecimal or decimal machines without guard digits, but we know of none. See QLAED3 for details.
 
pure subroutine, public la_sstevd (jobz, n, d, e, z, ldz, work, lwork, iwork, liwork, info)
 SSTEVD: computes all eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix. If eigenvectors are desired, it uses a divide and conquer algorithm. The divide and conquer algorithm makes very mild assumptions about floating point arithmetic. It will work on machines with a guard digit in add/subtract, or on those binary machines without guard digits which subtract like the Cray X-MP, Cray Y-MP, Cray C-90, or Cray-2. It could conceivably fail on hexadecimal or decimal machines without guard digits, but we know of none.
 
pure subroutine, public la_dstevd (jobz, n, d, e, z, ldz, work, lwork, iwork, liwork, info)
 DSTEVD: computes all eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix. If eigenvectors are desired, it uses a divide and conquer algorithm. The divide and conquer algorithm makes very mild assumptions about floating point arithmetic. It will work on machines with a guard digit in add/subtract, or on those binary machines without guard digits which subtract like the Cray X-MP, Cray Y-MP, Cray C-90, or Cray-2. It could conceivably fail on hexadecimal or decimal machines without guard digits, but we know of none.
 
pure subroutine, public la_qstevd (jobz, n, d, e, z, ldz, work, lwork, iwork, liwork, info)
 QSTEVD: computes all eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix. If eigenvectors are desired, it uses a divide and conquer algorithm. The divide and conquer algorithm makes very mild assumptions about floating point arithmetic. It will work on machines with a guard digit in add/subtract, or on those binary machines without guard digits which subtract like the Cray X-MP, Cray Y-MP, Cray C-90, or Cray-2. It could conceivably fail on hexadecimal or decimal machines without guard digits, but we know of none.
 
pure subroutine, public la_spteqr (compz, n, d, e, z, ldz, work, info)
 SPTEQR: computes all eigenvalues and, optionally, eigenvectors of a symmetric positive definite tridiagonal matrix by first factoring the matrix using SPTTRF, and then calling SBDSQR to compute the singular values of the bidiagonal factor. This routine computes the eigenvalues of the positive definite tridiagonal matrix to high relative accuracy. This means that if the eigenvalues range over many orders of magnitude in size, then the small eigenvalues and corresponding eigenvectors will be computed more accurately than, for example, with the standard QR method. The eigenvectors of a full or band symmetric positive definite matrix can also be found if SSYTRD, SSPTRD, or SSBTRD has been used to reduce this matrix to tridiagonal form. (The reduction to tridiagonal form, however, may preclude the possibility of obtaining high relative accuracy in the small eigenvalues of the original matrix, if these eigenvalues range over many orders of magnitude.)
 
pure subroutine, public la_dpteqr (compz, n, d, e, z, ldz, work, info)
 DPTEQR: computes all eigenvalues and, optionally, eigenvectors of a symmetric positive definite tridiagonal matrix by first factoring the matrix using DPTTRF, and then calling DBDSQR to compute the singular values of the bidiagonal factor. This routine computes the eigenvalues of the positive definite tridiagonal matrix to high relative accuracy. This means that if the eigenvalues range over many orders of magnitude in size, then the small eigenvalues and corresponding eigenvectors will be computed more accurately than, for example, with the standard QR method. The eigenvectors of a full or band symmetric positive definite matrix can also be found if DSYTRD, DSPTRD, or DSBTRD has been used to reduce this matrix to tridiagonal form. (The reduction to tridiagonal form, however, may preclude the possibility of obtaining high relative accuracy in the small eigenvalues of the original matrix, if these eigenvalues range over many orders of magnitude.)
 
pure subroutine, public la_qpteqr (compz, n, d, e, z, ldz, work, info)
 QPTEQR: computes all eigenvalues and, optionally, eigenvectors of a symmetric positive definite tridiagonal matrix by first factoring the matrix using QPTTRF, and then calling QBDSQR to compute the singular values of the bidiagonal factor. This routine computes the eigenvalues of the positive definite tridiagonal matrix to high relative accuracy. This means that if the eigenvalues range over many orders of magnitude in size, then the small eigenvalues and corresponding eigenvectors will be computed more accurately than, for example, with the standard QR method. The eigenvectors of a full or band symmetric positive definite matrix can also be found if QSYTRD, QSPTRD, or QSBTRD has been used to reduce this matrix to tridiagonal form. (The reduction to tridiagonal form, however, may preclude the possibility of obtaining high relative accuracy in the small eigenvalues of the original matrix, if these eigenvalues range over many orders of magnitude.)
 
pure subroutine, public la_sstegr (jobz, range, n, d, e, vl, vu, il, iu, abstol, m, w, z, ldz, isuppz, work, lwork, iwork, liwork, info)
 SSTEGR: computes selected eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix T. Any such unreduced matrix has a well defined set of pairwise different real eigenvalues, the corresponding real eigenvectors are pairwise orthogonal. The spectrum may be computed either completely or partially by specifying either an interval (VL,VU] or a range of indices IL:IU for the desired eigenvalues. SSTEGR is a compatibility wrapper around the improved SSTEMR routine. See SSTEMR for further details. One important change is that the ABSTOL parameter no longer provides any benefit and hence is no longer used. Note : SSTEGR and SSTEMR work only on machines which follow IEEE-754 floating-point standard in their handling of infinities and NaNs. Normal execution may create these exceptiona values and hence may abort due to a floating point exception in environments which do not conform to the IEEE-754 standard.
 
pure subroutine, public la_dstegr (jobz, range, n, d, e, vl, vu, il, iu, abstol, m, w, z, ldz, isuppz, work, lwork, iwork, liwork, info)
 DSTEGR: computes selected eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix T. Any such unreduced matrix has a well defined set of pairwise different real eigenvalues, the corresponding real eigenvectors are pairwise orthogonal. The spectrum may be computed either completely or partially by specifying either an interval (VL,VU] or a range of indices IL:IU for the desired eigenvalues. DSTEGR is a compatibility wrapper around the improved DSTEMR routine. See DSTEMR for further details. One important change is that the ABSTOL parameter no longer provides any benefit and hence is no longer used. Note : DSTEGR and DSTEMR work only on machines which follow IEEE-754 floating-point standard in their handling of infinities and NaNs. Normal execution may create these exceptiona values and hence may abort due to a floating point exception in environments which do not conform to the IEEE-754 standard.
 
pure subroutine, public la_qstegr (jobz, range, n, d, e, vl, vu, il, iu, abstol, m, w, z, ldz, isuppz, work, lwork, iwork, liwork, info)
 QSTEGR: computes selected eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix T. Any such unreduced matrix has a well defined set of pairwise different real eigenvalues, the corresponding real eigenvectors are pairwise orthogonal. The spectrum may be computed either completely or partially by specifying either an interval (VL,VU] or a range of indices IL:IU for the desired eigenvalues. QSTEGR is a compatibility wrapper around the improved QSTEMR routine. See QSTEMR for further details. One important change is that the ABSTOL parameter no longer provides any benefit and hence is no longer used. Note : QSTEGR and QSTEMR work only on machines which follow IEEE-754 floating-point standard in their handling of infinities and NaNs. Normal execution may create these exceptiona values and hence may abort due to a floating point exception in environments which do not conform to the IEEE-754 standard.
 
pure subroutine, public la_sstemr (jobz, range, n, d, e, vl, vu, il, iu, m, w, z, ldz, nzc, isuppz, tryrac, work, lwork, iwork, liwork, info)
 SSTEMR: computes selected eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix T. Any such unreduced matrix has a well defined set of pairwise different real eigenvalues, the corresponding real eigenvectors are pairwise orthogonal. The spectrum may be computed either completely or partially by specifying either an interval (VL,VU] or a range of indices IL:IU for the desired eigenvalues. Depending on the number of desired eigenvalues, these are computed either by bisection or the dqds algorithm. Numerically orthogonal eigenvectors are computed by the use of various suitable L D L^T factorizations near clusters of close eigenvalues (referred to as RRRs, Relatively Robust Representations). An informal sketch of the algorithm follows. For each unreduced block (submatrix) of T, (a) Compute T - sigma I = L D L^T, so that L and D define all the wanted eigenvalues to high relative accuracy. This means that small relative changes in the entries of D and L cause only small relative changes in the eigenvalues and eigenvectors. The standard (unfactored) representation of the tridiagonal matrix T does not have this property in general. (b) Compute the eigenvalues to suitable accuracy. If the eigenvectors are desired, the algorithm attains full accuracy of the computed eigenvalues only right before the corresponding vectors have to be computed, see steps c) and d). (c) For each cluster of close eigenvalues, select a new shift close to the cluster, find a new factorization, and refine the shifted eigenvalues to suitable accuracy. (d) For each eigenvalue with a large enough relative separation compute the corresponding eigenvector by forming a rank revealing twisted factorization. Go back to (c) for any clusters that remain. For more details, see:
 
pure subroutine, public la_dstemr (jobz, range, n, d, e, vl, vu, il, iu, m, w, z, ldz, nzc, isuppz, tryrac, work, lwork, iwork, liwork, info)
 DSTEMR: computes selected eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix T. Any such unreduced matrix has a well defined set of pairwise different real eigenvalues, the corresponding real eigenvectors are pairwise orthogonal. The spectrum may be computed either completely or partially by specifying either an interval (VL,VU] or a range of indices IL:IU for the desired eigenvalues. Depending on the number of desired eigenvalues, these are computed either by bisection or the dqds algorithm. Numerically orthogonal eigenvectors are computed by the use of various suitable L D L^T factorizations near clusters of close eigenvalues (referred to as RRRs, Relatively Robust Representations). An informal sketch of the algorithm follows. For each unreduced block (submatrix) of T, (a) Compute T - sigma I = L D L^T, so that L and D define all the wanted eigenvalues to high relative accuracy. This means that small relative changes in the entries of D and L cause only small relative changes in the eigenvalues and eigenvectors. The standard (unfactored) representation of the tridiagonal matrix T does not have this property in general. (b) Compute the eigenvalues to suitable accuracy. If the eigenvectors are desired, the algorithm attains full accuracy of the computed eigenvalues only right before the corresponding vectors have to be computed, see steps c) and d). (c) For each cluster of close eigenvalues, select a new shift close to the cluster, find a new factorization, and refine the shifted eigenvalues to suitable accuracy. (d) For each eigenvalue with a large enough relative separation compute the corresponding eigenvector by forming a rank revealing twisted factorization. Go back to (c) for any clusters that remain. For more details, see:
 
pure subroutine, public la_qstemr (jobz, range, n, d, e, vl, vu, il, iu, m, w, z, ldz, nzc, isuppz, tryrac, work, lwork, iwork, liwork, info)
 QSTEMR: computes selected eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix T. Any such unreduced matrix has a well defined set of pairwise different real eigenvalues, the corresponding real eigenvectors are pairwise orthogonal. The spectrum may be computed either completely or partially by specifying either an interval (VL,VU] or a range of indices IL:IU for the desired eigenvalues. Depending on the number of desired eigenvalues, these are computed either by bisection or the dqds algorithm. Numerically orthogonal eigenvectors are computed by the use of various suitable L D L^T factorizations near clusters of close eigenvalues (referred to as RRRs, Relatively Robust Representations). An informal sketch of the algorithm follows. For each unreduced block (submatrix) of T, (a) Compute T - sigma I = L D L^T, so that L and D define all the wanted eigenvalues to high relative accuracy. This means that small relative changes in the entries of D and L cause only small relative changes in the eigenvalues and eigenvectors. The standard (unfactored) representation of the tridiagonal matrix T does not have this property in general. (b) Compute the eigenvalues to suitable accuracy. If the eigenvectors are desired, the algorithm attains full accuracy of the computed eigenvalues only right before the corresponding vectors have to be computed, see steps c) and d). (c) For each cluster of close eigenvalues, select a new shift close to the cluster, find a new factorization, and refine the shifted eigenvalues to suitable accuracy. (d) For each eigenvalue with a large enough relative separation compute the corresponding eigenvector by forming a rank revealing twisted factorization. Go back to (c) for any clusters that remain. For more details, see:
 
pure subroutine, public la_sstevr (jobz, range, n, d, e, vl, vu, il, iu, abstol, m, w, z, ldz, isuppz, work, lwork, iwork, liwork, info)
 SSTEVR: computes selected eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix T. Eigenvalues and eigenvectors can be selected by specifying either a range of values or a range of indices for the desired eigenvalues. Whenever possible, SSTEVR calls SSTEMR to compute the eigenspectrum using Relatively Robust Representations. SSTEMR computes eigenvalues by the dqds algorithm, while orthogonal eigenvectors are computed from various "good" L D L^T representations (also known as Relatively Robust Representations). Gram-Schmidt orthogonalization is avoided as far as possible. More specifically, the various steps of the algorithm are as follows. For the i-th unreduced block of T, (a) Compute T - sigma_i = L_i D_i L_i^T, such that L_i D_i L_i^T is a relatively robust representation, (b) Compute the eigenvalues, lambda_j, of L_i D_i L_i^T to high relative accuracy by the dqds algorithm, (c) If there is a cluster of close eigenvalues, "choose" sigma_i close to the cluster, and go to step (a), (d) Given the approximate eigenvalue lambda_j of L_i D_i L_i^T, compute the corresponding eigenvector by forming a rank-revealing twisted factorization. The desired accuracy of the output can be specified by the input parameter ABSTOL. For more details, see "A new O(n^2) algorithm for the symmetric tridiagonal eigenvalue/eigenvector problem", by Inderjit Dhillon, Computer Science Division Technical Report No. UCB//CSD-97-971, UC Berkeley, May 1997. Note 1 : SSTEVR calls SSTEMR when the full spectrum is requested on machines which conform to the ieee-754 floating point standard. SSTEVR calls SSTEBZ and SSTEIN on non-ieee machines and when partial spectrum requests are made. Normal execution of SSTEMR may create NaNs and infinities and hence may abort due to a floating point exception in environments which do not handle NaNs and infinities in the ieee standard default manner.
 
pure subroutine, public la_dstevr (jobz, range, n, d, e, vl, vu, il, iu, abstol, m, w, z, ldz, isuppz, work, lwork, iwork, liwork, info)
 DSTEVR: computes selected eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix T. Eigenvalues and eigenvectors can be selected by specifying either a range of values or a range of indices for the desired eigenvalues. Whenever possible, DSTEVR calls DSTEMR to compute the eigenspectrum using Relatively Robust Representations. DSTEMR computes eigenvalues by the dqds algorithm, while orthogonal eigenvectors are computed from various "good" L D L^T representations (also known as Relatively Robust Representations). Gram-Schmidt orthogonalization is avoided as far as possible. More specifically, the various steps of the algorithm are as follows. For the i-th unreduced block of T, (a) Compute T - sigma_i = L_i D_i L_i^T, such that L_i D_i L_i^T is a relatively robust representation, (b) Compute the eigenvalues, lambda_j, of L_i D_i L_i^T to high relative accuracy by the dqds algorithm, (c) If there is a cluster of close eigenvalues, "choose" sigma_i close to the cluster, and go to step (a), (d) Given the approximate eigenvalue lambda_j of L_i D_i L_i^T, compute the corresponding eigenvector by forming a rank-revealing twisted factorization. The desired accuracy of the output can be specified by the input parameter ABSTOL. For more details, see "A new O(n^2) algorithm for the symmetric tridiagonal eigenvalue/eigenvector problem", by Inderjit Dhillon, Computer Science Division Technical Report No. UCB//CSD-97-971, UC Berkeley, May 1997. Note 1 : DSTEVR calls DSTEMR when the full spectrum is requested on machines which conform to the ieee-754 floating point standard. DSTEVR calls DSTEBZ and DSTEIN on non-ieee machines and when partial spectrum requests are made. Normal execution of DSTEMR may create NaNs and infinities and hence may abort due to a floating point exception in environments which do not handle NaNs and infinities in the ieee standard default manner.
 
pure subroutine, public la_qstevr (jobz, range, n, d, e, vl, vu, il, iu, abstol, m, w, z, ldz, isuppz, work, lwork, iwork, liwork, info)
 QSTEVR: computes selected eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix T. Eigenvalues and eigenvectors can be selected by specifying either a range of values or a range of indices for the desired eigenvalues. Whenever possible, QSTEVR calls QSTEMR to compute the eigenspectrum using Relatively Robust Representations. QSTEMR computes eigenvalues by the dqds algorithm, while orthogonal eigenvectors are computed from various "good" L D L^T representations (also known as Relatively Robust Representations). Gram-Schmidt orthogonalization is avoided as far as possible. More specifically, the various steps of the algorithm are as follows. For the i-th unreduced block of T, (a) Compute T - sigma_i = L_i D_i L_i^T, such that L_i D_i L_i^T is a relatively robust representation, (b) Compute the eigenvalues, lambda_j, of L_i D_i L_i^T to high relative accuracy by the dqds algorithm, (c) If there is a cluster of close eigenvalues, "choose" sigma_i close to the cluster, and go to step (a), (d) Given the approximate eigenvalue lambda_j of L_i D_i L_i^T, compute the corresponding eigenvector by forming a rank-revealing twisted factorization. The desired accuracy of the output can be specified by the input parameter ABSTOL. For more details, see "A new O(n^2) algorithm for the symmetric tridiagonal eigenvalue/eigenvector problem", by Inderjit Dhillon, Computer Science Division Technical Report No. UCB//CSD-97-971, UC Berkeley, May 1997. Note 1 : QSTEVR calls QSTEMR when the full spectrum is requested on machines which conform to the ieee-754 floating point standard. QSTEVR calls QSTEBZ and QSTEIN on non-ieee machines and when partial spectrum requests are made. Normal execution of QSTEMR may create NaNs and infinities and hence may abort due to a floating point exception in environments which do not handle NaNs and infinities in the ieee standard default manner.
 
pure subroutine, public la_cstein (n, d, e, m, w, iblock, isplit, z, ldz, work, iwork, ifail, info)
 CSTEIN: computes the eigenvectors of a real symmetric tridiagonal matrix T corresponding to specified eigenvalues, using inverse iteration. The maximum number of iterations allowed for each eigenvector is specified by an internal parameter MAXITS (currently set to 5). Although the eigenvectors are real, they are stored in a complex array, which may be passed to CUNMTR or CUPMTR for back transformation to the eigenvectors of a complex Hermitian matrix which was reduced to tridiagonal form.
 
pure subroutine, public la_zstein (n, d, e, m, w, iblock, isplit, z, ldz, work, iwork, ifail, info)
 ZSTEIN: computes the eigenvectors of a real symmetric tridiagonal matrix T corresponding to specified eigenvalues, using inverse iteration. The maximum number of iterations allowed for each eigenvector is specified by an internal parameter MAXITS (currently set to 5). Although the eigenvectors are real, they are stored in a complex array, which may be passed to ZUNMTR or ZUPMTR for back transformation to the eigenvectors of a complex Hermitian matrix which was reduced to tridiagonal form.
 
pure subroutine, public la_wstein (n, d, e, m, w, iblock, isplit, z, ldz, work, iwork, ifail, info)
 WSTEIN: computes the eigenvectors of a real symmetric tridiagonal matrix T corresponding to specified eigenvalues, using inverse iteration. The maximum number of iterations allowed for each eigenvector is specified by an internal parameter MAXITS (currently set to 5). Although the eigenvectors are real, they are stored in a complex array, which may be passed to WUNMTR or WUPMTR for back transformation to the eigenvectors of a complex Hermitian matrix which was reduced to tridiagonal form.
 
pure subroutine, public la_cpteqr (compz, n, d, e, z, ldz, work, info)
 CPTEQR: computes all eigenvalues and, optionally, eigenvectors of a symmetric positive definite tridiagonal matrix by first factoring the matrix using SPTTRF and then calling CBDSQR to compute the singular values of the bidiagonal factor. This routine computes the eigenvalues of the positive definite tridiagonal matrix to high relative accuracy. This means that if the eigenvalues range over many orders of magnitude in size, then the small eigenvalues and corresponding eigenvectors will be computed more accurately than, for example, with the standard QR method. The eigenvectors of a full or band positive definite Hermitian matrix can also be found if CHETRD, CHPTRD, or CHBTRD has been used to reduce this matrix to tridiagonal form. (The reduction to tridiagonal form, however, may preclude the possibility of obtaining high relative accuracy in the small eigenvalues of the original matrix, if these eigenvalues range over many orders of magnitude.)
 
pure subroutine, public la_zpteqr (compz, n, d, e, z, ldz, work, info)
 ZPTEQR: computes all eigenvalues and, optionally, eigenvectors of a symmetric positive definite tridiagonal matrix by first factoring the matrix using DPTTRF and then calling ZBDSQR to compute the singular values of the bidiagonal factor. This routine computes the eigenvalues of the positive definite tridiagonal matrix to high relative accuracy. This means that if the eigenvalues range over many orders of magnitude in size, then the small eigenvalues and corresponding eigenvectors will be computed more accurately than, for example, with the standard QR method. The eigenvectors of a full or band positive definite Hermitian matrix can also be found if ZHETRD, ZHPTRD, or ZHBTRD has been used to reduce this matrix to tridiagonal form. (The reduction to tridiagonal form, however, may preclude the possibility of obtaining high relative accuracy in the small eigenvalues of the original matrix, if these eigenvalues range over many orders of magnitude.)
 
pure subroutine, public la_wpteqr (compz, n, d, e, z, ldz, work, info)
 WPTEQR: computes all eigenvalues and, optionally, eigenvectors of a symmetric positive definite tridiagonal matrix by first factoring the matrix using QPTTRF and then calling WBDSQR to compute the singular values of the bidiagonal factor. This routine computes the eigenvalues of the positive definite tridiagonal matrix to high relative accuracy. This means that if the eigenvalues range over many orders of magnitude in size, then the small eigenvalues and corresponding eigenvectors will be computed more accurately than, for example, with the standard QR method. The eigenvectors of a full or band positive definite Hermitian matrix can also be found if WHETRD, WHPTRD, or WHBTRD has been used to reduce this matrix to tridiagonal form. (The reduction to tridiagonal form, however, may preclude the possibility of obtaining high relative accuracy in the small eigenvalues of the original matrix, if these eigenvalues range over many orders of magnitude.)
 
pure subroutine, public la_cstemr (jobz, range, n, d, e, vl, vu, il, iu, m, w, z, ldz, nzc, isuppz, tryrac, work, lwork, iwork, liwork, info)
 CSTEMR: computes selected eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix T. Any such unreduced matrix has a well defined set of pairwise different real eigenvalues, the corresponding real eigenvectors are pairwise orthogonal. The spectrum may be computed either completely or partially by specifying either an interval (VL,VU] or a range of indices IL:IU for the desired eigenvalues. Depending on the number of desired eigenvalues, these are computed either by bisection or the dqds algorithm. Numerically orthogonal eigenvectors are computed by the use of various suitable L D L^T factorizations near clusters of close eigenvalues (referred to as RRRs, Relatively Robust Representations). An informal sketch of the algorithm follows. For each unreduced block (submatrix) of T, (a) Compute T - sigma I = L D L^T, so that L and D define all the wanted eigenvalues to high relative accuracy. This means that small relative changes in the entries of D and L cause only small relative changes in the eigenvalues and eigenvectors. The standard (unfactored) representation of the tridiagonal matrix T does not have this property in general. (b) Compute the eigenvalues to suitable accuracy. If the eigenvectors are desired, the algorithm attains full accuracy of the computed eigenvalues only right before the corresponding vectors have to be computed, see steps c) and d). (c) For each cluster of close eigenvalues, select a new shift close to the cluster, find a new factorization, and refine the shifted eigenvalues to suitable accuracy. (d) For each eigenvalue with a large enough relative separation compute the corresponding eigenvector by forming a rank revealing twisted factorization. Go back to (c) for any clusters that remain. For more details, see:
 
pure subroutine, public la_zstemr (jobz, range, n, d, e, vl, vu, il, iu, m, w, z, ldz, nzc, isuppz, tryrac, work, lwork, iwork, liwork, info)
 ZSTEMR: computes selected eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix T. Any such unreduced matrix has a well defined set of pairwise different real eigenvalues, the corresponding real eigenvectors are pairwise orthogonal. The spectrum may be computed either completely or partially by specifying either an interval (VL,VU] or a range of indices IL:IU for the desired eigenvalues. Depending on the number of desired eigenvalues, these are computed either by bisection or the dqds algorithm. Numerically orthogonal eigenvectors are computed by the use of various suitable L D L^T factorizations near clusters of close eigenvalues (referred to as RRRs, Relatively Robust Representations). An informal sketch of the algorithm follows. For each unreduced block (submatrix) of T, (a) Compute T - sigma I = L D L^T, so that L and D define all the wanted eigenvalues to high relative accuracy. This means that small relative changes in the entries of D and L cause only small relative changes in the eigenvalues and eigenvectors. The standard (unfactored) representation of the tridiagonal matrix T does not have this property in general. (b) Compute the eigenvalues to suitable accuracy. If the eigenvectors are desired, the algorithm attains full accuracy of the computed eigenvalues only right before the corresponding vectors have to be computed, see steps c) and d). (c) For each cluster of close eigenvalues, select a new shift close to the cluster, find a new factorization, and refine the shifted eigenvalues to suitable accuracy. (d) For each eigenvalue with a large enough relative separation compute the corresponding eigenvector by forming a rank revealing twisted factorization. Go back to (c) for any clusters that remain. For more details, see:
 
pure subroutine, public la_wstemr (jobz, range, n, d, e, vl, vu, il, iu, m, w, z, ldz, nzc, isuppz, tryrac, work, lwork, iwork, liwork, info)
 WSTEMR: computes selected eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix T. Any such unreduced matrix has a well defined set of pairwise different real eigenvalues, the corresponding real eigenvectors are pairwise orthogonal. The spectrum may be computed either completely or partially by specifying either an interval (VL,VU] or a range of indices IL:IU for the desired eigenvalues. Depending on the number of desired eigenvalues, these are computed either by bisection or the dqds algorithm. Numerically orthogonal eigenvectors are computed by the use of various suitable L D L^T factorizations near clusters of close eigenvalues (referred to as RRRs, Relatively Robust Representations). An informal sketch of the algorithm follows. For each unreduced block (submatrix) of T, (a) Compute T - sigma I = L D L^T, so that L and D define all the wanted eigenvalues to high relative accuracy. This means that small relative changes in the entries of D and L cause only small relative changes in the eigenvalues and eigenvectors. The standard (unfactored) representation of the tridiagonal matrix T does not have this property in general. (b) Compute the eigenvalues to suitable accuracy. If the eigenvectors are desired, the algorithm attains full accuracy of the computed eigenvalues only right before the corresponding vectors have to be computed, see steps c) and d). (c) For each cluster of close eigenvalues, select a new shift close to the cluster, find a new factorization, and refine the shifted eigenvalues to suitable accuracy. (d) For each eigenvalue with a large enough relative separation compute the corresponding eigenvector by forming a rank revealing twisted factorization. Go back to (c) for any clusters that remain. For more details, see:
 
pure subroutine, public la_cstedc (compz, n, d, e, z, ldz, work, lwork, rwork, lrwork, iwork, liwork, info)
 CSTEDC: computes all eigenvalues and, optionally, eigenvectors of a symmetric tridiagonal matrix using the divide and conquer method. The eigenvectors of a full or band complex Hermitian matrix can also be found if CHETRD or CHPTRD or CHBTRD has been used to reduce this matrix to tridiagonal form. This code makes very mild assumptions about floating point arithmetic. It will work on machines with a guard digit in add/subtract, or on those binary machines without guard digits which subtract like the Cray X-MP, Cray Y-MP, Cray C-90, or Cray-2. It could conceivably fail on hexadecimal or decimal machines without guard digits, but we know of none. See SLAED3 for details.
 
pure subroutine, public la_zstedc (compz, n, d, e, z, ldz, work, lwork, rwork, lrwork, iwork, liwork, info)
 ZSTEDC: computes all eigenvalues and, optionally, eigenvectors of a symmetric tridiagonal matrix using the divide and conquer method. The eigenvectors of a full or band complex Hermitian matrix can also be found if ZHETRD or ZHPTRD or ZHBTRD has been used to reduce this matrix to tridiagonal form. This code makes very mild assumptions about floating point arithmetic. It will work on machines with a guard digit in add/subtract, or on those binary machines without guard digits which subtract like the Cray X-MP, Cray Y-MP, Cray C-90, or Cray-2. It could conceivably fail on hexadecimal or decimal machines without guard digits, but we know of none. See DLAED3 for details.
 
pure subroutine, public la_wstedc (compz, n, d, e, z, ldz, work, lwork, rwork, lrwork, iwork, liwork, info)
 WSTEDC: computes all eigenvalues and, optionally, eigenvectors of a symmetric tridiagonal matrix using the divide and conquer method. The eigenvectors of a full or band complex Hermitian matrix can also be found if WHETRD or WHPTRD or WHBTRD has been used to reduce this matrix to tridiagonal form. This code makes very mild assumptions about floating point arithmetic. It will work on machines with a guard digit in add/subtract, or on those binary machines without guard digits which subtract like the Cray X-MP, Cray Y-MP, Cray C-90, or Cray-2. It could conceivably fail on hexadecimal or decimal machines without guard digits, but we know of none. See QLAED3 for details.
 
pure subroutine, public la_cstegr (jobz, range, n, d, e, vl, vu, il, iu, abstol, m, w, z, ldz, isuppz, work, lwork, iwork, liwork, info)
 CSTEGR: computes selected eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix T. Any such unreduced matrix has a well defined set of pairwise different real eigenvalues, the corresponding real eigenvectors are pairwise orthogonal. The spectrum may be computed either completely or partially by specifying either an interval (VL,VU] or a range of indices IL:IU for the desired eigenvalues. CSTEGR is a compatibility wrapper around the improved CSTEMR routine. See SSTEMR for further details. One important change is that the ABSTOL parameter no longer provides any benefit and hence is no longer used. Note : CSTEGR and CSTEMR work only on machines which follow IEEE-754 floating-point standard in their handling of infinities and NaNs. Normal execution may create these exceptiona values and hence may abort due to a floating point exception in environments which do not conform to the IEEE-754 standard.
 
pure subroutine, public la_zstegr (jobz, range, n, d, e, vl, vu, il, iu, abstol, m, w, z, ldz, isuppz, work, lwork, iwork, liwork, info)
 ZSTEGR: computes selected eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix T. Any such unreduced matrix has a well defined set of pairwise different real eigenvalues, the corresponding real eigenvectors are pairwise orthogonal. The spectrum may be computed either completely or partially by specifying either an interval (VL,VU] or a range of indices IL:IU for the desired eigenvalues. ZSTEGR is a compatibility wrapper around the improved ZSTEMR routine. See ZSTEMR for further details. One important change is that the ABSTOL parameter no longer provides any benefit and hence is no longer used. Note : ZSTEGR and ZSTEMR work only on machines which follow IEEE-754 floating-point standard in their handling of infinities and NaNs. Normal execution may create these exceptiona values and hence may abort due to a floating point exception in environments which do not conform to the IEEE-754 standard.
 
pure subroutine, public la_wstegr (jobz, range, n, d, e, vl, vu, il, iu, abstol, m, w, z, ldz, isuppz, work, lwork, iwork, liwork, info)
 WSTEGR: computes selected eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix T. Any such unreduced matrix has a well defined set of pairwise different real eigenvalues, the corresponding real eigenvectors are pairwise orthogonal. The spectrum may be computed either completely or partially by specifying either an interval (VL,VU] or a range of indices IL:IU for the desired eigenvalues. WSTEGR is a compatibility wrapper around the improved WSTEMR routine. See WSTEMR for further details. One important change is that the ABSTOL parameter no longer provides any benefit and hence is no longer used. Note : WSTEGR and WSTEMR work only on machines which follow IEEE-754 floating-point standard in their handling of infinities and NaNs. Normal execution may create these exceptiona values and hence may abort due to a floating point exception in environments which do not conform to the IEEE-754 standard.
 

Detailed Description

Symmetric tridiagonal eigenvalue drivers: divide and conquer, MRRR, bisection and inverse iteration.

Function/Subroutine Documentation

◆ la_cpteqr()

pure subroutine, public la_lapack_eigv_tridiag3::la_cpteqr ( character, intent(in) compz,
integer(ilp), intent(in) n,
real(sp), dimension(*), intent(inout) d,
real(sp), dimension(*), intent(inout) e,
complex(sp), dimension(ldz,*), intent(inout) z,
integer(ilp), intent(in) ldz,
real(sp), dimension(*), intent(out) work,
integer(ilp), intent(out) info )

CPTEQR: computes all eigenvalues and, optionally, eigenvectors of a symmetric positive definite tridiagonal matrix by first factoring the matrix using SPTTRF and then calling CBDSQR to compute the singular values of the bidiagonal factor. This routine computes the eigenvalues of the positive definite tridiagonal matrix to high relative accuracy. This means that if the eigenvalues range over many orders of magnitude in size, then the small eigenvalues and corresponding eigenvectors will be computed more accurately than, for example, with the standard QR method. The eigenvectors of a full or band positive definite Hermitian matrix can also be found if CHETRD, CHPTRD, or CHBTRD has been used to reduce this matrix to tridiagonal form. (The reduction to tridiagonal form, however, may preclude the possibility of obtaining high relative accuracy in the small eigenvalues of the original matrix, if these eigenvalues range over many orders of magnitude.)

Here is the call graph for this function:

◆ la_cstedc()

pure subroutine, public la_lapack_eigv_tridiag3::la_cstedc ( character, intent(in) compz,
integer(ilp), intent(in) n,
real(sp), dimension(*), intent(inout) d,
real(sp), dimension(*), intent(inout) e,
complex(sp), dimension(ldz,*), intent(inout) z,
integer(ilp), intent(in) ldz,
complex(sp), dimension(*), intent(out) work,
integer(ilp), intent(in) lwork,
real(sp), dimension(*), intent(out) rwork,
integer(ilp), intent(in) lrwork,
integer(ilp), dimension(*), intent(out) iwork,
integer(ilp), intent(in) liwork,
integer(ilp), intent(out) info )

CSTEDC: computes all eigenvalues and, optionally, eigenvectors of a symmetric tridiagonal matrix using the divide and conquer method. The eigenvectors of a full or band complex Hermitian matrix can also be found if CHETRD or CHPTRD or CHBTRD has been used to reduce this matrix to tridiagonal form. This code makes very mild assumptions about floating point arithmetic. It will work on machines with a guard digit in add/subtract, or on those binary machines without guard digits which subtract like the Cray X-MP, Cray Y-MP, Cray C-90, or Cray-2. It could conceivably fail on hexadecimal or decimal machines without guard digits, but we know of none. See SLAED3 for details.

Here is the call graph for this function:

◆ la_cstegr()

pure subroutine, public la_lapack_eigv_tridiag3::la_cstegr ( character, intent(in) jobz,
character, intent(in) range,
integer(ilp), intent(in) n,
real(sp), dimension(*), intent(inout) d,
real(sp), dimension(*), intent(inout) e,
real(sp), intent(in) vl,
real(sp), intent(in) vu,
integer(ilp), intent(in) il,
integer(ilp), intent(in) iu,
real(sp), intent(in) abstol,
integer(ilp), intent(out) m,
real(sp), dimension(*), intent(out) w,
complex(sp), dimension(ldz,*), intent(out) z,
integer(ilp), intent(in) ldz,
integer(ilp), dimension(*), intent(out) isuppz,
real(sp), dimension(*), intent(out) work,
integer(ilp), intent(in) lwork,
integer(ilp), dimension(*), intent(out) iwork,
integer(ilp), intent(in) liwork,
integer(ilp), intent(out) info )

CSTEGR: computes selected eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix T. Any such unreduced matrix has a well defined set of pairwise different real eigenvalues, the corresponding real eigenvectors are pairwise orthogonal. The spectrum may be computed either completely or partially by specifying either an interval (VL,VU] or a range of indices IL:IU for the desired eigenvalues. CSTEGR is a compatibility wrapper around the improved CSTEMR routine. See SSTEMR for further details. One important change is that the ABSTOL parameter no longer provides any benefit and hence is no longer used. Note : CSTEGR and CSTEMR work only on machines which follow IEEE-754 floating-point standard in their handling of infinities and NaNs. Normal execution may create these exceptiona values and hence may abort due to a floating point exception in environments which do not conform to the IEEE-754 standard.

Here is the call graph for this function:

◆ la_cstein()

pure subroutine, public la_lapack_eigv_tridiag3::la_cstein ( integer(ilp), intent(in) n,
real(sp), dimension(*), intent(in) d,
real(sp), dimension(*), intent(in) e,
integer(ilp), intent(in) m,
real(sp), dimension(*), intent(in) w,
integer(ilp), dimension(*), intent(in) iblock,
integer(ilp), dimension(*), intent(in) isplit,
complex(sp), dimension(ldz,*), intent(out) z,
integer(ilp), intent(in) ldz,
real(sp), dimension(*), intent(out) work,
integer(ilp), dimension(*), intent(out) iwork,
integer(ilp), dimension(*), intent(out) ifail,
integer(ilp), intent(out) info )

CSTEIN: computes the eigenvectors of a real symmetric tridiagonal matrix T corresponding to specified eigenvalues, using inverse iteration. The maximum number of iterations allowed for each eigenvector is specified by an internal parameter MAXITS (currently set to 5). Although the eigenvectors are real, they are stored in a complex array, which may be passed to CUNMTR or CUPMTR for back transformation to the eigenvectors of a complex Hermitian matrix which was reduced to tridiagonal form.

Here is the call graph for this function:

◆ la_cstemr()

pure subroutine, public la_lapack_eigv_tridiag3::la_cstemr ( character, intent(in) jobz,
character, intent(in) range,
integer(ilp), intent(in) n,
real(sp), dimension(*), intent(inout) d,
real(sp), dimension(*), intent(inout) e,
real(sp), intent(in) vl,
real(sp), intent(in) vu,
integer(ilp), intent(in) il,
integer(ilp), intent(in) iu,
integer(ilp), intent(out) m,
real(sp), dimension(*), intent(out) w,
complex(sp), dimension(ldz,*), intent(out) z,
integer(ilp), intent(in) ldz,
integer(ilp), intent(in) nzc,
integer(ilp), dimension(*), intent(out) isuppz,
logical(lk), intent(inout) tryrac,
real(sp), dimension(*), intent(out) work,
integer(ilp), intent(in) lwork,
integer(ilp), dimension(*), intent(out) iwork,
integer(ilp), intent(in) liwork,
integer(ilp), intent(out) info )

CSTEMR: computes selected eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix T. Any such unreduced matrix has a well defined set of pairwise different real eigenvalues, the corresponding real eigenvectors are pairwise orthogonal. The spectrum may be computed either completely or partially by specifying either an interval (VL,VU] or a range of indices IL:IU for the desired eigenvalues. Depending on the number of desired eigenvalues, these are computed either by bisection or the dqds algorithm. Numerically orthogonal eigenvectors are computed by the use of various suitable L D L^T factorizations near clusters of close eigenvalues (referred to as RRRs, Relatively Robust Representations). An informal sketch of the algorithm follows. For each unreduced block (submatrix) of T, (a) Compute T - sigma I = L D L^T, so that L and D define all the wanted eigenvalues to high relative accuracy. This means that small relative changes in the entries of D and L cause only small relative changes in the eigenvalues and eigenvectors. The standard (unfactored) representation of the tridiagonal matrix T does not have this property in general. (b) Compute the eigenvalues to suitable accuracy. If the eigenvectors are desired, the algorithm attains full accuracy of the computed eigenvalues only right before the corresponding vectors have to be computed, see steps c) and d). (c) For each cluster of close eigenvalues, select a new shift close to the cluster, find a new factorization, and refine the shifted eigenvalues to suitable accuracy. (d) For each eigenvalue with a large enough relative separation compute the corresponding eigenvector by forming a rank revealing twisted factorization. Go back to (c) for any clusters that remain. For more details, see:

  • Inderjit S. Dhillon and Beresford N. Parlett: "Multiple representations to compute orthogonal eigenvectors of symmetric tridiagonal matrices," Linear Algebra and its Applications, 387(1), pp. 1-28, August 2004.
  • Inderjit Dhillon and Beresford Parlett: "Orthogonal Eigenvectors and Relative Gaps," SIAM Journal on Matrix Analysis and Applications, Vol. 25,
  1. Also LAPACK Working Note 154.
  • Inderjit Dhillon: "A new O(n^2) algorithm for the symmetric tridiagonal eigenvalue/eigenvector problem", Computer Science Division Technical Report No. UCB/CSD-97-971, UC Berkeley, May 1997. Further Details 1.CSTEMR works only on machines which follow IEEE-754 floating-point standard in their handling of infinities and NaNs. This permits the use of efficient inner loops avoiding a check for zero divisors.
  1. LAPACK routines can be used to reduce a complex Hermitean matrix to real symmetric tridiagonal form. (Any complex Hermitean tridiagonal matrix has real values on its diagonal and potentially complex numbers on its off-diagonals. By applying a similarity transform with an appropriate diagonal matrix diag(1,e^{i \phy_1}, ... , e^{i \phy_{n-1}}), the complex Hermitean matrix can be transformed into a real symmetric matrix and complex arithmetic can be entirely avoided.) While the eigenvectors of the real symmetric tridiagonal matrix are real, the eigenvectors of original complex Hermitean matrix have complex entries in general. Since LAPACK drivers overwrite the matrix data with the eigenvectors, CSTEMR accepts complex workspace to facilitate interoperability with CUNMTR or CUPMTR.
Here is the call graph for this function:

◆ la_dpteqr()

pure subroutine, public la_lapack_eigv_tridiag3::la_dpteqr ( character, intent(in) compz,
integer(ilp), intent(in) n,
real(dp), dimension(*), intent(inout) d,
real(dp), dimension(*), intent(inout) e,
real(dp), dimension(ldz,*), intent(inout) z,
integer(ilp), intent(in) ldz,
real(dp), dimension(*), intent(out) work,
integer(ilp), intent(out) info )

DPTEQR: computes all eigenvalues and, optionally, eigenvectors of a symmetric positive definite tridiagonal matrix by first factoring the matrix using DPTTRF, and then calling DBDSQR to compute the singular values of the bidiagonal factor. This routine computes the eigenvalues of the positive definite tridiagonal matrix to high relative accuracy. This means that if the eigenvalues range over many orders of magnitude in size, then the small eigenvalues and corresponding eigenvectors will be computed more accurately than, for example, with the standard QR method. The eigenvectors of a full or band symmetric positive definite matrix can also be found if DSYTRD, DSPTRD, or DSBTRD has been used to reduce this matrix to tridiagonal form. (The reduction to tridiagonal form, however, may preclude the possibility of obtaining high relative accuracy in the small eigenvalues of the original matrix, if these eigenvalues range over many orders of magnitude.)

Here is the call graph for this function:

◆ la_dstebz()

pure subroutine, public la_lapack_eigv_tridiag3::la_dstebz ( character, intent(in) range,
character, intent(in) order,
integer(ilp), intent(in) n,
real(dp), intent(in) vl,
real(dp), intent(in) vu,
integer(ilp), intent(in) il,
integer(ilp), intent(in) iu,
real(dp), intent(in) abstol,
real(dp), dimension(*), intent(in) d,
real(dp), dimension(*), intent(in) e,
integer(ilp), intent(out) m,
integer(ilp), intent(out) nsplit,
real(dp), dimension(*), intent(out) w,
integer(ilp), dimension(*), intent(out) iblock,
integer(ilp), dimension(*), intent(out) isplit,
real(dp), dimension(*), intent(out) work,
integer(ilp), dimension(*), intent(out) iwork,
integer(ilp), intent(out) info )

DSTEBZ: computes the eigenvalues of a symmetric tridiagonal matrix T. The user may ask for all eigenvalues, all eigenvalues in the half-open interval (VL, VU], or the IL-th through IU-th eigenvalues. To avoid overflow, the matrix must be scaled so that its largest element is no greater than overflow**(1/2) * underflow**(1/4) in absolute value, and for greatest accuracy, it should not be much smaller than that. See W. Kahan "Accurate Eigenvalues of a Symmetric Tridiagonal Matrix", Report CS41, Computer Science Dept., Stanford University, July 21, 1966.

Here is the call graph for this function:

◆ la_dstedc()

pure subroutine, public la_lapack_eigv_tridiag3::la_dstedc ( character, intent(in) compz,
integer(ilp), intent(in) n,
real(dp), dimension(*), intent(inout) d,
real(dp), dimension(*), intent(inout) e,
real(dp), dimension(ldz,*), intent(inout) z,
integer(ilp), intent(in) ldz,
real(dp), dimension(*), intent(out) work,
integer(ilp), intent(in) lwork,
integer(ilp), dimension(*), intent(out) iwork,
integer(ilp), intent(in) liwork,
integer(ilp), intent(out) info )

DSTEDC: computes all eigenvalues and, optionally, eigenvectors of a symmetric tridiagonal matrix using the divide and conquer method. The eigenvectors of a full or band real symmetric matrix can also be found if DSYTRD or DSPTRD or DSBTRD has been used to reduce this matrix to tridiagonal form. This code makes very mild assumptions about floating point arithmetic. It will work on machines with a guard digit in add/subtract, or on those binary machines without guard digits which subtract like the Cray X-MP, Cray Y-MP, Cray C-90, or Cray-2. It could conceivably fail on hexadecimal or decimal machines without guard digits, but we know of none. See DLAED3 for details.

Here is the call graph for this function:

◆ la_dstegr()

pure subroutine, public la_lapack_eigv_tridiag3::la_dstegr ( character, intent(in) jobz,
character, intent(in) range,
integer(ilp), intent(in) n,
real(dp), dimension(*), intent(inout) d,
real(dp), dimension(*), intent(inout) e,
real(dp), intent(in) vl,
real(dp), intent(in) vu,
integer(ilp), intent(in) il,
integer(ilp), intent(in) iu,
real(dp), intent(in) abstol,
integer(ilp), intent(out) m,
real(dp), dimension(*), intent(out) w,
real(dp), dimension(ldz,*), intent(out) z,
integer(ilp), intent(in) ldz,
integer(ilp), dimension(*), intent(out) isuppz,
real(dp), dimension(*), intent(out) work,
integer(ilp), intent(in) lwork,
integer(ilp), dimension(*), intent(out) iwork,
integer(ilp), intent(in) liwork,
integer(ilp), intent(out) info )

DSTEGR: computes selected eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix T. Any such unreduced matrix has a well defined set of pairwise different real eigenvalues, the corresponding real eigenvectors are pairwise orthogonal. The spectrum may be computed either completely or partially by specifying either an interval (VL,VU] or a range of indices IL:IU for the desired eigenvalues. DSTEGR is a compatibility wrapper around the improved DSTEMR routine. See DSTEMR for further details. One important change is that the ABSTOL parameter no longer provides any benefit and hence is no longer used. Note : DSTEGR and DSTEMR work only on machines which follow IEEE-754 floating-point standard in their handling of infinities and NaNs. Normal execution may create these exceptiona values and hence may abort due to a floating point exception in environments which do not conform to the IEEE-754 standard.

Here is the call graph for this function:

◆ la_dstein()

pure subroutine, public la_lapack_eigv_tridiag3::la_dstein ( integer(ilp), intent(in) n,
real(dp), dimension(*), intent(in) d,
real(dp), dimension(*), intent(in) e,
integer(ilp), intent(in) m,
real(dp), dimension(*), intent(in) w,
integer(ilp), dimension(*), intent(in) iblock,
integer(ilp), dimension(*), intent(in) isplit,
real(dp), dimension(ldz,*), intent(out) z,
integer(ilp), intent(in) ldz,
real(dp), dimension(*), intent(out) work,
integer(ilp), dimension(*), intent(out) iwork,
integer(ilp), dimension(*), intent(out) ifail,
integer(ilp), intent(out) info )

DSTEIN: computes the eigenvectors of a real symmetric tridiagonal matrix T corresponding to specified eigenvalues, using inverse iteration. The maximum number of iterations allowed for each eigenvector is specified by an internal parameter MAXITS (currently set to 5).

Here is the call graph for this function:

◆ la_dstemr()

pure subroutine, public la_lapack_eigv_tridiag3::la_dstemr ( character, intent(in) jobz,
character, intent(in) range,
integer(ilp), intent(in) n,
real(dp), dimension(*), intent(inout) d,
real(dp), dimension(*), intent(inout) e,
real(dp), intent(in) vl,
real(dp), intent(in) vu,
integer(ilp), intent(in) il,
integer(ilp), intent(in) iu,
integer(ilp), intent(out) m,
real(dp), dimension(*), intent(out) w,
real(dp), dimension(ldz,*), intent(out) z,
integer(ilp), intent(in) ldz,
integer(ilp), intent(in) nzc,
integer(ilp), dimension(*), intent(out) isuppz,
logical(lk), intent(inout) tryrac,
real(dp), dimension(*), intent(out) work,
integer(ilp), intent(in) lwork,
integer(ilp), dimension(*), intent(out) iwork,
integer(ilp), intent(in) liwork,
integer(ilp), intent(out) info )

DSTEMR: computes selected eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix T. Any such unreduced matrix has a well defined set of pairwise different real eigenvalues, the corresponding real eigenvectors are pairwise orthogonal. The spectrum may be computed either completely or partially by specifying either an interval (VL,VU] or a range of indices IL:IU for the desired eigenvalues. Depending on the number of desired eigenvalues, these are computed either by bisection or the dqds algorithm. Numerically orthogonal eigenvectors are computed by the use of various suitable L D L^T factorizations near clusters of close eigenvalues (referred to as RRRs, Relatively Robust Representations). An informal sketch of the algorithm follows. For each unreduced block (submatrix) of T, (a) Compute T - sigma I = L D L^T, so that L and D define all the wanted eigenvalues to high relative accuracy. This means that small relative changes in the entries of D and L cause only small relative changes in the eigenvalues and eigenvectors. The standard (unfactored) representation of the tridiagonal matrix T does not have this property in general. (b) Compute the eigenvalues to suitable accuracy. If the eigenvectors are desired, the algorithm attains full accuracy of the computed eigenvalues only right before the corresponding vectors have to be computed, see steps c) and d). (c) For each cluster of close eigenvalues, select a new shift close to the cluster, find a new factorization, and refine the shifted eigenvalues to suitable accuracy. (d) For each eigenvalue with a large enough relative separation compute the corresponding eigenvector by forming a rank revealing twisted factorization. Go back to (c) for any clusters that remain. For more details, see:

  • Inderjit S. Dhillon and Beresford N. Parlett: "Multiple representations to compute orthogonal eigenvectors of symmetric tridiagonal matrices," Linear Algebra and its Applications, 387(1), pp. 1-28, August 2004.
  • Inderjit Dhillon and Beresford Parlett: "Orthogonal Eigenvectors and Relative Gaps," SIAM Journal on Matrix Analysis and Applications, Vol. 25,
  1. Also LAPACK Working Note 154.
  • Inderjit Dhillon: "A new O(n^2) algorithm for the symmetric tridiagonal eigenvalue/eigenvector problem", Computer Science Division Technical Report No. UCB/CSD-97-971, UC Berkeley, May 1997. Further Details 1.DSTEMR works only on machines which follow IEEE-754 floating-point standard in their handling of infinities and NaNs. This permits the use of efficient inner loops avoiding a check for zero divisors.
Here is the call graph for this function:

◆ la_dsterf()

pure subroutine, public la_lapack_eigv_tridiag3::la_dsterf ( integer(ilp), intent(in) n,
real(dp), dimension(*), intent(inout) d,
real(dp), dimension(*), intent(inout) e,
integer(ilp), intent(out) info )

DSTERF: computes all eigenvalues of a symmetric tridiagonal matrix using the Pal-Walker-Kahan variant of the QL or QR algorithm.

Here is the call graph for this function:

◆ la_dstev()

pure subroutine, public la_lapack_eigv_tridiag3::la_dstev ( character, intent(in) jobz,
integer(ilp), intent(in) n,
real(dp), dimension(*), intent(inout) d,
real(dp), dimension(*), intent(inout) e,
real(dp), dimension(ldz,*), intent(out) z,
integer(ilp), intent(in) ldz,
real(dp), dimension(*), intent(out) work,
integer(ilp), intent(out) info )

DSTEV: computes all eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix A.

Here is the call graph for this function:

◆ la_dstevd()

pure subroutine, public la_lapack_eigv_tridiag3::la_dstevd ( character, intent(in) jobz,
integer(ilp), intent(in) n,
real(dp), dimension(*), intent(inout) d,
real(dp), dimension(*), intent(inout) e,
real(dp), dimension(ldz,*), intent(out) z,
integer(ilp), intent(in) ldz,
real(dp), dimension(*), intent(out) work,
integer(ilp), intent(in) lwork,
integer(ilp), dimension(*), intent(out) iwork,
integer(ilp), intent(in) liwork,
integer(ilp), intent(out) info )

DSTEVD: computes all eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix. If eigenvectors are desired, it uses a divide and conquer algorithm. The divide and conquer algorithm makes very mild assumptions about floating point arithmetic. It will work on machines with a guard digit in add/subtract, or on those binary machines without guard digits which subtract like the Cray X-MP, Cray Y-MP, Cray C-90, or Cray-2. It could conceivably fail on hexadecimal or decimal machines without guard digits, but we know of none.

Here is the call graph for this function:

◆ la_dstevr()

pure subroutine, public la_lapack_eigv_tridiag3::la_dstevr ( character, intent(in) jobz,
character, intent(in) range,
integer(ilp), intent(in) n,
real(dp), dimension(*), intent(inout) d,
real(dp), dimension(*), intent(inout) e,
real(dp), intent(in) vl,
real(dp), intent(in) vu,
integer(ilp), intent(in) il,
integer(ilp), intent(in) iu,
real(dp), intent(in) abstol,
integer(ilp), intent(out) m,
real(dp), dimension(*), intent(out) w,
real(dp), dimension(ldz,*), intent(out) z,
integer(ilp), intent(in) ldz,
integer(ilp), dimension(*), intent(out) isuppz,
real(dp), dimension(*), intent(out) work,
integer(ilp), intent(in) lwork,
integer(ilp), dimension(*), intent(out) iwork,
integer(ilp), intent(in) liwork,
integer(ilp), intent(out) info )

DSTEVR: computes selected eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix T. Eigenvalues and eigenvectors can be selected by specifying either a range of values or a range of indices for the desired eigenvalues. Whenever possible, DSTEVR calls DSTEMR to compute the eigenspectrum using Relatively Robust Representations. DSTEMR computes eigenvalues by the dqds algorithm, while orthogonal eigenvectors are computed from various "good" L D L^T representations (also known as Relatively Robust Representations). Gram-Schmidt orthogonalization is avoided as far as possible. More specifically, the various steps of the algorithm are as follows. For the i-th unreduced block of T, (a) Compute T - sigma_i = L_i D_i L_i^T, such that L_i D_i L_i^T is a relatively robust representation, (b) Compute the eigenvalues, lambda_j, of L_i D_i L_i^T to high relative accuracy by the dqds algorithm, (c) If there is a cluster of close eigenvalues, "choose" sigma_i close to the cluster, and go to step (a), (d) Given the approximate eigenvalue lambda_j of L_i D_i L_i^T, compute the corresponding eigenvector by forming a rank-revealing twisted factorization. The desired accuracy of the output can be specified by the input parameter ABSTOL. For more details, see "A new O(n^2) algorithm for the symmetric tridiagonal eigenvalue/eigenvector problem", by Inderjit Dhillon, Computer Science Division Technical Report No. UCB//CSD-97-971, UC Berkeley, May 1997. Note 1 : DSTEVR calls DSTEMR when the full spectrum is requested on machines which conform to the ieee-754 floating point standard. DSTEVR calls DSTEBZ and DSTEIN on non-ieee machines and when partial spectrum requests are made. Normal execution of DSTEMR may create NaNs and infinities and hence may abort due to a floating point exception in environments which do not handle NaNs and infinities in the ieee standard default manner.

Here is the call graph for this function:

◆ la_dstevx()

pure subroutine, public la_lapack_eigv_tridiag3::la_dstevx ( character, intent(in) jobz,
character, intent(in) range,
integer(ilp), intent(in) n,
real(dp), dimension(*), intent(inout) d,
real(dp), dimension(*), intent(inout) e,
real(dp), intent(in) vl,
real(dp), intent(in) vu,
integer(ilp), intent(in) il,
integer(ilp), intent(in) iu,
real(dp), intent(in) abstol,
integer(ilp), intent(out) m,
real(dp), dimension(*), intent(out) w,
real(dp), dimension(ldz,*), intent(out) z,
integer(ilp), intent(in) ldz,
real(dp), dimension(*), intent(out) work,
integer(ilp), dimension(*), intent(out) iwork,
integer(ilp), dimension(*), intent(out) ifail,
integer(ilp), intent(out) info )

DSTEVX: computes selected eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix A. Eigenvalues and eigenvectors can be selected by specifying either a range of values or a range of indices for the desired eigenvalues.

Here is the call graph for this function:

◆ la_qpteqr()

pure subroutine, public la_lapack_eigv_tridiag3::la_qpteqr ( character, intent(in) compz,
integer(ilp), intent(in) n,
real(qp), dimension(*), intent(inout) d,
real(qp), dimension(*), intent(inout) e,
real(qp), dimension(ldz,*), intent(inout) z,
integer(ilp), intent(in) ldz,
real(qp), dimension(*), intent(out) work,
integer(ilp), intent(out) info )

QPTEQR: computes all eigenvalues and, optionally, eigenvectors of a symmetric positive definite tridiagonal matrix by first factoring the matrix using QPTTRF, and then calling QBDSQR to compute the singular values of the bidiagonal factor. This routine computes the eigenvalues of the positive definite tridiagonal matrix to high relative accuracy. This means that if the eigenvalues range over many orders of magnitude in size, then the small eigenvalues and corresponding eigenvectors will be computed more accurately than, for example, with the standard QR method. The eigenvectors of a full or band symmetric positive definite matrix can also be found if QSYTRD, QSPTRD, or QSBTRD has been used to reduce this matrix to tridiagonal form. (The reduction to tridiagonal form, however, may preclude the possibility of obtaining high relative accuracy in the small eigenvalues of the original matrix, if these eigenvalues range over many orders of magnitude.)

Here is the call graph for this function:

◆ la_qstebz()

pure subroutine, public la_lapack_eigv_tridiag3::la_qstebz ( character, intent(in) range,
character, intent(in) order,
integer(ilp), intent(in) n,
real(qp), intent(in) vl,
real(qp), intent(in) vu,
integer(ilp), intent(in) il,
integer(ilp), intent(in) iu,
real(qp), intent(in) abstol,
real(qp), dimension(*), intent(in) d,
real(qp), dimension(*), intent(in) e,
integer(ilp), intent(out) m,
integer(ilp), intent(out) nsplit,
real(qp), dimension(*), intent(out) w,
integer(ilp), dimension(*), intent(out) iblock,
integer(ilp), dimension(*), intent(out) isplit,
real(qp), dimension(*), intent(out) work,
integer(ilp), dimension(*), intent(out) iwork,
integer(ilp), intent(out) info )

QSTEBZ: computes the eigenvalues of a symmetric tridiagonal matrix T. The user may ask for all eigenvalues, all eigenvalues in the half-open interval (VL, VU], or the IL-th through IU-th eigenvalues. To avoid overflow, the matrix must be scaled so that its largest element is no greater than overflow**(1/2) * underflow**(1/4) in absolute value, and for greatest accuracy, it should not be much smaller than that. See W. Kahan "Accurate Eigenvalues of a Symmetric Tridiagonal Matrix", Report CS41, Computer Science Dept., Stanford University, July 21, 1966.

Here is the call graph for this function:

◆ la_qstedc()

pure subroutine, public la_lapack_eigv_tridiag3::la_qstedc ( character, intent(in) compz,
integer(ilp), intent(in) n,
real(qp), dimension(*), intent(inout) d,
real(qp), dimension(*), intent(inout) e,
real(qp), dimension(ldz,*), intent(inout) z,
integer(ilp), intent(in) ldz,
real(qp), dimension(*), intent(out) work,
integer(ilp), intent(in) lwork,
integer(ilp), dimension(*), intent(out) iwork,
integer(ilp), intent(in) liwork,
integer(ilp), intent(out) info )

QSTEDC: computes all eigenvalues and, optionally, eigenvectors of a symmetric tridiagonal matrix using the divide and conquer method. The eigenvectors of a full or band real symmetric matrix can also be found if QSYTRD or QSPTRD or QSBTRD has been used to reduce this matrix to tridiagonal form. This code makes very mild assumptions about floating point arithmetic. It will work on machines with a guard digit in add/subtract, or on those binary machines without guard digits which subtract like the Cray X-MP, Cray Y-MP, Cray C-90, or Cray-2. It could conceivably fail on hexadecimal or decimal machines without guard digits, but we know of none. See QLAED3 for details.

Here is the call graph for this function:

◆ la_qstegr()

pure subroutine, public la_lapack_eigv_tridiag3::la_qstegr ( character, intent(in) jobz,
character, intent(in) range,
integer(ilp), intent(in) n,
real(qp), dimension(*), intent(inout) d,
real(qp), dimension(*), intent(inout) e,
real(qp), intent(in) vl,
real(qp), intent(in) vu,
integer(ilp), intent(in) il,
integer(ilp), intent(in) iu,
real(qp), intent(in) abstol,
integer(ilp), intent(out) m,
real(qp), dimension(*), intent(out) w,
real(qp), dimension(ldz,*), intent(out) z,
integer(ilp), intent(in) ldz,
integer(ilp), dimension(*), intent(out) isuppz,
real(qp), dimension(*), intent(out) work,
integer(ilp), intent(in) lwork,
integer(ilp), dimension(*), intent(out) iwork,
integer(ilp), intent(in) liwork,
integer(ilp), intent(out) info )

QSTEGR: computes selected eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix T. Any such unreduced matrix has a well defined set of pairwise different real eigenvalues, the corresponding real eigenvectors are pairwise orthogonal. The spectrum may be computed either completely or partially by specifying either an interval (VL,VU] or a range of indices IL:IU for the desired eigenvalues. QSTEGR is a compatibility wrapper around the improved QSTEMR routine. See QSTEMR for further details. One important change is that the ABSTOL parameter no longer provides any benefit and hence is no longer used. Note : QSTEGR and QSTEMR work only on machines which follow IEEE-754 floating-point standard in their handling of infinities and NaNs. Normal execution may create these exceptiona values and hence may abort due to a floating point exception in environments which do not conform to the IEEE-754 standard.

Here is the call graph for this function:

◆ la_qstein()

pure subroutine, public la_lapack_eigv_tridiag3::la_qstein ( integer(ilp), intent(in) n,
real(qp), dimension(*), intent(in) d,
real(qp), dimension(*), intent(in) e,
integer(ilp), intent(in) m,
real(qp), dimension(*), intent(in) w,
integer(ilp), dimension(*), intent(in) iblock,
integer(ilp), dimension(*), intent(in) isplit,
real(qp), dimension(ldz,*), intent(out) z,
integer(ilp), intent(in) ldz,
real(qp), dimension(*), intent(out) work,
integer(ilp), dimension(*), intent(out) iwork,
integer(ilp), dimension(*), intent(out) ifail,
integer(ilp), intent(out) info )

QSTEIN: computes the eigenvectors of a real symmetric tridiagonal matrix T corresponding to specified eigenvalues, using inverse iteration. The maximum number of iterations allowed for each eigenvector is specified by an internal parameter MAXITS (currently set to 5).

Here is the call graph for this function:

◆ la_qstemr()

pure subroutine, public la_lapack_eigv_tridiag3::la_qstemr ( character, intent(in) jobz,
character, intent(in) range,
integer(ilp), intent(in) n,
real(qp), dimension(*), intent(inout) d,
real(qp), dimension(*), intent(inout) e,
real(qp), intent(in) vl,
real(qp), intent(in) vu,
integer(ilp), intent(in) il,
integer(ilp), intent(in) iu,
integer(ilp), intent(out) m,
real(qp), dimension(*), intent(out) w,
real(qp), dimension(ldz,*), intent(out) z,
integer(ilp), intent(in) ldz,
integer(ilp), intent(in) nzc,
integer(ilp), dimension(*), intent(out) isuppz,
logical(lk), intent(inout) tryrac,
real(qp), dimension(*), intent(out) work,
integer(ilp), intent(in) lwork,
integer(ilp), dimension(*), intent(out) iwork,
integer(ilp), intent(in) liwork,
integer(ilp), intent(out) info )

QSTEMR: computes selected eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix T. Any such unreduced matrix has a well defined set of pairwise different real eigenvalues, the corresponding real eigenvectors are pairwise orthogonal. The spectrum may be computed either completely or partially by specifying either an interval (VL,VU] or a range of indices IL:IU for the desired eigenvalues. Depending on the number of desired eigenvalues, these are computed either by bisection or the dqds algorithm. Numerically orthogonal eigenvectors are computed by the use of various suitable L D L^T factorizations near clusters of close eigenvalues (referred to as RRRs, Relatively Robust Representations). An informal sketch of the algorithm follows. For each unreduced block (submatrix) of T, (a) Compute T - sigma I = L D L^T, so that L and D define all the wanted eigenvalues to high relative accuracy. This means that small relative changes in the entries of D and L cause only small relative changes in the eigenvalues and eigenvectors. The standard (unfactored) representation of the tridiagonal matrix T does not have this property in general. (b) Compute the eigenvalues to suitable accuracy. If the eigenvectors are desired, the algorithm attains full accuracy of the computed eigenvalues only right before the corresponding vectors have to be computed, see steps c) and d). (c) For each cluster of close eigenvalues, select a new shift close to the cluster, find a new factorization, and refine the shifted eigenvalues to suitable accuracy. (d) For each eigenvalue with a large enough relative separation compute the corresponding eigenvector by forming a rank revealing twisted factorization. Go back to (c) for any clusters that remain. For more details, see:

  • Inderjit S. Dhillon and Beresford N. Parlett: "Multiple representations to compute orthogonal eigenvectors of symmetric tridiagonal matrices," Linear Algebra and its Applications, 387(1), pp. 1-28, August 2004.
  • Inderjit Dhillon and Beresford Parlett: "Orthogonal Eigenvectors and Relative Gaps," SIAM Journal on Matrix Analysis and Applications, Vol. 25,
  1. Also LAPACK Working Note 154.
  • Inderjit Dhillon: "A new O(n^2) algorithm for the symmetric tridiagonal eigenvalue/eigenvector problem", Computer Science Division Technical Report No. UCB/CSD-97-971, UC Berkeley, May 1997. Further Details 1.QSTEMR works only on machines which follow IEEE-754 floating-point standard in their handling of infinities and NaNs. This permits the use of efficient inner loops avoiding a check for zero divisors.
Here is the call graph for this function:

◆ la_qsterf()

pure subroutine, public la_lapack_eigv_tridiag3::la_qsterf ( integer(ilp), intent(in) n,
real(qp), dimension(*), intent(inout) d,
real(qp), dimension(*), intent(inout) e,
integer(ilp), intent(out) info )

QSTERF: computes all eigenvalues of a symmetric tridiagonal matrix using the Pal-Walker-Kahan variant of the QL or QR algorithm.

Here is the call graph for this function:

◆ la_qstev()

pure subroutine, public la_lapack_eigv_tridiag3::la_qstev ( character, intent(in) jobz,
integer(ilp), intent(in) n,
real(qp), dimension(*), intent(inout) d,
real(qp), dimension(*), intent(inout) e,
real(qp), dimension(ldz,*), intent(out) z,
integer(ilp), intent(in) ldz,
real(qp), dimension(*), intent(out) work,
integer(ilp), intent(out) info )

QSTEV: computes all eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix A.

Here is the call graph for this function:

◆ la_qstevd()

pure subroutine, public la_lapack_eigv_tridiag3::la_qstevd ( character, intent(in) jobz,
integer(ilp), intent(in) n,
real(qp), dimension(*), intent(inout) d,
real(qp), dimension(*), intent(inout) e,
real(qp), dimension(ldz,*), intent(out) z,
integer(ilp), intent(in) ldz,
real(qp), dimension(*), intent(out) work,
integer(ilp), intent(in) lwork,
integer(ilp), dimension(*), intent(out) iwork,
integer(ilp), intent(in) liwork,
integer(ilp), intent(out) info )

QSTEVD: computes all eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix. If eigenvectors are desired, it uses a divide and conquer algorithm. The divide and conquer algorithm makes very mild assumptions about floating point arithmetic. It will work on machines with a guard digit in add/subtract, or on those binary machines without guard digits which subtract like the Cray X-MP, Cray Y-MP, Cray C-90, or Cray-2. It could conceivably fail on hexadecimal or decimal machines without guard digits, but we know of none.

Here is the call graph for this function:

◆ la_qstevr()

pure subroutine, public la_lapack_eigv_tridiag3::la_qstevr ( character, intent(in) jobz,
character, intent(in) range,
integer(ilp), intent(in) n,
real(qp), dimension(*), intent(inout) d,
real(qp), dimension(*), intent(inout) e,
real(qp), intent(in) vl,
real(qp), intent(in) vu,
integer(ilp), intent(in) il,
integer(ilp), intent(in) iu,
real(qp), intent(in) abstol,
integer(ilp), intent(out) m,
real(qp), dimension(*), intent(out) w,
real(qp), dimension(ldz,*), intent(out) z,
integer(ilp), intent(in) ldz,
integer(ilp), dimension(*), intent(out) isuppz,
real(qp), dimension(*), intent(out) work,
integer(ilp), intent(in) lwork,
integer(ilp), dimension(*), intent(out) iwork,
integer(ilp), intent(in) liwork,
integer(ilp), intent(out) info )

QSTEVR: computes selected eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix T. Eigenvalues and eigenvectors can be selected by specifying either a range of values or a range of indices for the desired eigenvalues. Whenever possible, QSTEVR calls QSTEMR to compute the eigenspectrum using Relatively Robust Representations. QSTEMR computes eigenvalues by the dqds algorithm, while orthogonal eigenvectors are computed from various "good" L D L^T representations (also known as Relatively Robust Representations). Gram-Schmidt orthogonalization is avoided as far as possible. More specifically, the various steps of the algorithm are as follows. For the i-th unreduced block of T, (a) Compute T - sigma_i = L_i D_i L_i^T, such that L_i D_i L_i^T is a relatively robust representation, (b) Compute the eigenvalues, lambda_j, of L_i D_i L_i^T to high relative accuracy by the dqds algorithm, (c) If there is a cluster of close eigenvalues, "choose" sigma_i close to the cluster, and go to step (a), (d) Given the approximate eigenvalue lambda_j of L_i D_i L_i^T, compute the corresponding eigenvector by forming a rank-revealing twisted factorization. The desired accuracy of the output can be specified by the input parameter ABSTOL. For more details, see "A new O(n^2) algorithm for the symmetric tridiagonal eigenvalue/eigenvector problem", by Inderjit Dhillon, Computer Science Division Technical Report No. UCB//CSD-97-971, UC Berkeley, May 1997. Note 1 : QSTEVR calls QSTEMR when the full spectrum is requested on machines which conform to the ieee-754 floating point standard. QSTEVR calls QSTEBZ and QSTEIN on non-ieee machines and when partial spectrum requests are made. Normal execution of QSTEMR may create NaNs and infinities and hence may abort due to a floating point exception in environments which do not handle NaNs and infinities in the ieee standard default manner.

Here is the call graph for this function:

◆ la_qstevx()

pure subroutine, public la_lapack_eigv_tridiag3::la_qstevx ( character, intent(in) jobz,
character, intent(in) range,
integer(ilp), intent(in) n,
real(qp), dimension(*), intent(inout) d,
real(qp), dimension(*), intent(inout) e,
real(qp), intent(in) vl,
real(qp), intent(in) vu,
integer(ilp), intent(in) il,
integer(ilp), intent(in) iu,
real(qp), intent(in) abstol,
integer(ilp), intent(out) m,
real(qp), dimension(*), intent(out) w,
real(qp), dimension(ldz,*), intent(out) z,
integer(ilp), intent(in) ldz,
real(qp), dimension(*), intent(out) work,
integer(ilp), dimension(*), intent(out) iwork,
integer(ilp), dimension(*), intent(out) ifail,
integer(ilp), intent(out) info )

QSTEVX: computes selected eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix A. Eigenvalues and eigenvectors can be selected by specifying either a range of values or a range of indices for the desired eigenvalues.

Here is the call graph for this function:

◆ la_spteqr()

pure subroutine, public la_lapack_eigv_tridiag3::la_spteqr ( character, intent(in) compz,
integer(ilp), intent(in) n,
real(sp), dimension(*), intent(inout) d,
real(sp), dimension(*), intent(inout) e,
real(sp), dimension(ldz,*), intent(inout) z,
integer(ilp), intent(in) ldz,
real(sp), dimension(*), intent(out) work,
integer(ilp), intent(out) info )

SPTEQR: computes all eigenvalues and, optionally, eigenvectors of a symmetric positive definite tridiagonal matrix by first factoring the matrix using SPTTRF, and then calling SBDSQR to compute the singular values of the bidiagonal factor. This routine computes the eigenvalues of the positive definite tridiagonal matrix to high relative accuracy. This means that if the eigenvalues range over many orders of magnitude in size, then the small eigenvalues and corresponding eigenvectors will be computed more accurately than, for example, with the standard QR method. The eigenvectors of a full or band symmetric positive definite matrix can also be found if SSYTRD, SSPTRD, or SSBTRD has been used to reduce this matrix to tridiagonal form. (The reduction to tridiagonal form, however, may preclude the possibility of obtaining high relative accuracy in the small eigenvalues of the original matrix, if these eigenvalues range over many orders of magnitude.)

Here is the call graph for this function:

◆ la_sstebz()

pure subroutine, public la_lapack_eigv_tridiag3::la_sstebz ( character, intent(in) range,
character, intent(in) order,
integer(ilp), intent(in) n,
real(sp), intent(in) vl,
real(sp), intent(in) vu,
integer(ilp), intent(in) il,
integer(ilp), intent(in) iu,
real(sp), intent(in) abstol,
real(sp), dimension(*), intent(in) d,
real(sp), dimension(*), intent(in) e,
integer(ilp), intent(out) m,
integer(ilp), intent(out) nsplit,
real(sp), dimension(*), intent(out) w,
integer(ilp), dimension(*), intent(out) iblock,
integer(ilp), dimension(*), intent(out) isplit,
real(sp), dimension(*), intent(out) work,
integer(ilp), dimension(*), intent(out) iwork,
integer(ilp), intent(out) info )

SSTEBZ: computes the eigenvalues of a symmetric tridiagonal matrix T. The user may ask for all eigenvalues, all eigenvalues in the half-open interval (VL, VU], or the IL-th through IU-th eigenvalues. To avoid overflow, the matrix must be scaled so that its largest element is no greater than overflow**(1/2) * underflow**(1/4) in absolute value, and for greatest accuracy, it should not be much smaller than that. See W. Kahan "Accurate Eigenvalues of a Symmetric Tridiagonal Matrix", Report CS41, Computer Science Dept., Stanford University, July 21, 1966.

Here is the call graph for this function:

◆ la_sstedc()

pure subroutine, public la_lapack_eigv_tridiag3::la_sstedc ( character, intent(in) compz,
integer(ilp), intent(in) n,
real(sp), dimension(*), intent(inout) d,
real(sp), dimension(*), intent(inout) e,
real(sp), dimension(ldz,*), intent(inout) z,
integer(ilp), intent(in) ldz,
real(sp), dimension(*), intent(out) work,
integer(ilp), intent(in) lwork,
integer(ilp), dimension(*), intent(out) iwork,
integer(ilp), intent(in) liwork,
integer(ilp), intent(out) info )

SSTEDC: computes all eigenvalues and, optionally, eigenvectors of a symmetric tridiagonal matrix using the divide and conquer method. The eigenvectors of a full or band real symmetric matrix can also be found if SSYTRD or SSPTRD or SSBTRD has been used to reduce this matrix to tridiagonal form. This code makes very mild assumptions about floating point arithmetic. It will work on machines with a guard digit in add/subtract, or on those binary machines without guard digits which subtract like the Cray X-MP, Cray Y-MP, Cray C-90, or Cray-2. It could conceivably fail on hexadecimal or decimal machines without guard digits, but we know of none. See SLAED3 for details.

Here is the call graph for this function:

◆ la_sstegr()

pure subroutine, public la_lapack_eigv_tridiag3::la_sstegr ( character, intent(in) jobz,
character, intent(in) range,
integer(ilp), intent(in) n,
real(sp), dimension(*), intent(inout) d,
real(sp), dimension(*), intent(inout) e,
real(sp), intent(in) vl,
real(sp), intent(in) vu,
integer(ilp), intent(in) il,
integer(ilp), intent(in) iu,
real(sp), intent(in) abstol,
integer(ilp), intent(out) m,
real(sp), dimension(*), intent(out) w,
real(sp), dimension(ldz,*), intent(out) z,
integer(ilp), intent(in) ldz,
integer(ilp), dimension(*), intent(out) isuppz,
real(sp), dimension(*), intent(out) work,
integer(ilp), intent(in) lwork,
integer(ilp), dimension(*), intent(out) iwork,
integer(ilp), intent(in) liwork,
integer(ilp), intent(out) info )

SSTEGR: computes selected eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix T. Any such unreduced matrix has a well defined set of pairwise different real eigenvalues, the corresponding real eigenvectors are pairwise orthogonal. The spectrum may be computed either completely or partially by specifying either an interval (VL,VU] or a range of indices IL:IU for the desired eigenvalues. SSTEGR is a compatibility wrapper around the improved SSTEMR routine. See SSTEMR for further details. One important change is that the ABSTOL parameter no longer provides any benefit and hence is no longer used. Note : SSTEGR and SSTEMR work only on machines which follow IEEE-754 floating-point standard in their handling of infinities and NaNs. Normal execution may create these exceptiona values and hence may abort due to a floating point exception in environments which do not conform to the IEEE-754 standard.

Here is the call graph for this function:

◆ la_sstein()

pure subroutine, public la_lapack_eigv_tridiag3::la_sstein ( integer(ilp), intent(in) n,
real(sp), dimension(*), intent(in) d,
real(sp), dimension(*), intent(in) e,
integer(ilp), intent(in) m,
real(sp), dimension(*), intent(in) w,
integer(ilp), dimension(*), intent(in) iblock,
integer(ilp), dimension(*), intent(in) isplit,
real(sp), dimension(ldz,*), intent(out) z,
integer(ilp), intent(in) ldz,
real(sp), dimension(*), intent(out) work,
integer(ilp), dimension(*), intent(out) iwork,
integer(ilp), dimension(*), intent(out) ifail,
integer(ilp), intent(out) info )

SSTEIN: computes the eigenvectors of a real symmetric tridiagonal matrix T corresponding to specified eigenvalues, using inverse iteration. The maximum number of iterations allowed for each eigenvector is specified by an internal parameter MAXITS (currently set to 5).

Here is the call graph for this function:

◆ la_sstemr()

pure subroutine, public la_lapack_eigv_tridiag3::la_sstemr ( character, intent(in) jobz,
character, intent(in) range,
integer(ilp), intent(in) n,
real(sp), dimension(*), intent(inout) d,
real(sp), dimension(*), intent(inout) e,
real(sp), intent(in) vl,
real(sp), intent(in) vu,
integer(ilp), intent(in) il,
integer(ilp), intent(in) iu,
integer(ilp), intent(out) m,
real(sp), dimension(*), intent(out) w,
real(sp), dimension(ldz,*), intent(out) z,
integer(ilp), intent(in) ldz,
integer(ilp), intent(in) nzc,
integer(ilp), dimension(*), intent(out) isuppz,
logical(lk), intent(inout) tryrac,
real(sp), dimension(*), intent(out) work,
integer(ilp), intent(in) lwork,
integer(ilp), dimension(*), intent(out) iwork,
integer(ilp), intent(in) liwork,
integer(ilp), intent(out) info )

SSTEMR: computes selected eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix T. Any such unreduced matrix has a well defined set of pairwise different real eigenvalues, the corresponding real eigenvectors are pairwise orthogonal. The spectrum may be computed either completely or partially by specifying either an interval (VL,VU] or a range of indices IL:IU for the desired eigenvalues. Depending on the number of desired eigenvalues, these are computed either by bisection or the dqds algorithm. Numerically orthogonal eigenvectors are computed by the use of various suitable L D L^T factorizations near clusters of close eigenvalues (referred to as RRRs, Relatively Robust Representations). An informal sketch of the algorithm follows. For each unreduced block (submatrix) of T, (a) Compute T - sigma I = L D L^T, so that L and D define all the wanted eigenvalues to high relative accuracy. This means that small relative changes in the entries of D and L cause only small relative changes in the eigenvalues and eigenvectors. The standard (unfactored) representation of the tridiagonal matrix T does not have this property in general. (b) Compute the eigenvalues to suitable accuracy. If the eigenvectors are desired, the algorithm attains full accuracy of the computed eigenvalues only right before the corresponding vectors have to be computed, see steps c) and d). (c) For each cluster of close eigenvalues, select a new shift close to the cluster, find a new factorization, and refine the shifted eigenvalues to suitable accuracy. (d) For each eigenvalue with a large enough relative separation compute the corresponding eigenvector by forming a rank revealing twisted factorization. Go back to (c) for any clusters that remain. For more details, see:

  • Inderjit S. Dhillon and Beresford N. Parlett: "Multiple representations to compute orthogonal eigenvectors of symmetric tridiagonal matrices," Linear Algebra and its Applications, 387(1), pp. 1-28, August 2004.
  • Inderjit Dhillon and Beresford Parlett: "Orthogonal Eigenvectors and Relative Gaps," SIAM Journal on Matrix Analysis and Applications, Vol. 25,
  1. Also LAPACK Working Note 154.
  • Inderjit Dhillon: "A new O(n^2) algorithm for the symmetric tridiagonal eigenvalue/eigenvector problem", Computer Science Division Technical Report No. UCB/CSD-97-971, UC Berkeley, May 1997. Further Details 1.SSTEMR works only on machines which follow IEEE-754 floating-point standard in their handling of infinities and NaNs. This permits the use of efficient inner loops avoiding a check for zero divisors.
Here is the call graph for this function:

◆ la_ssterf()

pure subroutine, public la_lapack_eigv_tridiag3::la_ssterf ( integer(ilp), intent(in) n,
real(sp), dimension(*), intent(inout) d,
real(sp), dimension(*), intent(inout) e,
integer(ilp), intent(out) info )

SSTERF: computes all eigenvalues of a symmetric tridiagonal matrix using the Pal-Walker-Kahan variant of the QL or QR algorithm.

Here is the call graph for this function:

◆ la_sstev()

pure subroutine, public la_lapack_eigv_tridiag3::la_sstev ( character, intent(in) jobz,
integer(ilp), intent(in) n,
real(sp), dimension(*), intent(inout) d,
real(sp), dimension(*), intent(inout) e,
real(sp), dimension(ldz,*), intent(out) z,
integer(ilp), intent(in) ldz,
real(sp), dimension(*), intent(out) work,
integer(ilp), intent(out) info )

SSTEV: computes all eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix A.

Here is the call graph for this function:

◆ la_sstevd()

pure subroutine, public la_lapack_eigv_tridiag3::la_sstevd ( character, intent(in) jobz,
integer(ilp), intent(in) n,
real(sp), dimension(*), intent(inout) d,
real(sp), dimension(*), intent(inout) e,
real(sp), dimension(ldz,*), intent(out) z,
integer(ilp), intent(in) ldz,
real(sp), dimension(*), intent(out) work,
integer(ilp), intent(in) lwork,
integer(ilp), dimension(*), intent(out) iwork,
integer(ilp), intent(in) liwork,
integer(ilp), intent(out) info )

SSTEVD: computes all eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix. If eigenvectors are desired, it uses a divide and conquer algorithm. The divide and conquer algorithm makes very mild assumptions about floating point arithmetic. It will work on machines with a guard digit in add/subtract, or on those binary machines without guard digits which subtract like the Cray X-MP, Cray Y-MP, Cray C-90, or Cray-2. It could conceivably fail on hexadecimal or decimal machines without guard digits, but we know of none.

Here is the call graph for this function:

◆ la_sstevr()

pure subroutine, public la_lapack_eigv_tridiag3::la_sstevr ( character, intent(in) jobz,
character, intent(in) range,
integer(ilp), intent(in) n,
real(sp), dimension(*), intent(inout) d,
real(sp), dimension(*), intent(inout) e,
real(sp), intent(in) vl,
real(sp), intent(in) vu,
integer(ilp), intent(in) il,
integer(ilp), intent(in) iu,
real(sp), intent(in) abstol,
integer(ilp), intent(out) m,
real(sp), dimension(*), intent(out) w,
real(sp), dimension(ldz,*), intent(out) z,
integer(ilp), intent(in) ldz,
integer(ilp), dimension(*), intent(out) isuppz,
real(sp), dimension(*), intent(out) work,
integer(ilp), intent(in) lwork,
integer(ilp), dimension(*), intent(out) iwork,
integer(ilp), intent(in) liwork,
integer(ilp), intent(out) info )

SSTEVR: computes selected eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix T. Eigenvalues and eigenvectors can be selected by specifying either a range of values or a range of indices for the desired eigenvalues. Whenever possible, SSTEVR calls SSTEMR to compute the eigenspectrum using Relatively Robust Representations. SSTEMR computes eigenvalues by the dqds algorithm, while orthogonal eigenvectors are computed from various "good" L D L^T representations (also known as Relatively Robust Representations). Gram-Schmidt orthogonalization is avoided as far as possible. More specifically, the various steps of the algorithm are as follows. For the i-th unreduced block of T, (a) Compute T - sigma_i = L_i D_i L_i^T, such that L_i D_i L_i^T is a relatively robust representation, (b) Compute the eigenvalues, lambda_j, of L_i D_i L_i^T to high relative accuracy by the dqds algorithm, (c) If there is a cluster of close eigenvalues, "choose" sigma_i close to the cluster, and go to step (a), (d) Given the approximate eigenvalue lambda_j of L_i D_i L_i^T, compute the corresponding eigenvector by forming a rank-revealing twisted factorization. The desired accuracy of the output can be specified by the input parameter ABSTOL. For more details, see "A new O(n^2) algorithm for the symmetric tridiagonal eigenvalue/eigenvector problem", by Inderjit Dhillon, Computer Science Division Technical Report No. UCB//CSD-97-971, UC Berkeley, May 1997. Note 1 : SSTEVR calls SSTEMR when the full spectrum is requested on machines which conform to the ieee-754 floating point standard. SSTEVR calls SSTEBZ and SSTEIN on non-ieee machines and when partial spectrum requests are made. Normal execution of SSTEMR may create NaNs and infinities and hence may abort due to a floating point exception in environments which do not handle NaNs and infinities in the ieee standard default manner.

Here is the call graph for this function:

◆ la_sstevx()

pure subroutine, public la_lapack_eigv_tridiag3::la_sstevx ( character, intent(in) jobz,
character, intent(in) range,
integer(ilp), intent(in) n,
real(sp), dimension(*), intent(inout) d,
real(sp), dimension(*), intent(inout) e,
real(sp), intent(in) vl,
real(sp), intent(in) vu,
integer(ilp), intent(in) il,
integer(ilp), intent(in) iu,
real(sp), intent(in) abstol,
integer(ilp), intent(out) m,
real(sp), dimension(*), intent(out) w,
real(sp), dimension(ldz,*), intent(out) z,
integer(ilp), intent(in) ldz,
real(sp), dimension(*), intent(out) work,
integer(ilp), dimension(*), intent(out) iwork,
integer(ilp), dimension(*), intent(out) ifail,
integer(ilp), intent(out) info )

SSTEVX: computes selected eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix A. Eigenvalues and eigenvectors can be selected by specifying either a range of values or a range of indices for the desired eigenvalues.

Here is the call graph for this function:

◆ la_wpteqr()

pure subroutine, public la_lapack_eigv_tridiag3::la_wpteqr ( character, intent(in) compz,
integer(ilp), intent(in) n,
real(qp), dimension(*), intent(inout) d,
real(qp), dimension(*), intent(inout) e,
complex(qp), dimension(ldz,*), intent(inout) z,
integer(ilp), intent(in) ldz,
real(qp), dimension(*), intent(out) work,
integer(ilp), intent(out) info )

WPTEQR: computes all eigenvalues and, optionally, eigenvectors of a symmetric positive definite tridiagonal matrix by first factoring the matrix using QPTTRF and then calling WBDSQR to compute the singular values of the bidiagonal factor. This routine computes the eigenvalues of the positive definite tridiagonal matrix to high relative accuracy. This means that if the eigenvalues range over many orders of magnitude in size, then the small eigenvalues and corresponding eigenvectors will be computed more accurately than, for example, with the standard QR method. The eigenvectors of a full or band positive definite Hermitian matrix can also be found if WHETRD, WHPTRD, or WHBTRD has been used to reduce this matrix to tridiagonal form. (The reduction to tridiagonal form, however, may preclude the possibility of obtaining high relative accuracy in the small eigenvalues of the original matrix, if these eigenvalues range over many orders of magnitude.)

Here is the call graph for this function:

◆ la_wstedc()

pure subroutine, public la_lapack_eigv_tridiag3::la_wstedc ( character, intent(in) compz,
integer(ilp), intent(in) n,
real(qp), dimension(*), intent(inout) d,
real(qp), dimension(*), intent(inout) e,
complex(qp), dimension(ldz,*), intent(inout) z,
integer(ilp), intent(in) ldz,
complex(qp), dimension(*), intent(out) work,
integer(ilp), intent(in) lwork,
real(qp), dimension(*), intent(out) rwork,
integer(ilp), intent(in) lrwork,
integer(ilp), dimension(*), intent(out) iwork,
integer(ilp), intent(in) liwork,
integer(ilp), intent(out) info )

WSTEDC: computes all eigenvalues and, optionally, eigenvectors of a symmetric tridiagonal matrix using the divide and conquer method. The eigenvectors of a full or band complex Hermitian matrix can also be found if WHETRD or WHPTRD or WHBTRD has been used to reduce this matrix to tridiagonal form. This code makes very mild assumptions about floating point arithmetic. It will work on machines with a guard digit in add/subtract, or on those binary machines without guard digits which subtract like the Cray X-MP, Cray Y-MP, Cray C-90, or Cray-2. It could conceivably fail on hexadecimal or decimal machines without guard digits, but we know of none. See QLAED3 for details.

Here is the call graph for this function:

◆ la_wstegr()

pure subroutine, public la_lapack_eigv_tridiag3::la_wstegr ( character, intent(in) jobz,
character, intent(in) range,
integer(ilp), intent(in) n,
real(qp), dimension(*), intent(inout) d,
real(qp), dimension(*), intent(inout) e,
real(qp), intent(in) vl,
real(qp), intent(in) vu,
integer(ilp), intent(in) il,
integer(ilp), intent(in) iu,
real(qp), intent(in) abstol,
integer(ilp), intent(out) m,
real(qp), dimension(*), intent(out) w,
complex(qp), dimension(ldz,*), intent(out) z,
integer(ilp), intent(in) ldz,
integer(ilp), dimension(*), intent(out) isuppz,
real(qp), dimension(*), intent(out) work,
integer(ilp), intent(in) lwork,
integer(ilp), dimension(*), intent(out) iwork,
integer(ilp), intent(in) liwork,
integer(ilp), intent(out) info )

WSTEGR: computes selected eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix T. Any such unreduced matrix has a well defined set of pairwise different real eigenvalues, the corresponding real eigenvectors are pairwise orthogonal. The spectrum may be computed either completely or partially by specifying either an interval (VL,VU] or a range of indices IL:IU for the desired eigenvalues. WSTEGR is a compatibility wrapper around the improved WSTEMR routine. See WSTEMR for further details. One important change is that the ABSTOL parameter no longer provides any benefit and hence is no longer used. Note : WSTEGR and WSTEMR work only on machines which follow IEEE-754 floating-point standard in their handling of infinities and NaNs. Normal execution may create these exceptiona values and hence may abort due to a floating point exception in environments which do not conform to the IEEE-754 standard.

Here is the call graph for this function:

◆ la_wstein()

pure subroutine, public la_lapack_eigv_tridiag3::la_wstein ( integer(ilp), intent(in) n,
real(qp), dimension(*), intent(in) d,
real(qp), dimension(*), intent(in) e,
integer(ilp), intent(in) m,
real(qp), dimension(*), intent(in) w,
integer(ilp), dimension(*), intent(in) iblock,
integer(ilp), dimension(*), intent(in) isplit,
complex(qp), dimension(ldz,*), intent(out) z,
integer(ilp), intent(in) ldz,
real(qp), dimension(*), intent(out) work,
integer(ilp), dimension(*), intent(out) iwork,
integer(ilp), dimension(*), intent(out) ifail,
integer(ilp), intent(out) info )

WSTEIN: computes the eigenvectors of a real symmetric tridiagonal matrix T corresponding to specified eigenvalues, using inverse iteration. The maximum number of iterations allowed for each eigenvector is specified by an internal parameter MAXITS (currently set to 5). Although the eigenvectors are real, they are stored in a complex array, which may be passed to WUNMTR or WUPMTR for back transformation to the eigenvectors of a complex Hermitian matrix which was reduced to tridiagonal form.

Here is the call graph for this function:

◆ la_wstemr()

pure subroutine, public la_lapack_eigv_tridiag3::la_wstemr ( character, intent(in) jobz,
character, intent(in) range,
integer(ilp), intent(in) n,
real(qp), dimension(*), intent(inout) d,
real(qp), dimension(*), intent(inout) e,
real(qp), intent(in) vl,
real(qp), intent(in) vu,
integer(ilp), intent(in) il,
integer(ilp), intent(in) iu,
integer(ilp), intent(out) m,
real(qp), dimension(*), intent(out) w,
complex(qp), dimension(ldz,*), intent(out) z,
integer(ilp), intent(in) ldz,
integer(ilp), intent(in) nzc,
integer(ilp), dimension(*), intent(out) isuppz,
logical(lk), intent(inout) tryrac,
real(qp), dimension(*), intent(out) work,
integer(ilp), intent(in) lwork,
integer(ilp), dimension(*), intent(out) iwork,
integer(ilp), intent(in) liwork,
integer(ilp), intent(out) info )

WSTEMR: computes selected eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix T. Any such unreduced matrix has a well defined set of pairwise different real eigenvalues, the corresponding real eigenvectors are pairwise orthogonal. The spectrum may be computed either completely or partially by specifying either an interval (VL,VU] or a range of indices IL:IU for the desired eigenvalues. Depending on the number of desired eigenvalues, these are computed either by bisection or the dqds algorithm. Numerically orthogonal eigenvectors are computed by the use of various suitable L D L^T factorizations near clusters of close eigenvalues (referred to as RRRs, Relatively Robust Representations). An informal sketch of the algorithm follows. For each unreduced block (submatrix) of T, (a) Compute T - sigma I = L D L^T, so that L and D define all the wanted eigenvalues to high relative accuracy. This means that small relative changes in the entries of D and L cause only small relative changes in the eigenvalues and eigenvectors. The standard (unfactored) representation of the tridiagonal matrix T does not have this property in general. (b) Compute the eigenvalues to suitable accuracy. If the eigenvectors are desired, the algorithm attains full accuracy of the computed eigenvalues only right before the corresponding vectors have to be computed, see steps c) and d). (c) For each cluster of close eigenvalues, select a new shift close to the cluster, find a new factorization, and refine the shifted eigenvalues to suitable accuracy. (d) For each eigenvalue with a large enough relative separation compute the corresponding eigenvector by forming a rank revealing twisted factorization. Go back to (c) for any clusters that remain. For more details, see:

  • Inderjit S. Dhillon and Beresford N. Parlett: "Multiple representations to compute orthogonal eigenvectors of symmetric tridiagonal matrices," Linear Algebra and its Applications, 387(1), pp. 1-28, August 2004.
  • Inderjit Dhillon and Beresford Parlett: "Orthogonal Eigenvectors and Relative Gaps," SIAM Journal on Matrix Analysis and Applications, Vol. 25,
  1. Also LAPACK Working Note 154.
  • Inderjit Dhillon: "A new O(n^2) algorithm for the symmetric tridiagonal eigenvalue/eigenvector problem", Computer Science Division Technical Report No. UCB/CSD-97-971, UC Berkeley, May 1997. Further Details 1.WSTEMR works only on machines which follow IEEE-754 floating-point standard in their handling of infinities and NaNs. This permits the use of efficient inner loops avoiding a check for zero divisors.
  1. LAPACK routines can be used to reduce a complex Hermitean matrix to real symmetric tridiagonal form. (Any complex Hermitean tridiagonal matrix has real values on its diagonal and potentially complex numbers on its off-diagonals. By applying a similarity transform with an appropriate diagonal matrix diag(1,e^{i \phy_1}, ... , e^{i \phy_{n-1}}), the complex Hermitean matrix can be transformed into a real symmetric matrix and complex arithmetic can be entirely avoided.) While the eigenvectors of the real symmetric tridiagonal matrix are real, the eigenvectors of original complex Hermitean matrix have complex entries in general. Since LAPACK drivers overwrite the matrix data with the eigenvectors, WSTEMR accepts complex workspace to facilitate interoperability with WUNMTR or WUPMTR.
Here is the call graph for this function:

◆ la_zpteqr()

pure subroutine, public la_lapack_eigv_tridiag3::la_zpteqr ( character, intent(in) compz,
integer(ilp), intent(in) n,
real(dp), dimension(*), intent(inout) d,
real(dp), dimension(*), intent(inout) e,
complex(dp), dimension(ldz,*), intent(inout) z,
integer(ilp), intent(in) ldz,
real(dp), dimension(*), intent(out) work,
integer(ilp), intent(out) info )

ZPTEQR: computes all eigenvalues and, optionally, eigenvectors of a symmetric positive definite tridiagonal matrix by first factoring the matrix using DPTTRF and then calling ZBDSQR to compute the singular values of the bidiagonal factor. This routine computes the eigenvalues of the positive definite tridiagonal matrix to high relative accuracy. This means that if the eigenvalues range over many orders of magnitude in size, then the small eigenvalues and corresponding eigenvectors will be computed more accurately than, for example, with the standard QR method. The eigenvectors of a full or band positive definite Hermitian matrix can also be found if ZHETRD, ZHPTRD, or ZHBTRD has been used to reduce this matrix to tridiagonal form. (The reduction to tridiagonal form, however, may preclude the possibility of obtaining high relative accuracy in the small eigenvalues of the original matrix, if these eigenvalues range over many orders of magnitude.)

Here is the call graph for this function:

◆ la_zstedc()

pure subroutine, public la_lapack_eigv_tridiag3::la_zstedc ( character, intent(in) compz,
integer(ilp), intent(in) n,
real(dp), dimension(*), intent(inout) d,
real(dp), dimension(*), intent(inout) e,
complex(dp), dimension(ldz,*), intent(inout) z,
integer(ilp), intent(in) ldz,
complex(dp), dimension(*), intent(out) work,
integer(ilp), intent(in) lwork,
real(dp), dimension(*), intent(out) rwork,
integer(ilp), intent(in) lrwork,
integer(ilp), dimension(*), intent(out) iwork,
integer(ilp), intent(in) liwork,
integer(ilp), intent(out) info )

ZSTEDC: computes all eigenvalues and, optionally, eigenvectors of a symmetric tridiagonal matrix using the divide and conquer method. The eigenvectors of a full or band complex Hermitian matrix can also be found if ZHETRD or ZHPTRD or ZHBTRD has been used to reduce this matrix to tridiagonal form. This code makes very mild assumptions about floating point arithmetic. It will work on machines with a guard digit in add/subtract, or on those binary machines without guard digits which subtract like the Cray X-MP, Cray Y-MP, Cray C-90, or Cray-2. It could conceivably fail on hexadecimal or decimal machines without guard digits, but we know of none. See DLAED3 for details.

Here is the call graph for this function:

◆ la_zstegr()

pure subroutine, public la_lapack_eigv_tridiag3::la_zstegr ( character, intent(in) jobz,
character, intent(in) range,
integer(ilp), intent(in) n,
real(dp), dimension(*), intent(inout) d,
real(dp), dimension(*), intent(inout) e,
real(dp), intent(in) vl,
real(dp), intent(in) vu,
integer(ilp), intent(in) il,
integer(ilp), intent(in) iu,
real(dp), intent(in) abstol,
integer(ilp), intent(out) m,
real(dp), dimension(*), intent(out) w,
complex(dp), dimension(ldz,*), intent(out) z,
integer(ilp), intent(in) ldz,
integer(ilp), dimension(*), intent(out) isuppz,
real(dp), dimension(*), intent(out) work,
integer(ilp), intent(in) lwork,
integer(ilp), dimension(*), intent(out) iwork,
integer(ilp), intent(in) liwork,
integer(ilp), intent(out) info )

ZSTEGR: computes selected eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix T. Any such unreduced matrix has a well defined set of pairwise different real eigenvalues, the corresponding real eigenvectors are pairwise orthogonal. The spectrum may be computed either completely or partially by specifying either an interval (VL,VU] or a range of indices IL:IU for the desired eigenvalues. ZSTEGR is a compatibility wrapper around the improved ZSTEMR routine. See ZSTEMR for further details. One important change is that the ABSTOL parameter no longer provides any benefit and hence is no longer used. Note : ZSTEGR and ZSTEMR work only on machines which follow IEEE-754 floating-point standard in their handling of infinities and NaNs. Normal execution may create these exceptiona values and hence may abort due to a floating point exception in environments which do not conform to the IEEE-754 standard.

Here is the call graph for this function:

◆ la_zstein()

pure subroutine, public la_lapack_eigv_tridiag3::la_zstein ( integer(ilp), intent(in) n,
real(dp), dimension(*), intent(in) d,
real(dp), dimension(*), intent(in) e,
integer(ilp), intent(in) m,
real(dp), dimension(*), intent(in) w,
integer(ilp), dimension(*), intent(in) iblock,
integer(ilp), dimension(*), intent(in) isplit,
complex(dp), dimension(ldz,*), intent(out) z,
integer(ilp), intent(in) ldz,
real(dp), dimension(*), intent(out) work,
integer(ilp), dimension(*), intent(out) iwork,
integer(ilp), dimension(*), intent(out) ifail,
integer(ilp), intent(out) info )

ZSTEIN: computes the eigenvectors of a real symmetric tridiagonal matrix T corresponding to specified eigenvalues, using inverse iteration. The maximum number of iterations allowed for each eigenvector is specified by an internal parameter MAXITS (currently set to 5). Although the eigenvectors are real, they are stored in a complex array, which may be passed to ZUNMTR or ZUPMTR for back transformation to the eigenvectors of a complex Hermitian matrix which was reduced to tridiagonal form.

Here is the call graph for this function:

◆ la_zstemr()

pure subroutine, public la_lapack_eigv_tridiag3::la_zstemr ( character, intent(in) jobz,
character, intent(in) range,
integer(ilp), intent(in) n,
real(dp), dimension(*), intent(inout) d,
real(dp), dimension(*), intent(inout) e,
real(dp), intent(in) vl,
real(dp), intent(in) vu,
integer(ilp), intent(in) il,
integer(ilp), intent(in) iu,
integer(ilp), intent(out) m,
real(dp), dimension(*), intent(out) w,
complex(dp), dimension(ldz,*), intent(out) z,
integer(ilp), intent(in) ldz,
integer(ilp), intent(in) nzc,
integer(ilp), dimension(*), intent(out) isuppz,
logical(lk), intent(inout) tryrac,
real(dp), dimension(*), intent(out) work,
integer(ilp), intent(in) lwork,
integer(ilp), dimension(*), intent(out) iwork,
integer(ilp), intent(in) liwork,
integer(ilp), intent(out) info )

ZSTEMR: computes selected eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix T. Any such unreduced matrix has a well defined set of pairwise different real eigenvalues, the corresponding real eigenvectors are pairwise orthogonal. The spectrum may be computed either completely or partially by specifying either an interval (VL,VU] or a range of indices IL:IU for the desired eigenvalues. Depending on the number of desired eigenvalues, these are computed either by bisection or the dqds algorithm. Numerically orthogonal eigenvectors are computed by the use of various suitable L D L^T factorizations near clusters of close eigenvalues (referred to as RRRs, Relatively Robust Representations). An informal sketch of the algorithm follows. For each unreduced block (submatrix) of T, (a) Compute T - sigma I = L D L^T, so that L and D define all the wanted eigenvalues to high relative accuracy. This means that small relative changes in the entries of D and L cause only small relative changes in the eigenvalues and eigenvectors. The standard (unfactored) representation of the tridiagonal matrix T does not have this property in general. (b) Compute the eigenvalues to suitable accuracy. If the eigenvectors are desired, the algorithm attains full accuracy of the computed eigenvalues only right before the corresponding vectors have to be computed, see steps c) and d). (c) For each cluster of close eigenvalues, select a new shift close to the cluster, find a new factorization, and refine the shifted eigenvalues to suitable accuracy. (d) For each eigenvalue with a large enough relative separation compute the corresponding eigenvector by forming a rank revealing twisted factorization. Go back to (c) for any clusters that remain. For more details, see:

  • Inderjit S. Dhillon and Beresford N. Parlett: "Multiple representations to compute orthogonal eigenvectors of symmetric tridiagonal matrices," Linear Algebra and its Applications, 387(1), pp. 1-28, August 2004.
  • Inderjit Dhillon and Beresford Parlett: "Orthogonal Eigenvectors and Relative Gaps," SIAM Journal on Matrix Analysis and Applications, Vol. 25,
  1. Also LAPACK Working Note 154.
  • Inderjit Dhillon: "A new O(n^2) algorithm for the symmetric tridiagonal eigenvalue/eigenvector problem", Computer Science Division Technical Report No. UCB/CSD-97-971, UC Berkeley, May 1997. Further Details 1.ZSTEMR works only on machines which follow IEEE-754 floating-point standard in their handling of infinities and NaNs. This permits the use of efficient inner loops avoiding a check for zero divisors.
  1. LAPACK routines can be used to reduce a complex Hermitean matrix to real symmetric tridiagonal form. (Any complex Hermitean tridiagonal matrix has real values on its diagonal and potentially complex numbers on its off-diagonals. By applying a similarity transform with an appropriate diagonal matrix diag(1,e^{i \phy_1}, ... , e^{i \phy_{n-1}}), the complex Hermitean matrix can be transformed into a real symmetric matrix and complex arithmetic can be entirely avoided.) While the eigenvectors of the real symmetric tridiagonal matrix are real, the eigenvectors of original complex Hermitean matrix have complex entries in general. Since LAPACK drivers overwrite the matrix data with the eigenvectors, ZSTEMR accepts complex workspace to facilitate interoperability with ZUNMTR or ZUPMTR.
Here is the call graph for this function: