hbgvx(3)

πŸ’– hbgvx(3) β€” Library Functions Manual πŸ’–

okay so bestie, gather round, because this is the hbgvx page from the Library Functions Manual and it's giving big LAPACK energy. We're talking {hb,sb}gvx: eig, bisection β€” that's the NAME, periodt. It's a whole family of routines for generalized Hermitian/symmetric-definite banded eigenproblems, and yes, we're gonna get through all of it together. No skipping, no summarizing, we keep every single detail because that's just how we roll. 🫢


✨ SYNOPSIS ✨

🌸 Functions

  • chbgvx β€” the complex one πŸ’œ
subroutine chbgvx (jobz, range, uplo, n, ka, kb, ab, ldab, bb, ldbb, q,
    ldq, vl, vu, il, iu, abstol, m, w, z, ldz, work, rwork, iwork,
    ifail, info)

CHBGVX

  • dsbgvx β€” the double precision one πŸ”₯
subroutine dsbgvx (jobz, range, uplo, n, ka, kb, ab, ldab, bb, ldbb, q,
    ldq, vl, vu, il, iu, abstol, m, w, z, ldz, work, iwork, ifail, info)

DSBGVX

  • ssbgvx β€” the single precision one ⭐
subroutine ssbgvx (jobz, range, uplo, n, ka, kb, ab, ldab, bb, ldbb, q,
    ldq, vl, vu, il, iu, abstol, m, w, z, ldz, work, iwork, ifail, info)

SSBGVX

  • zhbgvx β€” the double complex one πŸ‘‘
subroutine zhbgvx (jobz, range, uplo, n, ka, kb, ab, ldab, bb, ldbb, q,
    ldq, vl, vu, il, iu, abstol, m, w, z, ldz, work, rwork, iwork,
    ifail, info)

ZHBGVX


πŸ¦‹ Detailed Description

like, this page is literally the "detailed description" hub β€” it's where all the function docs live. It's the main character of the manual, fr fr. Keep scrolling and we'll meet each routine one at a time. πŸ’…


πŸŽ€ Function Documentation πŸŽ€

🌈 subroutine chbgvx

okay so here's the full glow-up of the signature, bestie β€” every type, every dimension, all of it, no cap:

subroutine chbgvx (character jobz, character range, character uplo, integer
    n, integer ka, integer kb, complex, dimension( ldab, * ) ab, integer
    ldab, complex, dimension( ldbb, * ) bb, integer ldbb, complex,
    dimension( ldq, * ) q, integer ldq, real vl, real vu, integer il,
    integer iu, real abstol, integer m, real, dimension( * ) w, complex,
    dimension( ldz, * ) z, integer ldz, complex, dimension( * ) work, real,
    dimension( * ) rwork, integer, dimension( * ) iwork, integer, dimension(
    * ) ifail, integer info)

CHBGVX

✨ Purpose

CHBGVX computes all the eigenvalues, and optionally, the eigenvectors of a complex generalized Hermitian-definite banded eigenproblem, of the form A*x=(lambda)*B*x. Here A and B are assumed to be Hermitian and banded, and B is also positive definite. Eigenvalues and eigenvectors can be selected by specifying either all eigenvalues, a range of values or a range of indices for the desired eigenvalues.

so yeah β€” eigenvalues, eigenvectors if you want 'em, and you get to pick which ones. iconic. πŸ¦‹

πŸ’œ Parameters

  • JOBZ β€” JOBZ is CHARACTER*1
    • = 'N': Compute eigenvalues only;
    • = 'V': Compute eigenvalues and eigenvectors.
  • RANGE β€” RANGE is CHARACTER*1
    • = 'A': all eigenvalues will be found;
    • = 'V': all eigenvalues in the half-open interval (VL,VU] will be found;
    • = 'I': the IL-th through IU-th eigenvalues will be found.
  • UPLO β€” UPLO is CHARACTER*1
    • = 'U': Upper triangles of A and B are stored;
    • = 'L': Lower triangles of A and B are stored.
  • N β€” N is INTEGER The order of the matrices A and B. N >= 0.
  • KA β€” KA is INTEGER The number of superdiagonals of the matrix A if UPLO = 'U', or the number of subdiagonals if UPLO = 'L'. KA >= 0.
  • KB β€” KB is INTEGER The number of superdiagonals of the matrix B if UPLO = 'U', or the number of subdiagonals if UPLO = 'L'. KB >= 0.
  • AB β€” AB is COMPLEX array, dimension (LDAB, N) On entry, the upper or lower triangle of the Hermitian band matrix A, stored in the first ka+1 rows of the array. The j-th column of A is stored in the j-th column of the array AB as follows:
    • if UPLO = 'U', AB(ka+1+i-j,j) = A(i,j) for max(1,j-ka)<=i<=j;
    • if UPLO = 'L', AB(1+i-j,j) = A(i,j) for j<=i<=min(n,j+ka).

