DLAHQR(3)

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

🌸 DLAHQR(3) β€” like, the LAPACK manual page, bestie 🌸

okay so this is a dlahqr.f page from the Library Functions Manual, and yes the path is a whole journey: /home/abui...RC/dlahqr.f(3). We're moving on πŸ’…


✨ NAME ✨

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

like, that's the file. that's literally the whole name section. she's just a path and she's thriving πŸŽ€


πŸ¦‹ SYNOPSIS πŸ¦‹

Functions/Subroutines

subroutine DLAHQR (wantt, wantz, n, ilo, ihi, h, ldh, wr, wi, iloz,
    ihiz, z, ldz, info)

DLAHQR computes the eigenvalues and Schur factorization of an upper Hessenberg matrix, using the double-shift/single-shift QR algorithm. no cap, that's what she does 🫢


πŸ‘‘ Function/Subroutine Documentation πŸ‘‘

subroutine DLAHQR (logical wantt, logical wantz, integer n, integer ilo,
    integer ihi, double precision, dimension( ldh, * ) h, integer ldh,
    double precision, dimension( * ) wr, double precision, dimension( * )
    wi, integer iloz, integer ihiz, double precision, dimension( ldz, * ) z,
    integer ldz, integer info)

DLAHQR computes the eigenvalues and Schur factorization of an upper Hessenberg matrix, using the double-shift/single-shift QR algorithm. πŸ’–

🌟 Purpose 🌟

!> !> DLAHQR is an auxiliary routine called by DHSEQR to update the !> eigenvalues and Schur decomposition already computed by DHSEQR, by !> dealing with the Hessenberg submatrix in rows and columns ILO to !> IHI. !>

so she's the auxiliary bestie β€” DHSEQR did the big main-character work already, and DLAHQR swoops in to handle the Hessenberg submatrix in rows and columns ILO to IHI. team effort, honestly 🧚


πŸ’œ Parameters πŸ’œ

  • WANTT β€” WANTT is LOGICAL
!> WANTT is LOGICAL !> = .TRUE. : the full Schur form T is required; !> = .FALSE.: only eigenvalues are required. !>

short version: .TRUE. = give me the full Schur form T, .FALSE. = eigenvalues only, keep it light ✨

  • WANTZ β€” WANTZ is LOGICAL
!> WANTZ is LOGICAL !> = .TRUE. : the matrix of Schur vectors Z is required; !> = .FALSE.: Schur vectors are not required. !>

.TRUE. = yes queen, I want the matrix of Schur vectors Z; .FALSE. = don't need 'em πŸ’…

  • N β€” N is INTEGER
!> N is INTEGER !> The order of the matrix H. N >= 0. !>

the order of the matrix H. Constraint: N >= 0. periodt.

  • ILO β€” ILO is INTEGER
!> ILO is INTEGER !>

that's it, that's the description. she's mysterious. iykyk πŸ™ˆ

  • IHI β€” IHI is INTEGER
!> IHI is INTEGER !> It is assumed that H is already upper quasi-triangular in !> rows and columns IHI+1:N, and that H(ILO,ILO-1) = 0 (unless !> ILO = 1). DLAHQR works primarily with the Hessenberg !> submatrix in rows and columns ILO to IHI, but applies !> transformations to all of H if WANTT is .TRUE.. !> 1 <= ILO <= max(1,IHI); IHI <= N. !>

the vibe check here: it's assumed H is already upper quasi-triangular in rows and columns IHI+1:N, and that H(ILO,ILO-1) = 0 (unless ILO = 1, cute exception). DLAHQR works primarily with the Hessenberg submatrix in rows and columns ILO to IHI β€” but lowkey she applies transformations to all of H if WANTT is .TRUE.. Constraints: 1 <= ILO <= max(1,IHI); IHI <= N. πŸ”₯

  • H β€” H is DOUBLE PRECISION array, dimension (LDH,N)
