DSTEVD(3)

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

πŸ’… DSTEVD(3) β€” bestie, it's giving eigenvalue slay

okay so first things first: this page lives in the Library Functions Manual, and the file it's documenting is literally

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

like that's the whole NAME section, no cap. it's a .f file, it's a library function, that's the vibe. πŸŽ€


✨ SYNOPSIS ✨

Functions/Subroutines

here's the little one, the group-chat shorthand version:

subroutine DSTEVD (jobz, n, d, e, z, ldz, work, lwork, iwork, liwork,
    info)

and what it does (iconic behaviour, honestly):

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

🌸 Function/Subroutine Documentation 🌸

okay here's the full glow-up signature, every type and dimension in place, not one thing dropped:

subroutine DSTEVD (character jobz, integer n, double precision, dimension( *
    ) d, double precision, dimension( * ) e, double precision, dimension(
    ldz, * ) z, integer ldz, double precision, dimension( * ) work, integer
    lwork, integer, dimension( * ) iwork, integer liwork, integer info)

and again for the people in the back β€” DSTEVD computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices.

πŸ¦‹ Purpose:

so the deal is: DSTEVD computes all eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix. if you want eigenvectors, it pulls out a divide and conquer algorithm β€” fancy, she ate. πŸ’…

the original source has all this wrapped in !> Fortran comment markers, in case you were wondering where the vibe came from, but the facts are the facts.


πŸ’– Parameters

  • JOBZ β€” JOBZ is CHARACTER*1. and it's literally just: = 'N' means compute eigenvalues only; = 'V' means compute eigenvalues and eigenvectors. pick your fighter. ✨
  • N β€” N is INTEGER, the order of the matrix. N >= 0. (yes, zero is allowed, she's flexible.)
  • D β€” D is DOUBLE PRECISION array, dimension (N). on entry: the n diagonal elements of the tridiagonal matrix A. on exit, if INFO = 0, it's holding the eigenvalues in ascending order. glow-up complete. πŸ‘‘
  • E β€” E is DOUBLE PRECISION array, dimension (N-1). on entry: the (n-1) subdiagonal elements of the tridiagonal matrix A, stored in elements 1 to N-1 of E. on exit, the contents of E are destroyed πŸ’€ β€” no cap, it does not survive the call, do not come looking for it.
  • Z β€” Z is DOUBLE PRECISION 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 D(i). and 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. LDZ >= 1, and if JOBZ = 'V', LDZ >= max(1,N). read it and weep. 🫢
  • WORK β€” WORK is DOUBLE PRECISION array, dimension (LWORK). on exit, if INFO = 0, WORK(1) returns the optimal LWORK. so she tells you what she really needed, after the fact. classic. 😭
  • LWORK β€” LWORK is INTEGER, the dimension of the array WORK. the rules, bestie:
    • If JOBZ = 'N' or N <= 1 then LWORK must be at least 1.
    • If JOBZ = 'V' and N > 1 then LWORK must be at least ( 1 + 4*N + N**2 ).
    • If LWORK = -1, then a workspace query is assumed; the routine only calculates the optimal 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. so -1 is the "just tell me how much room you need" move. 🧚
  • IWORK β€” IWORK is INTEGER array, dimension (MAX(1,LIWORK)). on exit, if INFO = 0, IWORK(1) returns the optimal LIWORK. πŸ”₯
  • LIWORK β€” LIWORK is INTEGER, the dimension of the array IWORK. again, rules:
    • If JOBZ = 'N' or N <= 1 then LIWORK must be at least 1.
    • If JOBZ = 'V' and N > 1 then LIWORK must be at least 3+5*N.
    • If LIWORK = -1, then a workspace query is assumed; the routine only calculates the optimal 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 deal, different array. πŸ’œ
  • 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 E did not converge to zero πŸ’€

🌈 Author

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

Definition at line 155 of file dstevd.f.


⭐ Author

Generated automatically by Doxygen for LAPACK from the source code. (the robots wrote this one, respectfully 🫑)


and that's the tea, bestie β€” every flag, every dimension, every INFO code, all present and accounted for. go forth and diagonalise. πŸ’–

so yeah, this page is from LAPACK, Version 3.12.0, and it's the manpage for

/home/abui...RC/dstevd.f(3)

mwah, ty for reading, slay, periodt. πŸŽ€πŸ¦‹βœ¨

πŸ“¦ where this page comes from