On exit, the contents of AB are destroyed. πŸ’€ (like, gone gone β€” she's not coming back)

  • LDAB β€” LDAB is INTEGER The leading dimension of the array AB. LDAB >= KA+1.
  • BB β€” BB is COMPLEX array, dimension (LDBB, N) On entry, the upper or lower triangle of the Hermitian band matrix B, stored in the first kb+1 rows of the array. The j-th column of B is stored in the j-th column of the array BB as follows:
    • if UPLO = 'U', BB(kb+1+i-j,j) = B(i,j) for max(1,j-kb)<=i<=j;
    • if UPLO = 'L', BB(1+i-j,j) = B(i,j) for j<=i<=min(n,j+kb).

On exit, the factor S from the split Cholesky factorization B = S**H*S, as returned by CPBSTF.

  • LDBB β€” LDBB is INTEGER The leading dimension of the array BB. LDBB >= KB+1.
  • Q β€” Q is COMPLEX array, dimension (LDQ, N) If JOBZ = 'V', the n-by-n matrix used in the reduction of A*x = (lambda)*B*x to standard form, i.e. C*x = (lambda)*x, and consequently C to tridiagonal form. If JOBZ = 'N', the array Q is not referenced. (she's off duty πŸ™ˆ)
  • LDQ β€” LDQ is INTEGER The leading dimension of the array Q. If JOBZ = 'N', LDQ >= 1. If JOBZ = 'V', LDQ >= max(1,N).
  • VL β€” VL is REAL

If RANGE='V', the lower bound of the interval to be searched for eigenvalues. VL < VU. Not referenced if RANGE = 'A' or 'I'.

  • VU β€” VU is REAL

If RANGE='V', the upper bound of the interval to be searched for eigenvalues. VL < VU. Not referenced if RANGE = 'A' or 'I'.

  • IL β€” IL is INTEGER

If RANGE='I', the index of the smallest eigenvalue to be returned. 1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0. Not referenced if RANGE = 'A' or 'V'.

  • IU β€” IU is INTEGER

If RANGE='I', the index of the largest eigenvalue to be returned. 1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0. Not referenced if RANGE = 'A' or 'V'.

  • ABSTOL β€” ABSTOL is REAL The absolute error tolerance for the eigenvalues. An approximate eigenvalue is accepted as converged when it is determined to lie in an interval [a,b] of width less than or equal to
ABSTOL + EPS *   max( |a|,|b| ) ,

where EPS is the machine precision. If ABSTOL is less than or equal to zero, then EPS*|T| will be used in its place, where |T| is the 1-norm of the tridiagonal matrix obtained by reducing AP to tridiagonal form.

Eigenvalues will be computed most accurately when ABSTOL is set to twice the underflow threshold 2*SLAMCH('S'), not zero. If this routine returns with INFO>0, indicating that some eigenvectors did not converge, try setting ABSTOL to 2*SLAMCH('S'). 🎯

  • M β€” M is INTEGER The total number of eigenvalues found. 0 <= M <= N. If RANGE = 'A', M = N, and if RANGE = 'I', M = IU-IL+1.
  • W β€” W is REAL array, dimension (N) If INFO = 0, the eigenvalues in ascending order.
  • Z β€” Z is COMPLEX array, dimension (LDZ, N) If JOBZ = 'V', then if INFO = 0, Z contains the matrix Z of eigenvectors, with the i-th column of Z holding the eigenvector associated with W(i). The eigenvectors are normalized so that Z**H*B*Z = I. If JOBZ = 'N', then Z is not referenced.
  • LDZ β€” LDZ is INTEGER The leading dimension of the array Z. LDZ >= 1, and if JOBZ = 'V', LDZ >= N.
  • WORK β€” WORK is COMPLEX array, dimension (N)
  • RWORK β€” RWORK is REAL array, dimension (7*N)
  • IWORK β€” IWORK is INTEGER array, dimension (5*N)
  • IFAIL β€” IFAIL is INTEGER array, dimension (N) If JOBZ = 'V', then if INFO = 0, the first M elements of IFAIL are zero. If INFO > 0, then IFAIL contains the indices of the eigenvectors that failed to converge. If JOBZ = 'N', then IFAIL is not referenced.
  • INFO β€” INFO is INTEGER
    • = 0: successful exit
    • < 0: if INFO = -i, the i-th argument had an illegal value
    • > 0: if INFO = i, and i is:
      • <= N: then i eigenvectors failed to converge. Their indices are stored in array IFAIL.
      • > N: if INFO = N + i, for 1 <= i <= N, then CPBSTF returned INFO = i: B is not positive definite. The factorization of B could not be completed and no eigenvalues or eigenvectors were computed.

πŸ‘‘ Author

Univ. of Tennessee

Univ. of California Berkeley

Univ. of Colorado Denver

NAG Ltd.

🌟 Contributors:

Mark Fahey, Department of Mathematics, Univ. of Kentucky, USA

Definition at line 297 of file chbgvx.f.


🧚 subroutine dsbgvx

and now the double precision sibling steps in β€” same vibe, double precision everywhere, and heads up: her parameter list is the real flavor (no rwork, abstol is double precision). here's the whole signature, verbatim:

subroutine dsbgvx (character jobz, character range, character uplo, integer
    n, integer ka, integer kb, double precision, dimension( ldab, * ) ab,
    integer ldab, double precision, dimension( ldbb, * ) bb, integer ldbb,
    double precision, dimension( ldq, * ) q, integer ldq, double precision
    vl, double precision vu, integer il, integer iu, double precision
    abstol, integer m, double precision, dimension( * ) w, double precision,
    dimension( ldz, * ) z, integer ldz, double precision, dimension( * )
    work, integer, dimension( * ) iwork, integer, dimension( * ) ifail,
    integer info)

DSBGVX

✨ Purpose

DSBGVX computes selected eigenvalues, and optionally, eigenvectors of a real generalized symmetric-definite banded eigenproblem, of the form A*x=(lambda)*B*x. Here A and B are assumed to be symmetric and banded, and B is also positive definite. Eigenvalues and eigenvectors can be selected by specifying either all eigenvalues, a range of values or a range of indices for the desired eigenvalues.

real, symmetric, banded, and B positive definite β€” the whole package, bestie. 🌸

πŸ’œ Parameters

  • JOBZ

(part 1 stops right here mid-parameter, because the page continues β€” more coming in part 2! don't go anywhere 🫢)

  • JOBZ β€” CHARACTER*1. Pick your vibe: = 'N': compute eigenvalues only; = 'V': compute eigenvalues and eigenvectors. πŸ’–
  • RANGE β€” CHARACTER*1. Which eigenvalues are we hunting? = 'A': all eigenvalues will be found. = 'V': all eigenvalues in the half-open interval (VL,VU] will be found. = 'I': the IL-th through IU-th eigenvalues will be found. ✨
  • UPLO β€” CHARACTER*1. = 'U': upper triangles of A and B are stored; = 'L': lower triangles of A and B are stored. 🫢
  • N β€” INTEGER. The order of the matrices A and B. N >= 0. πŸ‘‘
  • KA β€” INTEGER. The number of superdiagonals of the matrix A if UPLO = 'U', or the number of subdiagonals if UPLO = 'L'. KA >= 0.
  • KB β€” INTEGER. The number of superdiagonals of the matrix B if UPLO = 'U', or the number of subdiagonals if UPLO = 'L'. KB >= 0.
  • AB β€” DOUBLE PRECISION array, dimension (LDAB, N). On entry, the upper or lower triangle of the symmetric band matrix A, stored in the first ka+1 rows of the array. The j-th column of A is stored in the j-th column of the array AB as follows:
if UPLO = 'U', AB(ka+1+i-j,j) = A(i,j) for max(1,j-ka)<=i<=j;
if UPLO = 'L', AB(1+i-j,j)    = A(i,j) for j<=i<=min(n,j+ka).

On exit, the contents of AB are destroyed πŸ’€ β€” no cap, they're gone.

  • LDAB β€” INTEGER. The leading dimension of the array AB. LDAB >= KA+1.
  • BB β€” DOUBLE PRECISION array, dimension (LDBB, N). On entry, the upper or lower triangle of the symmetric band matrix B, stored in the first kb+1 rows of the array. The j-th column of B is stored in the j-th column of the array BB as follows:
if UPLO = 'U', BB(ka+1+i-j,j) = B(i,j) for max(1,j-kb)<=i<=j;
if UPLO = 'L', BB(1+i-j,j)    = B(i,j) for j<=i<=min(n,j+kb).

On exit, the factor S from the split Cholesky factorization B = S**T*S, as returned by DPBSTF. πŸ¦‹

  • LDBB β€” INTEGER. The leading dimension of the array BB. LDBB >= KB+1.
  • Q β€” DOUBLE PRECISION array, dimension (LDQ, N). If JOBZ = 'V', the n-by-n matrix used in the reduction of A*x = (lambda)*B*x to standard form, i.e. C*x = (lambda)*x, and consequently C to tridiagonal form. If JOBZ = 'N', the array Q is not referenced.
  • LDQ β€” INTEGER. The leading dimension of the array Q. If JOBZ = 'N', LDQ >= 1. If JOBZ = 'V', LDQ >= max(1,N).
  • VL β€” DOUBLE PRECISION. If RANGE='V', the lower bound of the interval to be searched for eigenvalues. VL < VU. Not referenced if RANGE = 'A' or 'I'.
  • VU β€” DOUBLE PRECISION. If RANGE='V', the upper bound of the interval to be searched for eigenvalues. VL < VU. Not referenced if RANGE = 'A' or 'I'.
  • IL β€” INTEGER. If RANGE='I', the index of the smallest eigenvalue to be returned. 1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0. Not referenced if RANGE = 'A' or 'V'.
  • IU β€” INTEGER. If RANGE='I', the index of the largest eigenvalue to be returned. 1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0. Not referenced if RANGE = 'A' or 'V'.
  • ABSTOL β€” DOUBLE PRECISION. The absolute error tolerance for the eigenvalues. An approximate eigenvalue is accepted as converged when it is determined to lie in an interval [a,b] of width less than or equal to
ABSTOL + EPS *   max( |a|,|b| ) ,

where EPS is the machine precision. If ABSTOL is less than or equal to zero, then EPS*|T| will be used in its place, where |T| is the 1-norm of the tridiagonal matrix obtained by reducing A to tridiagonal form.

Eigenvalues will be computed most accurately when ABSTOL is set to twice the underflow threshold 2*DLAMCH('S'), not zero. If this routine returns with INFO>0, indicating that some eigenvectors did not converge, try setting ABSTOL to 2*DLAMCH('S'). πŸ”₯

  • M β€” INTEGER. The total number of eigenvalues found. 0 <= M <= N. If RANGE = 'A', M = N, and if RANGE = 'I', M = IU-IL+1.
  • W β€” DOUBLE PRECISION array, dimension (N). If INFO = 0, the eigenvalues in ascending order.
  • Z β€” DOUBLE PRECISION array, dimension (LDZ, N). If JOBZ = 'V', then if INFO = 0, Z contains the matrix Z of eigenvectors, with the i-th column of Z holding the eigenvector associated with W(i). The eigenvectors are normalized so Z**T*B*Z = I. If JOBZ = 'N', then Z is not referenced.
  • LDZ β€” INTEGER. The leading dimension of the array Z. LDZ >= 1, and if JOBZ = 'V', LDZ >= max(1,N).
  • WORK β€” DOUBLE PRECISION array, dimension (7*N).
  • IWORK β€” INTEGER array, dimension (5*N).
  • IFAIL β€” INTEGER array, dimension (M). If JOBZ = 'V', then if INFO = 0, the first M elements of IFAIL are zero. If INFO > 0, then IFAIL contains the indices of the eigenvalues that failed to converge. If JOBZ = 'N', then IFAIL is not referenced.
  • INFO β€” INTEGER.
    • = 0: successful exit
    • < 0: if INFO = -i, the i-th argument had an illegal value
    • <= N: if INFO = i, then i eigenvectors failed to converge. Their indices are stored in IFAIL.
    • > N: DPBSTF returned an error code; i.e., if INFO = N + i, for 1 <= i <= N, then the leading principal minor of order i of B is not positive. The factorization of B could not be completed and no eigenvalues or eigenvectors were computed. πŸ’€

πŸ‘‘ Author

  • Univ. of Tennessee
  • Univ. of California Berkeley
  • Univ. of Colorado Denver
  • NAG Ltd.

🫢 Contributors

Mark Fahey, Department of Mathematics, Univ. of Kentucky, USA

πŸ“ Definition

Definition at line 291 of file dsbgvx.f.


🌟 subroutine ssbgvx

subroutine ssbgvx (character jobz, character range, character uplo, integer
    n, integer ka, integer kb, real, dimension( ldab, * ) ab, integer ldab,
    real, dimension( ldbb, * ) bb, integer ldbb, real, dimension( ldq, * )
    q, integer ldq, real vl, real vu, integer il, integer iu, real abstol,
    integer m, real, dimension( * ) w, real, dimension( ldz, * ) z, integer
    ldz, real, dimension( * ) work, integer, dimension( * ) iwork, integer,
    dimension( * ) ifail, integer info)
    SSBGVX

🎯 Purpose

SSBGVX computes selected eigenvalues, and optionally, eigenvectors of a real generalized symmetric-definite banded eigenproblem, of the form A*x=(lambda)*B*x. Here A and B are assumed to be symmetric and banded, and B is also positive definite. Eigenvalues and eigenvectors can be selected by specifying either all eigenvalues, a range of values or a range of indices for the desired eigenvalues. 🌈

πŸ’… Parameters

  • JOBZ β€” CHARACTER*1. = 'N': compute eigenvalues only; = 'V': compute eigenvalues and eigenvectors. πŸ’–
  • RANGE β€” CHARACTER*1. = 'A': all eigenvalues will be found. = 'V': all eigenvalues in the half-open interval (VL,VU] will be found. = 'I': the IL-th through IU-th eigenvalues will be found. ✨
  • UPLO β€” CHARACTER*1. = 'U': upper triangles of A and B are stored; = 'L': lower triangles of A and B are stored. 🫢
  • N β€” INTEGER. The order of the matrices A and B. N >= 0. πŸ‘‘
  • KA β€” INTEGER. The number of superdiagonals of the matrix A if UPLO = 'U', or the number of subdiagonals if UPLO = 'L'. KA >= 0.
  • KB β€” INTEGER. The number of superdiagonals of the matrix B if UPLO = 'U', or the number of subdiagonals if UPLO = 'L'. KB >= 0.
  • AB β€” REAL array, dimension (LDAB, N). On entry, the upper or lower triangle of the symmetric band matrix A, stored in the first ka+1 rows of the array. The j-th column of A is stored in the j-th column of the array AB as follows:
if UPLO = 'U', AB(ka+1+i-j,j) = A(i,j) for max(1,j-ka)<=i<=j;
if UPLO = 'L', AB(1+i-j,j)    = A(i,j) for j<=i<=min(n,j+ka).

On exit, the contents of AB are destroyed. πŸ’€

  • LDAB β€” INTEGER. The leading dimension of the array AB. LDAB >= KA+1.
  • BB

BB β€” bestie, this is a REAL array, dimension (LDBB, N). On entry, it's the upper or lower triangle of the symmetric band matrix B, stored in the first kb+1 rows of the array. The j-th column of B is stored in the j-th column of BB like this:

if UPLO = 'U', BB(ka+1+i-j,j) = B(i,j) for max(1,j-kb)<=i<=j;
if UPLO = 'L', BB(1+i-j,j)    = B(i,j) for j<=i<=min(n,j+kb).

On exit, it's the factor S from the split Cholesky factorization B = S**T*S, as returned by SPBSTF. Iconic πŸ’….

LDBB β€” LDBB is INTEGER. It's the leading dimension of the array BB. The rule is LDBB >= KB+1, no cap.

Q β€” Q is REAL array, dimension (LDQ, N). If JOBZ = 'V', this is the n-by-n matrix used in the reduction of A*x = (lambda)*B*x to standard form, i.e. C*x = (lambda)*x, and consequently C to tridiagonal form. If JOBZ = 'N', the array Q is not referenced at all β€” it's giving background character energy πŸ™ˆ.

LDQ β€” LDQ is INTEGER. It's the leading dimension of the array Q. If JOBZ = 'N', then LDQ >= 1. If JOBZ = 'V', then LDQ >= max(1,N).

VL β€” VL is REAL. If RANGE='V', this is the lower bound of the interval to be searched for eigenvalues. VL < VU. Not referenced if RANGE = 'A' or 'I'. Periodt.

VU β€” VU is REAL. If RANGE='V', this is the upper bound of the interval to be searched for eigenvalues. VL < VU. Not referenced if RANGE = 'A' or 'I'.

IL β€” IL is INTEGER. If RANGE='I', this is the index of the smallest eigenvalue to be returned. 1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0. Not referenced if RANGE = 'A' or 'V'.

IU β€” IU is INTEGER. If RANGE='I', this is the index of the largest eigenvalue to be returned. 1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0. Not referenced if RANGE = 'A' or 'V'.

ABSTOL β€” ABSTOL is REAL. It's the absolute error tolerance for the eigenvalues. An approximate eigenvalue is accepted as converged when it is determined to lie in an interval [a,b] of width less than or equal to

ABSTOL + EPS *   max( |a|,|b| ) ,

where EPS is the machine precision. If ABSTOL is less than or equal to zero, then EPS*|T| will be used in its place, where |T| is the 1-norm of the tridiagonal matrix obtained by reducing A to tridiagonal form.

Eigenvalues will be computed most accurately when ABSTOL is set to twice the underflow threshold 2*SLAMCH('S'), not zero. If this routine returns with INFO>0, indicating that some eigenvectors did not converge, try setting ABSTOL to 2*SLAMCH('S'). That's the glow-up tip, iykyk ✨.

M β€” M is INTEGER. It's the total number of eigenvalues found. 0 <= M <= N. If RANGE = 'A', then M = N, and if RANGE = 'I', then M = IU-IL+1.

W β€” W is REAL array, dimension (N). If INFO = 0, this holds the eigenvalues in ascending order. Sorted and slaying πŸ’–.

Z β€” Z is REAL array, dimension (LDZ, N). If JOBZ = 'V', then if INFO = 0, Z contains the matrix Z of eigenvectors, with the i-th column of Z holding the eigenvector associated with W(i). The eigenvectors are normalized so Z**T*B*Z = I. If JOBZ = 'N', then Z is not referenced.

LDZ β€” LDZ is INTEGER. It's the leading dimension of the array Z. LDZ >= 1, and if JOBZ = 'V', LDZ >= max(1,N).

WORK β€” WORK is REAL array, dimension (7*N). It's the workspace, doing the behind-the-scenes heavy lifting 🫢.

IWORK β€” IWORK is INTEGER array, dimension (5*N). Integer workspace, also clocking in.

IFAIL β€” IFAIL is INTEGER array, dimension (M). If JOBZ = 'V', then if INFO = 0, the first M elements of IFAIL are zero. If INFO > 0, then IFAIL contains the indices of the eigenvalues that failed to converge. If JOBZ = 'N', then IFAIL is not referenced.

INFO β€” INFO is INTEGER. The receipts:

  • = 0: successful exit β€” we love a clean win πŸ‘‘.
  • < 0: if INFO = -i, the i-th argument had an illegal value. Bestie, check your inputs.
  • <= N: if INFO = i, then i eigenvectors failed to converge. Their indices are stored in IFAIL. Not the moment 😭.
  • > N: SPBSTF returned an error code; i.e., if INFO = N + i, for 1 <= i <= N, then the leading principal minor of order i of B is not positive. The factorization of B could not be completed and no eigenvalues or eigenvectors were computed. That's the danger zone, fr fr πŸ’€.

πŸ’– Author πŸ’–

  • Univ. of Tennessee
  • Univ. of California Berkeley
  • Univ. of Colorado Denver
  • NAG Ltd.

πŸŽ€ Contributors πŸŽ€

Mark Fahey, Department of Mathematics, Univ. of Kentucky, USA

Definition at line 291 of file ssbgvx.f.


πŸ’… subroutine zhbgvx πŸ’…

subroutine zhbgvx (character jobz, character range, character uplo, integer
n, integer ka, integer kb, complex*16, dimension( ldab, * ) ab, integer
ldab, complex*16, dimension( ldbb, * ) bb, integer ldbb, complex*16,
dimension( ldq, * ) q, integer ldq, double precision vl, double precision
vu, integer il, integer iu, double precision abstol, integer m, double
precision, dimension( * ) w, complex*16, dimension( ldz, * ) z, integer
ldz, complex*16, dimension( * ) work, double precision, dimension( * )
rwork, integer, dimension( * ) iwork, integer, dimension( * ) ifail,
integer info)

ZHBGVX

πŸ¦‹ Purpose πŸ¦‹

Okay so ZHBGVX computes all the eigenvalues, and optionally, the eigenvectors of a complex generalized Hermitian-definite banded eigenproblem, of the form A*x=(lambda)*B*x. Here A and B are assumed to be Hermitian and banded, and B is also positive definite. Eigenvalues and eigenvectors can be selected by specifying either all eigenvalues, a range of values or a range of indices for the desired eigenvalues. Main character energy for a banded eigenproblem, honestly 🌈.

✨ Parameters ✨

JOBZ β€” JOBZ is CHARACTER*1.

  • = 'N': Compute eigenvalues only;
  • = 'V': Compute eigenvalues and eigenvectors.

RANGE β€” RANGE is CHARACTER*1.

  • = 'A': all eigenvalues will be found;
  • = 'V': all eigenvalues in the half-open interval (VL,VU] will be found;
  • = 'I': the IL-th through IU-th eigenvalues will be found.

UPLO β€” UPLO is CHARACTER*1.

  • = 'U': Upper triangles of A and B are stored;
  • = 'L': Lower triangles of A and B are stored.

N β€” N is INTEGER. The order of the matrices A and B. N >= 0.

KA β€” KA is INTEGER. The number of superdiagonals of the matrix A if UPLO = 'U', or the number of subdiagonals if UPLO = 'L'. KA >= 0.

KB β€” KB is INTEGER. The number of superdiagonals of the matrix B if UPLO = 'U', or the number of subdiagonals if UPLO = 'L'. KB >= 0.

AB β€” AB is COMPLEX*16 array, dimension (LDAB, N). On entry, the upper or lower triangle of the Hermitian band matrix A, stored in the first ka+1 rows of the array. The j-th column of A is stored in the j-th column of the array AB as follows:

if UPLO = 'U', AB(ka+1+i-j,j) = A(i,j) for max(1,j-ka)<=i<=j;
if UPLO = 'L', AB(1+i-j,j)    = A(i,j) for j<=i<=min(n,j+ka).

On exit, the contents of AB are destroyed. Literally gone, no cap πŸ’€.

LDAB β€” LDAB is INTEGER. The leading dimension of the array AB. LDAB >= KA+1.

BB β€” BB is COMPLEX*16 array, dimension (LDBB, N). On entry, the upper or lower triangle of the Hermitian band matrix B, stored in the first kb+1 rows of the array. The j-th column of B is stored in the j-th column of the array BB as follows:

if UPLO = 'U', BB(kb+1+i-j,j) = B(i,j) for max(1,j-kb)<=i<=j;
if UPLO = 'L', BB(1+i-j,j)    = B(i,j) for j<=i<=min(n,j+kb).

On exit, the factor S from the split Cholesky factorization B = S**H*S, as returned by ZPBSTF. Note the **H β€” this is the complex bestie version πŸ’œ.

LDBB β€” LDBB is INTEGER. The leading dimension of the array BB. LDBB >= KB+1.

Q β€” Q is COMPLEX*16 array, dimension (LDQ, N). If JOBZ = 'V', the n-by-n matrix used in the reduction of A*x = (lambda)*B*x to standard form, i.e. C*x = (lambda)*x, and consequently C to tridiagonal form. If JOBZ = 'N', the array Q is not referenced.

LDQ β€” LDQ is INTEGER. The leading dimension of the array Q. If JOBZ = 'N', LDQ >= 1. If JOBZ = 'V', LDQ >= max(1,N).

VL β€” VL is DOUBLE PRECISION. If RANGE='V', the lower bound of the interval to be searched for eigenvalues. VL < VU. Not referenced if RANGE = 'A' or 'I'.

VU β€” VU is DOUBLE PRECISION. If RANGE='V', the upper bound of the interval to be searched for eigenvalues. VL < VU. Not referenced if RANGE = 'A' or 'I'.

IL

  • IL β€” INTEGER. When RANGE='I', this is the index of the smallest eigenvalue you want back. The bounds are 1 <= IL <= IU <= N if N > 0; and if N = 0 then IL = 1 and IU = 0. Not referenced if RANGE = 'A' or 'V'. πŸ’…
  • IU β€” INTEGER. When RANGE='I', this is the index of the largest eigenvalue to be returned. Same bounds, bestie: 1 <= IL <= IU <= N if N > 0; if N = 0 then IL = 1 and IU = 0. Not referenced if RANGE = 'A' or 'V'. ✨
  • ABSTOL β€” DOUBLE PRECISION. This is the absolute error tolerance for the eigenvalues. An approximate eigenvalue is accepted as converged when it is determined to lie in an interval [a,b] of width less than or equal to:
ABSTOL + EPS *   max( |a|,|b| ) ,

where EPS is the machine precision. If ABSTOL is less than or equal to zero, then EPS*|T| will be used in its place, where |T| is the 1-norm of the tridiagonal matrix obtained by reducing AP to tridiagonal form. Eigenvalues will be computed most accurately when ABSTOL is set to twice the underflow threshold 2*DLAMCH('S'), not zero. If this routine returns with INFO>0, indicating that some eigenvectors did not converge, try setting ABSTOL to 2*DLAMCH('S'). 🫢

  • M β€” INTEGER. The total number of eigenvalues found. 0 <= M <= N. If RANGE = 'A', then M = N, and if RANGE = 'I', then M = IU-IL+1. πŸŽ€
  • W β€” DOUBLE PRECISION array, dimension (N). If INFO = 0, this holds the eigenvalues in ascending order. ⭐
  • Z β€” COMPLEX*16 array, dimension (LDZ, N). If JOBZ = 'V', then if INFO = 0, Z contains the matrix Z of eigenvectors, with the i-th column of Z holding the eigenvector associated with W(i). The eigenvectors are normalized so that Z**H*B*Z = I. If JOBZ = 'N', then Z is not referenced. πŸ¦‹
  • LDZ β€” INTEGER. The leading dimension of the array Z. LDZ >= 1, and if JOBZ = 'V', LDZ >= N. πŸ‘‘
  • WORK β€” COMPLEX*16 array, dimension (N). 🌸
  • RWORK β€” DOUBLE PRECISION array, dimension (7*N). πŸ’œ
  • IWORK β€” INTEGER array, dimension (5*N). 🧚
  • IFAIL β€” INTEGER array, dimension (N). If JOBZ = 'V', then if INFO = 0, the first M elements of IFAIL are zero. If INFO > 0, then IFAIL contains the indices of the eigenvectors that failed to converge. If JOBZ = 'N', then IFAIL is not referenced. πŸ“
  • INFO β€” INTEGER.
    • = 0: successful exit. πŸŽ‰
    • < 0: if INFO = -i, the i-th argument had an illegal value. πŸ’€
    • > 0: if INFO = i, and i is:
      • <= N: then i eigenvectors failed to converge. Their indices are stored in array IFAIL. 😭
      • > N: if INFO = N + i, for 1 <= i <= N, then ZPBSTF returned INFO = i: B is not positive definite. The factorization of B could not be completed and no eigenvalues or eigenvectors were computed. 🚨

Author 🫢

  • Univ. of Tennessee
  • Univ. of California Berkeley
  • Univ. of Colorado Denver
  • NAG Ltd.

Contributors: ✨

  • Mark Fahey, Department of Mathematics, Univ. of Kentucky, USA

Definition at line 297 of file zhbgvx.f.

Author πŸ’» (the auto-generated one)

Generated automatically by Doxygen for LAPACK from the source code.


okay that’s the whole page, bestie β€” huge shoutout to LAPACK Version 3.12.0 for this hbgvx(3) moment, periodt πŸ’–

πŸ“¦ where this page comes from