!> H is DOUBLE PRECISION array, dimension (LDH,N) !> On entry, the upper Hessenberg matrix H. !> On exit, if INFO is zero and if WANTT is .TRUE., H is upper !> quasi-triangular in rows and columns ILO:IHI, with any !> 2-by-2 diagonal blocks in standard form. If INFO is zero !> and WANTT is .FALSE., the contents of H are unspecified on !> exit. The output state of H if INFO is nonzero is given !> below under the description of INFO. !>

on entry: the upper Hessenberg matrix H. on exit, if INFO is zero and WANTT is .TRUE., H is upper quasi-triangular in rows and columns ILO:IHI, with any 2-by-2 diagonal blocks in standard form. if INFO is zero and WANTT is .FALSE., the contents of H are unspecified on exit 😭. the output state of H when INFO is nonzero is spelled out below under INFO 🫢

  • LDH β€” LDH is INTEGER
!> LDH is INTEGER !> The leading dimension of the array H. LDH >= max(1,N). !>

leading dimension of the array H. Constraint: LDH >= max(1,N). don't skip it ⭐

  • WR β€” WR is DOUBLE PRECISION array, dimension (N)
!> WR is DOUBLE PRECISION array, dimension (N) !>

yes bestie, that's the whole thing. (the real parts live here β€” see WI πŸ‘€)

  • WI β€” WI is DOUBLE PRECISION array, dimension (N)
!> WI is DOUBLE PRECISION array, dimension (N) !> The real and imaginary parts, respectively, of the computed !> eigenvalues ILO to IHI are stored in the corresponding !> elements of WR and WI. If two eigenvalues are computed as a !> complex conjugate pair, they are stored in consecutive !> elements of WR and WI, say the i-th and (i+1)th, with !> WI(i) > 0 and WI(i+1) < 0. If WANTT is .TRUE., the !> eigenvalues are stored in the same order as on the diagonal !> of the Schur form returned in H, with WR(i) = H(i,i), and, if !> H(i:i+1,i:i+1) is a 2-by-2 diagonal block, !> WI(i) = sqrt(H(i+1,i)*H(i,i+1)) and WI(i+1) = -WI(i). !>

so the real and imaginary parts of the computed eigenvalues ILO to IHI go in the corresponding elements of WR and WI. complex conjugate pair? they're stored in consecutive elements, like the i-th and (i+1)th, with WI(i) > 0 and WI(i+1) < 0. and if WANTT is .TRUE., eigenvalues are stored in the same order as on the diagonal of the Schur form returned in H, with WR(i) = H(i,i), and, if H(i:i+1,i:i+1) is a 2-by-2 diagonal block, WI(i) = sqrt(H(i+1,i)*H(i,i+1)) and WI(i+1) = -WI(i). love a symmetric queen πŸ’€

  • ILOZ β€” ILOZ is INTEGER
!> ILOZ is INTEGER !>

that's all she wrote πŸŽ€

  • IHIZ β€” IHIZ is INTEGER
!> IHIZ is INTEGER !> Specify the rows of Z to which transformations must be !> applied if WANTZ is .TRUE.. !> 1 <= ILOZ <= ILO; IHI <= IHIZ <= N. !>

these two specify the rows of Z the transformations get applied to when WANTZ is .TRUE.. Constraints: 1 <= ILOZ <= ILO; IHI <= IHIZ <= N. 🌈

  • Z β€” Z is DOUBLE PRECISION array, dimension (LDZ,N)
!> Z is DOUBLE PRECISION array, dimension (LDZ,N) !> If WANTZ is .TRUE., on entry Z must contain the current !> matrix Z of transformations accumulated by DHSEQR, and on !> exit Z has been updated; transformations are applied only to !> the submatrix Z(ILOZ:IHIZ,ILO:IHI). !> If WANTZ is .FALSE., Z is not referenced. !>

