SRC/sspgvd.f(3)

🌸 SRC/sspgvd.f(3) 🌸

okay so bestie, this page is from the Library Functions Manual, and it is literally all about SRC/sspgvd.f β€” the LAPACK glow-up for a generalized symmetric-definite eigenproblem. stay with me, it slays πŸ’…βœ¨


✨ NAME ✨

  • SRC/sspgvd.f β€” that's the name, no cap πŸŽ€

πŸ¦‹ SYNOPSIS πŸ¦‹

🧚 Functions/Subroutines

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

SSPGVD β€” main character energy, periodt. πŸ‘‘


🌈 Function/Subroutine Documentation 🌈

πŸ’– subroutine sspgvd

subroutine sspgvd (integer itype, character jobz, character uplo, integer n,
    real, dimension( * ) ap, real, dimension( * ) bp, real, dimension( * )
    w, real, dimension( ldz, * ) z, integer ldz, real, dimension( * ) work,
    integer lwork, integer, dimension( * ) iwork, integer liwork, integer
    info)

SSPGVD 🫢

πŸ’– Purpose πŸ’–

bestie, <pink>SSPGVD</pink> computes all the eigenvalues, and optionally the eigenvectors, of a real generalized symmetric-definite eigenproblem. it handles these forms:

  • 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. iconic algorithm behavior, honestly ✨

πŸŽ€ Parameters πŸŽ€

  • ITYPE β€” INTEGER. specifies the problem type to solve:
    • = 1: A*x = (lambda)*B*x
    • = 2: A*B*x = (lambda)*x
    • = 3: B*A*x = (lambda)*x
  • JOBZ β€” CHARACTER*1
    • = 'N': Compute eigenvalues only;
    • = 'V': Compute eigenvalues and eigenvectors.
  • 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.
  • AP β€” REAL array, dimension (N*(N+1)/2). on entry, this is 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. gone. reduced to atoms. πŸ’€

  • BP β€” REAL array, dimension (N*(N+1)/2). on entry, this is 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. she transformed, your honor πŸ¦‹

  • W β€” REAL array, dimension (N). if INFO = 0, this contains the eigenvalues in ascending order. so organized, so demure ✨
  • Z β€” REAL 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. she's off-duty, don't call her πŸ™ˆ

  • LDZ β€” INTEGER. the leading dimension of the array Z. LDZ >= 1, and if JOBZ = 'V', LDZ >= max(1,N).
  • WORK β€” REAL array, dimension (MAX(1,LWORK)). on exit, if INFO = 0, WORK(1) returns the required LWORK.
  • LWORK β€” INTEGER. 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. sneaky little query mode, iykyk πŸ‘€

  • IWORK β€” INTEGER array, dimension (MAX(1,LIWORK)). on exit, if INFO = 0, IWORK(1) returns the required LIWORK.
  • LIWORK β€” INTEGER. 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. same query vibe, different array bestie πŸŽ€

  • INFO β€” INTEGER
    • = 0: successful exit
    • < 0: if INFO = -i, the i-th argument had an illegal value
    • > 0: SPPTRF or SSPEVD returned an error code:
      • <= N: if INFO = i, SSPEVD 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, that last INFO > N situation is a real β€œthe math said no” moment: the factorization of B could not be completed, and no eigenvalues or eigenvectors were computed. periodt. πŸ’…

πŸ‘‘ 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 sspgvd.f. πŸ“Œ


✨ Author ✨

Generated automatically by Doxygen for LAPACK from the source code.


πŸŽ€ okay that's the whole page, bestie β€” the footer moment is LAPACK Version 3.12.0, generated automatically by Doxygen for LAPACK from the source code. no cap, she's complete. πŸ’–βœ¨
πŸ“¦ where this page comes from