SSPEVD(3)

πŸ“¦ version 3.12.0, in opensuse-leap 16.0

πŸ’… SSPEVD(3) πŸ’…

okay so bestie, welcome to SSPEVD β€” a LAPACK routine, living in the LAPACK manual (that's the manual name, mwah πŸ’–). Like, the actual source file it's documented from is /home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/SRC/sspevd.f β€” yes that's a whole path, yes I typed it all out, you're welcome πŸŽ€


✨ NAME ✨

/home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/SRC/sspevd.f

that's the file. that's the whole NAME section. iconic of it honestly πŸ’…


πŸ¦‹ SYNOPSIS πŸ¦‹

Functions/Subroutines

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

SSPEVD computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices 🫢


🌸 Function/Subroutine Documentation 🌸

subroutine SSPEVD

here's the whole signature, character for character, no cap:

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

SSPEVD computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices ✨

🧚 Purpose:

!> !> SSPEVD computes all the eigenvalues and, optionally, eigenvectors !> of a real symmetric matrix A in packed storage. If eigenvectors are !> desired, it uses a divide and conquer algorithm. !> !>

so like, either you want just the eigenvalues or you want the eigenvectors too β€” and if you want the eigenvectors it goes full divide-and-conquer mode, which is the fancy algorithm, periodt πŸ’€βœ¨


πŸ‘‘ Parameters

  • JOBZ β€” JOBZ is CHARACTER*1 and it's literally the vibe check for what you want back 🌈
    • = 'N': Compute eigenvalues only;
    • = 'V': Compute eigenvalues and eigenvectors.
  • UPLO β€” UPLO is CHARACTER*1, tells the routine which triangle of A you actually bothered to store πŸŽ€
    • = 'U': Upper triangle of A is stored;
    • = 'L': Lower triangle of A is stored.
  • N β€” N is INTEGER, the order of the matrix A. Constraint: N >= 0. (zero is allowed, she's flexible πŸ’…)
  • AP β€” AP is REAL array, dimension (N*(N+1)/2). and here's the tea, bestie, on entry:
    • 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, AP is overwritten by values generated during the reduction to tridiagonal form 😭 so like, don't expect your original data back, she ate it:
      • if UPLO = 'U', the diagonal and first superdiagonal of the tridiagonal matrix T overwrite the corresponding elements of A
      • if UPLO = 'L', the diagonal and first subdiagonal of T overwrite the corresponding elements of A
  • W β€” W is REAL array, dimension (N). if INFO = 0, this is where the eigenvalues live, in ascending order πŸ”₯
  • Z β€” Z is REAL array, dimension (LDZ, N). if JOBZ = 'V', then if INFO = 0, Z contains the orthonormal eigenvectors of the matrix A, with the i-th column of Z holding the eigenvector associated with W(i) 🌟. if JOBZ = 'N', then Z is not referenced β€” she's not even invited to the party πŸ™ˆ
  • LDZ β€” LDZ is INTEGER, the leading dimension of the array Z. Requires LDZ >= 1, and if JOBZ = 'V', then LDZ >= max(1,N) πŸ’œ
  • WORK β€” WORK is REAL array, dimension (MAX(1,LWORK)). on exit, if INFO = 0, WORK(1) returns the required LWORK 🫢
  • LWORK β€” LWORK is INTEGER, the dimension of the array WORK. the rules, fr fr:
    • If N <= 1, LWORK must be at least 1.
    • If JOBZ = 'N' and N > 1, LWORK must be at least 2*N.
    • If JOBZ = 'V' and N > 1, LWORK must be at least 1 + 6*N + 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 πŸ’€ (like, she's just peeking, not committing, iykyk)
  • IWORK β€” IWORK is INTEGER array, dimension (MAX(1,LIWORK)). on exit, if INFO = 0, IWORK(1) returns the required LIWORK ⭐
  • LIWORK β€” LIWORK is INTEGER, the dimension of the array IWORK. rules again, no skipping πŸŽ€:
    • If JOBZ = 'N' or N <= 1, LIWORK must be at least 1.
    • If JOBZ = 'V' and N > 1, LIWORK must be at least 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, the receipts πŸ“œ:
    • = 0: successful exit πŸŽ‰
    • < 0: if INFO = -i, the i-th argument had an illegal value 😬
    • > 0: if INFO = i, the algorithm failed to converge; i off-diagonal elements of an intermediate tridiagonal form did not converge to zero πŸ’€πŸ’€

🧚 Author

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

Definition at line 170 of file sspevd.f. πŸ“


🌈 Author (yes, again)

Generated automatically by Doxygen for LAPACK from the source code. πŸ€–βœ¨


and that's the whole page bestie β€” this one's from LAPACK, Version 3.12.0, and the file path in the footer is /home/abui...RC/sspevd.f(3) 🫢 go forth and compute those eigenvalues, you absolute icon πŸ‘‘πŸ’–

πŸ“¦ where this page comes from