if WANTZ is .TRUE., on entry Z must contain the current matrix Z of transformations accumulated by DHSEQR, and on exit Z has been updated β€” transformations only hit the submatrix Z(ILOZ:IHIZ,ILO:IHI) bestie, stay in your lane ✨. if WANTZ is .FALSE., Z is not referenced, she's off the clock.

  • LDZ β€” LDZ is INTEGER
!> LDZ is INTEGER !> The leading dimension of the array Z. LDZ >= max(1,N). !>

leading dimension of the array Z. Constraint: LDZ >= max(1,N). πŸ’–

  • INFO β€” INFO is INTEGER
!> INFO is INTEGER !> = 0: successful exit !> > 0: If INFO = i, DLAHQR failed to compute all the !> eigenvalues ILO to IHI in a total of 30 iterations !> per eigenvalue; elements i+1:ihi of WR and WI !> contain those eigenvalues which have been !> successfully computed. !> !> If INFO > 0 and WANTT is .FALSE., then on exit, !> the remaining unconverged eigenvalues are the !> eigenvalues of the upper Hessenberg matrix rows !> and columns ILO through INFO of the final, output !> value of H. !> !> If INFO > 0 and WANTT is .TRUE., then on exit !> (*) (initial value of H)*U = U*(final value of H) !> where U is an orthogonal matrix. The final !> value of H is upper Hessenberg and triangular in !> rows and columns INFO+1 through IHI. !> !> If INFO > 0 and WANTZ is .TRUE., then on exit !> (final value of Z) = (initial value of Z)*U !> where U is the orthogonal matrix in (*) !> (regardless of the value of WANTT.) !>

okay so = 0 means successful exit, we ate πŸ’…. > 0 means if INFO = i, DLAHQR failed to compute all the eigenvalues ILO to IHI in a total of 30 iterations per eigenvalue β€” and elements i+1:ihi of WR and WI contain the eigenvalues that were successfully computed. partial slay, honestly.

and then the three what-happens-next clauses (copying these exactly, they matter):

if INFO > 0 and WANTT is .FALSE., then on exit, the remaining unconverged eigenvalues are the eigenvalues of the upper Hessenberg matrix rows and columns ILO through INFO of the final, output value of H.

if INFO > 0 and WANTT is .TRUE., then on exit

(*)       (initial value of H)*U  = U*(final value of H)

where U is an orthogonal matrix. The final value of H is upper Hessenberg and triangular in rows and columns INFO+1 through IHI.

if INFO > 0 and WANTZ is .TRUE., then on exit

    (final value of Z)  = (initial value of Z)*U

where U is the orthogonal matrix in (*) (regardless of the value of WANTT.).


🌺 Author 🌺

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

the whole squad collabed on this one πŸ«ΆπŸ‘‘


πŸŽ€ Further Details: πŸŽ€

!> !> 02-96 Based on modifications by !> David Day, Sandia National Laboratory, USA !> !> 12-04 Further modifications by !> Ralph Byers, University of Kansas, USA !> This is a modified version of DLAHQR from LAPACK version 3.0. !> It is (1) more robust against overflow and underflow and !> (2) adopts the more conservative Ahues & Tisseur stopping !> criterion (LAWN 122, 1997). !>

the lore!! πŸ“œ 02-96 based on modifications by David Day, Sandia National Laboratory, USA. 12-04 further modifications by Ralph Byers, University of Kansas, USA. this is a modified version of DLAHQR from LAPACK version 3.0, and it is (1) more robust against overflow and underflow and (2) adopts the more conservative Ahues & Tisseur stopping criterion (LAWN 122, 1997). glow-up fr fr πŸ”₯

Definition at line 205 of file dlahqr.f.


⭐ Author ⭐

Generated automatically by Doxygen for LAPACK from the source code. (yes, a robot wrote this bit, not me 😭)


<div align="center">

LAPACK β€” Version 3.12.0

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

that's the page bestie, ily, go compute some eigenvalues πŸ’œπŸ¦‹βœ¨

</div>

πŸ“¦ where this page comes from