SRC/zlaqr4.f(3)

SRC/zlaqr4.f ๐Ÿ’…

LAPACK Library Functions Manual โ€” yes bestie, we're reading the actual LAPACK docs together, grab a snack ๐Ÿ“


โœจ NAME โœจ

SRC/zlaqr4.f โ€” that's the file, that's the whole name section, she's lowkey mysterious like that ๐Ÿซถ


๐ŸŒธ SYNOPSIS ๐ŸŒธ

Functions/Subroutines

  • subroutine zlaqr4 (wantt, wantz, n, ilo, ihi, h, ldh, w, iloz, ihiz, z, ldz, work, lwork, info) โ€” ZLAQR4 computes the eigenvalues of a Hessenberg matrix, and optionally the matrices from the Schur decomposition. iconic behavior honestly ๐Ÿ‘‘

๐Ÿฆ‹ Function/Subroutine Documentation ๐Ÿฆ‹

subroutine zlaqr4 (logical wantt, logical wantz, integer n, integer ilo,
    integer ihi, complex*16, dimension( ldh, * ) h, integer ldh, complex*16,
    dimension( * ) w, integer iloz, integer ihiz, complex*16, dimension(
    ldz, * ) z, integer ldz, complex*16, dimension( * ) work, integer lwork,
    integer info)

ZLAQR4 computes the eigenvalues of a Hessenberg matrix, and optionally the matrices from the Schur decomposition. like she literally does the whole thing, no notes โœจ

๐ŸŽ€ Purpose:

!>
!>    ZLAQR4 implements one level of recursion for ZLAQR0.
!>    It is a complete implementation of the small bulge multi-shift
!>    QR algorithm.  It may be called by ZLAQR0 and, for large enough
!>    deflation window size, it may be called by ZLAQR3.  This
!>    subroutine is identical to ZLAQR0 except that it calls ZLAQR2
!>    instead of ZLAQR3.
!>
!>    ZLAQR4 computes the eigenvalues of a Hessenberg matrix H
!>    and, optionally, the matrices T and Z from the Schur decomposition
!>    H = Z T Z**H, where T is an upper triangular matrix (the
!>    Schur form), and Z is the unitary matrix of Schur vectors.
!>
!>    Optionally Z may be postmultiplied into an input unitary
!>    matrix Q so that this routine can give the Schur factorization
!>    of a matrix A which has been reduced to the Hessenberg form H
!>    by the unitary matrix Q:  A = Q*H*Q**H = (QZ)*H*(QZ)**H.
!>

Translation for the girlies: she's one level of recursion for ZLAQR0, she's a complete implementation of the small bulge multi-shift QR algorithm, and she gets called by ZLAQR0 โ€” and, if the deflation window size is large enough, by ZLAQR3 too. She's identical to ZLAQR0 except she calls ZLAQR2 instead of ZLAQR3. the way that's the entire personality difference, i love her ๐Ÿ’œ

And yeah โ€” she computes eigenvalues of a Hessenberg matrix H, and optionally T and Z from the Schur decomposition H = Z T Z**H, where T is upper triangular (the Schur form) and Z is the unitary matrix of Schur vectors. Bonus round: Z can be postmultiplied into an input unitary matrix Q, so she can hand you the Schur factorization of a matrix A that already got reduced to Hessenberg form H by unitary Q: A = Q*H*Q**H = (QZ)*H*(QZ)**H. ate and left no crumbs ๐Ÿ”ฅ


