SRC/dspgvd.f(3)

πŸ’– SRC/dspgvd.f(3) β€” Library Functions Manual πŸ’–

okay bestie, welcome to the DSPGVD page. The manual name is folded in right here: Library Functions Manual, source/page SRC/dspgvd.f(3). It’s giving linear algebra main character energy, and we’re gonna get through every single detail. πŸ¦‹


✨ NAME ✨

SRC/dspgvd.f β€” that’s the name, periodt. This page is all about the DSPGVD routine.


🌸 SYNOPSIS 🌸

Functions/Subroutines

subroutine dspgvd (itype, jobz, uplo, n, ap, bp, w, z, ldz, work, lwork,
    iwork, liwork, info)
        DSPGVD

πŸŽ€ Function/Subroutine Documentation πŸŽ€

subroutine dspgvd (integer itype, character jobz, character uplo, integer n,
    double precision, dimension( * ) ap, double precision, dimension( * )
    bp, double precision, dimension( * ) w, double precision, dimension(
    ldz, * ) z, integer ldz, double precision, dimension( * ) work, integer
    lwork, integer, dimension( * ) iwork, integer liwork, integer info)
    DSPGVD

πŸ¦‹ Purpose πŸ¦‹

DSPGVD computes all the eigenvalues, and optionally the eigenvectors, of a real generalized symmetric-definite eigenproblem. The forms are:

  • A*x=(lambda)*B*x
  • A*Bx=(lambda)*x
  • B*A*x=(lambda)*x

Here A and B are assumed to be symmetric, stored in packed format, and B is also positive definite. If eigenvectors are desired, it uses a divide and conquer algorithm. That’s the whole vibe: symmetric, packed, positive definite, and optionally eigenvector-delivering. πŸ’…

🌈 Parameters 🌈

πŸ’œ ITYPE

ITYPE is INTEGER. It specifies the problem type to be solved:

  • = 1: A*x = (lambda)*B*x
  • = 2: A*B*x = (lambda)*x
  • = 3: B*A*x = (lambda)*x

πŸ’œ JOBZ

JOBZ is CHARACTER*1.

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

πŸ’œ 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. It’s the order of the matrices A and B. N >= 0.

πŸ’œ AP

AP is DOUBLE PRECISION array, dimension (N*(N+1)/2).

On entry, it holds the upper or lower triangle of the symmetric matrix A, packed columnwise in a linear array. The j-th column of A is stored in the array AP as follows:

  • if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j;
  • if UPLO = 'L', AP(i + (j-1)*(2*n-j)/2) = A(i,j) for j<=i<=n.

On exit, the contents of AP are destroyed. Yeah, it said destroyed β€” RIP to whatever was in there before. πŸ’€

πŸ’œ BP

BP is DOUBLE PRECISION array, dimension (N*(N+1)/2).

On entry, it holds the upper or lower triangle of the symmetric matrix B, packed columnwise in a linear array. The j-th column of B is stored in the array BP as follows:

  • if UPLO = 'U', BP(i + (j-1)*j/2) = B(i,j) for 1<=i<=j;
  • if UPLO = 'L', BP(i + (j-1)*(2*n-j)/2) = B(i,j) for j<=i<=n.

On exit, it holds the triangular factor U or L from the Cholesky factorization B = U**T*U or B = L*L**T, in the same storage format as B.

πŸ’œ W

W is DOUBLE PRECISION array, dimension (N).

If INFO = 0, it holds the eigenvalues in ascending order. Cute, sorted, organized β€” we love to see it. ✨

πŸ’œ Z

Z is DOUBLE PRECISION array, dimension (LDZ, N).

If JOBZ = 'V', then if INFO = 0, Z contains the matrix Z of eigenvectors. The eigenvectors are normalized as follows:

  • if ITYPE = 1 or 2, Z**T*B*Z = I;
  • if ITYPE = 3, Z**T*inv(B)*Z = I.

If JOBZ = 'N', then Z is not referenced. So don’t stress about it, bestie. πŸ™ˆ

πŸ’œ 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 DOUBLE PRECISION array, dimension (MAX(1,LWORK)).

On exit, if INFO = 0, WORK(1) returns the required LWORK.

πŸ’œ LWORK

LWORK is INTEGER. It’s the dimension of the array WORK.

  • If N <= 1, LWORK >= 1.
  • If JOBZ = 'N' and N > 1, LWORK >= 2*N.
  • If JOBZ = 'V' and N > 1, LWORK >= 1 + 6*N + 2*N**2.

If LWORK = -1, then a workspace query is assumed; the routine only calculates the required sizes of the WORK and IWORK arrays, returns these values as the first entries of the WORK and IWORK arrays, and no error message related to LWORK or LIWORK is issued by XERBLA. That’s the β€œjust tell me how much room I need” mode. πŸ”₯

πŸ’œ IWORK

IWORK is INTEGER array, dimension (MAX(1,LIWORK)).

On exit, if INFO = 0, IWORK(1) returns the required LIWORK.

πŸ’œ LIWORK

LIWORK is INTEGER. It’s the dimension of the array IWORK.

  • If JOBZ = 'N' or N <= 1, LIWORK >= 1.
  • If JOBZ = 'V' and N > 1, LIWORK >= 3 + 5*N.

If LIWORK = -1, then a workspace query is assumed; the routine only calculates the required sizes of the WORK and IWORK arrays, returns these values as the first entries of the WORK and IWORK arrays, and no error message related to LWORK or LIWORK is issued by XERBLA.

πŸ’œ INFO

INFO is INTEGER.

  • = 0: successful exit.
  • < 0: if INFO = -i, the i-th argument had an illegal value.
  • > 0: DPPTRF or DSPEVD returned an error code:
    • <= N: if INFO = i, DSPEVD failed to converge; i off-diagonal elements of an intermediate tridiagonal form did not converge to zero;
    • > N: 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.
bestie, pay attention to INFO: positive values are not a drill, and the > N case means B wasn’t positive definite enough for the factorization to finish. No eigenvalues, no eigenvectors. 😭

πŸ’– 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 202 of file dspgvd.f.


πŸ’… Author πŸ’…

Generated automatically by Doxygen for LAPACK from the source code.


Okay that’s the page, bestie 🫢. Footer tea: LAPACK, Version 3.12.0, source/page SRC/dspgvd.f(3) β€” and the date slot is literally not printed on this manpage, so no cap, that’s the whole sign-off. πŸ’–βœ¨

πŸ“¦ where this page comes from