๐Ÿ’– Parameters ๐Ÿ’–

  • WANTT โ€” LOGICAL, bestie. Set it to .TRUE. if you want the full Schur form T. .FALSE. means you only want eigenvalues, and honestly same, sometimes you just want the numbers ๐Ÿ‘€
  • WANTZ โ€” LOGICAL. .TRUE. = you want the matrix of Schur vectors Z. .FALSE. = Schur vectors are not required. Choose your fighter โœจ
  • N โ€” INTEGER. The order of the matrix H. Constraint: N >= 0. ๐ŸŽ€
  • ILO โ€” INTEGER. That's it. That's the whole description. she said "no comment" ๐Ÿ™ˆ
  • IHI โ€” INTEGER. And here's the lore: it's assumed that H is already upper triangular in rows and columns 1:ILO-1 and IHI+1:N and, if ILO > 1, H(ILO,ILO-1) is zero. ILO and IHI are normally set by a previous call to ZGEBAL, and then passed to ZGEHRD when the matrix output by ZGEBAL is reduced to Hessenberg form. Otherwise, ILO and IHI should be set to 1 and N, respectively. If N > 0, then 1 <= ILO <= IHI <= N. If N = 0, then ILO = 1 and IHI = 0. write that down, there will be a quiz ๐Ÿ“
  • H โ€” COMPLEX*16 array, dimension (LDH,N). On entry: the upper Hessenberg matrix H. On exit: if INFO = 0 and WANTT is .TRUE., then H contains the upper triangular matrix T from the Schur decomposition (the Schur form). If INFO = 0 and WANT is .FALSE., then the contents of H are unspecified on exit โ€” unspecified!! don't trust her!! ๐Ÿ’€ (the output value of H when INFO > 0 is described down under INFO, keep scrolling). Also, this subroutine may explicitly set H(i,j) = 0 for i > j and j = 1, 2, ... ILO-1 or j = IHI+1, IHI+2, ... N.
  • LDH โ€” INTEGER. The leading dimension of the array H. Constraint: LDH >= max(1,N). ๐Ÿ‘‘
  • W โ€” COMPLEX*16 array, dimension (N). The computed eigenvalues of H(ILO:IHI,ILO:IHI) are stored in W(ILO:IHI). If WANTT is .TRUE., then the eigenvalues are stored in the same order as on the diagonal of the Schur form returned in H, with W(i) = H(i,i). matching sets, we love a coordinated moment ๐ŸŽ€
  • ILOZ โ€” INTEGER. Also no comment. mysterious queen ๐Ÿงš
  • IHIZ โ€” INTEGER. Specifies the rows of Z to which transformations must be applied if WANTZ is .TRUE.. Constraints: 1 <= ILOZ <= ILO; IHI <= IHIZ <= N. ๐Ÿฆ‹
  • Z โ€” COMPLEX*16 array, dimension (LDZ,IHI). If WANTZ is .FALSE., then Z is not referenced (she's not even looking at her, fr fr). If WANTZ is .TRUE., then Z(ILO:IHI,ILOZ:IHIZ) is replaced by Z(ILO:IHI,ILOZ:IHIZ)*U where U is the orthogonal Schur factor of H(ILO:IHI,ILO:IHI). (The output value of Z when INFO > 0 is given under the description of INFO below.) ๐Ÿ’–
  • LDZ โ€” INTEGER. The leading dimension of the array Z. If WANTZ is .TRUE. then LDZ >= MAX(1,IHIZ). Otherwise, LDZ >= 1. ๐ŸŒธ
  • WORK โ€” COMPLEX*16 array, dimension LWORK. On exit, if LWORK = -1, WORK(1) returns an estimate of the optimal value for LWORK. she's a little fortune teller when you ask nicely ๐Ÿ”ฎ
  • LWORK โ€” INTEGER. The dimension of the array WORK. LWORK >= max(1,N) is sufficient, but LWORK typically as large as 6*N may be required for optimal performance โ€” so a workspace query to determine the optimal workspace size is recommended, bestie, don't skip her. If LWORK = -1, then ZLAQR4 does a workspace query. In this case, ZLAQR4 checks the input parameters and estimates the optimal workspace size for the given values of N, ILO and IHI. The estimate is returned in WORK(1). No error message related to LWORK is issued by XERBLA. Neither H nor Z are accessed. she literally doesn't touch them, so respectful ๐Ÿซถ
  • INFO โ€” INTEGER. The vibe report:
    • = 0: successful exit โœจ slay
    • > 0: if INFO = i, ZLAQR4 failed to compute all of the eigenvalues. Elements 1:ilo-1 and i+1:n of WR and WI contain those eigenvalues which have been successfully computed. (Failures are rare.) rare but not never, so likeโ€ฆ brace yourself ๐Ÿ˜ญ

Still with INFO > 0? Here's the rest of the tea:

!>                If INFO > 0 and WANT is .FALSE., then on exit,
!>                the remaining unconverged eigenvalues are the eigen-
!>                values 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 a unitary 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(ILO:IHI,ILOZ:IHIZ)
!>                   =  (initial value of Z(ILO:IHI,ILOZ:IHIZ)*U
!>
!>                where U is the unitary matrix in (*) (regard-
!>                less of the value of WANTT.)
!>
!>                If INFO > 0 and WANTZ is .FALSE., then Z is not
!>                accessed.
!>

note the little (*) equation, she's giving main character energy with that asterisk โญ And yes โ€” if INFO > 0 and WANTZ is .FALSE., then Z is not accessed. Periodt. ๐Ÿ’…


๐ŸŒˆ Author ๐ŸŒˆ

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

the whole squad, the whole committee, we love a collaborative effort ๐Ÿ‘‘


๐Ÿ“ Contributors: ๐Ÿ“

Karen Braman and Ralph Byers, Department of Mathematics, University of Kansas, USA. shoutout Kansas!! ๐ŸŒพ


๐Ÿ’œ References: ๐Ÿ’œ

 K. Braman, R. Byers and R. Mathias, The Multi-Shift QR
 Algorithm Part I: Maintaining Well Focused Shifts, and Level 3
 Performance, SIAM Journal of Matrix Analysis, volume 23, pages
 929--947, 2002.

 K. Braman, R. Byers and R. Mathias, The Multi-Shift QR Algorithm
Part II: Aggressive Early Deflation, SIAM Journal of Matrix
Analysis, volume 23, pages 948--973, 2002.

part one AND part two, she read the whole series, not just the first book ๐Ÿ“šโœจ


Definition at line 245 of file zlaqr4.f. ๐ŸŽฏ


๐Ÿงš Author ๐Ÿงš

Generated automatically by Doxygen for LAPACK from the source code. not a human, a whole robot, and she still ate ๐Ÿค–๐Ÿ’–


okay that's the whole page bestie, every flag, every constraint, every !> comment, nothing skipped โ€” you're so ready for that exam/lab/debugging-at-2am session ๐Ÿซถ

LAPACK, Version 3.12.0, SRC/zlaqr4.f(3) โ€” mwah, go forth and diagonalize ๐Ÿ’‹ ๐ŸŽ€

๐Ÿ“ฆ where this page comes from