laqr0(3)

laqr0(3) ๐Ÿฆ‹ Library Functions Manual

okay so bestie, this is the page for laqr0 from the Library Functions Manual, and it's a whole family situation: claqr0, dlaqr0, slaqr0, zlaqr0. four siblings, same vibe, different data types. buckle up ๐Ÿ’–


๐ŸŒธ NAME ๐ŸŒธ

laqr0 โ€” laqr0: eig of Hessenberg, step in hseqr

(yes the name section literally repeats the name back at you. self-referential queen behavior. we love her.)


โœจ SYNOPSIS โœจ

Functions

  • subroutine claqr0 (wantt, wantz, n, ilo, ihi, h, ldh, w, iloz, ihiz, z, ldz, work, lwork, info) โ€” CLAQR0 computes the eigenvalues of a Hessenberg matrix, and optionally the matrices from the Schur decomposition.
  • subroutine dlaqr0 (wantt, wantz, n, ilo, ihi, h, ldh, wr, wi, iloz, ihiz, z, ldz, work, lwork, info) โ€” DLAQR0 computes the eigenvalues of a Hessenberg matrix, and optionally the matrices from the Schur decomposition.
  • subroutine slaqr0 (wantt, wantz, n, ilo, ihi, h, ldh, wr, wi, iloz, ihiz, z, ldz, work, lwork, info) โ€” SLAQR0 computes the eigenvalues of a Hessenberg matrix, and optionally the matrices from the Schur decomposition.
  • subroutine zlaqr0 (wantt, wantz, n, ilo, ihi, h, ldh, w, iloz, ihiz, z, ldz, work, lwork, info) โ€” ZLAQR0 computes the eigenvalues of a Hessenberg matrix, and optionally the matrices from the Schur decomposition.
notice the pattern? c and z take a single complex array w for their eigenvalues; d and s take the real pair wr, wi because real matrices get real/imaginary split like that. ๐ŸŽ€

๐Ÿ’– DETAILED DESCRIPTION ๐Ÿ’–

the header says there's a detailed description here, but honestly the whole thing lives down in Function Documentation anyway. keep scrolling, bestie ๐Ÿซถ


๐Ÿ’… FUNCTION DOCUMENTATION ๐Ÿ’…

subroutine claqr0

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

CLAQR0 computes the eigenvalues of a Hessenberg matrix, and optionally the matrices from the Schur decomposition.

Purpose:

  • CLAQR0 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.

Parameters

  • WANTT โ€” is LOGICAL.
    • = .TRUE. : the full Schur form T is required;
    • = .FALSE.: only eigenvalues are required.
  • WANTZ โ€” is LOGICAL.
    • = .TRUE. : the matrix of Schur vectors Z is required;
    • = .FALSE.: Schur vectors are not required.
  • N โ€” is INTEGER. The order of the matrix H. N >= 0.
  • ILO โ€” is INTEGER. that's it. that's the whole description. she's mysterious โœจ
  • IHI โ€” is INTEGER. It is 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 CGEBAL, and then passed to CGEHRD when the matrix output by CGEBAL 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.
  • H โ€” is COMPLEX 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. (The output value of H when INFO > 0 is given under the description of INFO below.)
    • 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 โ€” is INTEGER. The leading dimension of the array H. LDH >= max(1,N).
  • W โ€” is COMPLEX 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).
  • ILOZ โ€” is INTEGER. again, that's all she wrote ๐ŸŽ€
  • IHIZ โ€” is INTEGER. Specify the rows of Z to which transformations must be applied if WANTZ is .TRUE.. 1 <= ILOZ <= ILO; IHI <= IHIZ <= N.
  • Z โ€” is COMPLEX array, dimension (LDZ,IHI). If WANTZ is .FALSE., then Z is not referenced. 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 โ€” is INTEGER. The leading dimension of the array Z. if WANTZ is .TRUE. then LDZ >= MAX(1,IHIZ). Otherwise, LDZ >= 1.
  • WORK โ€” is COMPLEX array, dimension LWORK. On exit, if LWORK = -1, WORK(1) returns an estimate of the optimal value for LWORK.
  • LWORK โ€” is 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. A workspace query to determine the optimal workspace size is recommended.
    • If LWORK = -1, then CLAQR0 does a workspace query. In this case, CLAQR0 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.
  • INFO โ€” is INTEGER.
    • = 0: successful exit
    • > 0: if INFO = i, CLAQR0 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.)
    • If INFO > 0 and WANT 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 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 (*) (regardless of the value of WANTT.)
  • If INFO > 0 and WANTZ is .FALSE., then Z is not accessed.
๐Ÿ’€ yes, the INFO text talks about WR and WI even though claqr0 takes a single w. that's exactly what the source says, so that's exactly what you get. no cap.

Author

Univ. of Tennessee

Univ. of California Berkeley

Univ. of Colorado Denver

NAG Ltd.

Contributors:

Karen Braman and Ralph Byers, Department of Mathematics, University of Kansas, USA

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.

Definition at line 238 of file claqr0.f.


subroutine dlaqr0

subroutine dlaqr0 (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, double precision, dimension( * ) work, integer lwork,
    integer info)

DLAQR0 computes the eigenvalues of a Hessenberg matrix, and optionally the matrices from the Schur decomposition.

Purpose:

  • DLAQR0 computes the eigenvalues of a Hessenberg matrix H and, optionally, the matrices T and Z from the Schur decomposition H = Z T Z**T, where T is an upper quasi-triangular matrix (the Schur form), and Z is the orthogonal matrix of Schur vectors.
  • Optionally Z may be postmultiplied into an input orthogonal 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 orthogonal matrix Q: A = Q*H*Q**T = (QZ)*T*(QZ)**T.

Parameters

  • WANTT โ€” is LOGICAL.
    • = .TRUE. : the full Schur form T is required;
    • = .FALSE.: only eigenvalues are required.
  • WANTZ โ€” is LOGICAL.
    • = .TRUE. : the matrix of Schur vectors Z is required;
    • = .FALSE.: Schur vectors are not required.
  • N โ€” is INTEGER. The order of the matrix H. N >= 0.
  • ILO โ€” is INTEGER. short and sweet, she said nothing else ๐Ÿ’…
  • IHI โ€” and that's where part 1 runs out, bestie ๐Ÿ˜ญ the page keeps going in the next chunk โ€” don't go anywhere, we're so not done here ๐Ÿซถ
  • IHI โ€” INTEGER. So here's the deal: it's assumed that H is already upper triangular in rows and columns 1:ILO-1 and IHI+1:N, and, if ILO > 1, that H(ILO,ILO-1) is zero. ๐Ÿ’… ILO and IHI are normally set by a previous call to DGEBAL, and then passed to DGEHRD when the matrix output by DGEBAL 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. no cap, those are the rules ๐Ÿซถ
  • H โ€” DOUBLE PRECISION 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 quasi-triangular matrix T from the Schur decomposition (the Schur form); 2-by-2 diagonal blocks (corresponding to complex conjugate pairs of eigenvalues) are returned in standard form, with H(i,i) = H(i+1,i+1) and H(i+1,i)*H(i,i+1) < 0. If INFO = 0 and WANTT is .FALSE., then the contents of H are unspecified on exit. (The output value of H when INFO > 0 is given under the description of INFO below.) 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. LDH >= max(1,N). Keep it legal bestie ๐ŸŽ€
  • WR โ€” DOUBLE PRECISION array, dimension (IHI).
  • WI โ€” DOUBLE PRECISION array, dimension (IHI). The real and imaginary parts, respectively, of the computed eigenvalues of H(ILO:IHI,ILO:IHI) are stored in WR(ILO:IHI) and WI(ILO:IHI). 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., then 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). ๐Ÿงฎ the way these two always travel as a pair? iconic
  • ILOZ โ€” INTEGER.
  • IHIZ โ€” INTEGER. Specify the rows of Z to which transformations must be applied if WANTZ is .TRUE.. โ€” and yes, the double period in the original is sending me ๐Ÿ˜ญ but the constraints are 1 <= ILOZ <= ILO and IHI <= IHIZ <= N.
  • Z โ€” DOUBLE PRECISION array, dimension (LDZ,IHI). If WANTZ is .FALSE., then Z is not referenced โ€” she's off duty, don't @ her ๐Ÿ™ˆ 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. lowkey the lowercase "if" is a whole mood, but the math stands ๐Ÿ’œ
  • WORK โ€” DOUBLE PRECISION array, dimension LWORK. On exit, if LWORK = -1, WORK(1) returns an estimate of the optimal value for LWORK. cute little preview moment ๐Ÿ”ฅ
  • 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. A workspace query to determine the optimal workspace size is recommended. ๐Ÿ‘‘ If LWORK = -1, then DLAQR0 does a workspace query. In this case, DLAQR0 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. โœจ (you literally get a quote with zero side effects, we love a no-strings vibe check)
  • INFO โ€” INTEGER:
    • = 0: successful exit ๐ŸŽ‰
    • > 0: if INFO = i, DLAQR0 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 zero, so don't panic, just read the map ๐Ÿ—บ๏ธ

If INFO > 0 and WANT 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. (bestie, the source literally says WANT, not WANTT โ€” that's their typo, not mine, and I'm not touching it ๐Ÿ’€)

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 quasi-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 orthogonal matrix in (*) (regardless of the value of WANTT.)

If INFO > 0 and WANTZ is .FALSE., then Z is not accessed. ๐Ÿฆ‹


๐Ÿ’– Contributors

Karen Braman and Ralph Byers, Department of Mathematics, University of Kansas, USA. absolute legends for this one ๐Ÿ‘‘

๐Ÿ“š 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.

like, go read the lore, it's giving academic main character energy ๐Ÿ“–โœจ

๐ŸŒธ Author

Univ. of Tennessee

Univ. of California Berkeley

Univ. of Colorado Denver

NAG Ltd.

โญ Definition at line 254 of file dlaqr0.f.


๐ŸŒˆ subroutine slaqr0 ๐ŸŒˆ

subroutine slaqr0 (logical wantt, logical wantz, integer n, integer ilo,
    integer ihi, real, dimension( ldh, * ) h, integer ldh, real, dimension(
    * ) wr, real, dimension( * ) wi, integer iloz, integer ihiz, real,
    dimension( ldz, * ) z, integer ldz, real, dimension( * ) work, integer
    lwork, integer info)

SLAQR0 computes the eigenvalues of a Hessenberg matrix, and optionally the matrices from the Schur decomposition. Same energy as DLAQR0 but single precision, and honestly she ate ๐Ÿ’…

๐ŸŽ€ Purpose:

SLAQR0 computes the eigenvalues of a Hessenberg matrix H and, optionally, the matrices T and Z from the Schur decomposition H = Z T Z**T, where T is an upper quasi-triangular matrix (the Schur form), and Z is the orthogonal matrix of Schur vectors. Optionally Z may be postmultiplied into an input orthogonal 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 orthogonal matrix Q: A = Q*H*Q**T = (QZ)*T*(QZ)**T. ๐Ÿฆ‹ so you can stack the vibes, fr fr

๐Ÿงš Parameters

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

pick your fighter bestie, the whole form or just the numbers โœจ

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

๐ŸŽ€

  • N โ€” INTEGER. The order of the matrix H. N >= 0. ๐ŸŒŸ
  • ILO โ€” INTEGER. (that's it, that's the whole description, she's mysterious like that ๐Ÿ™ˆ)
  • IHI โ€” INTEGER. It is 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 SGEBAL, and then passed to SGEHRD when the matrix output by SGEBAL 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. ๐Ÿ’œ same rules as her double-precision sister, just swap D for S
  • H โ€” REAL 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 quasi-triangular matrix T from the Schur decomposition (the Schur form); 2-by-2 diagonal blocks (corresponding to complex conjugate pairs of eigenvalues) are returned in standard form, with H(i,i) = H(i+1,i+1) and H(i+1,i)*H(i,i+1) < 0. If INFO = 0 and WANTT is .FALSE., then the contents of H are unspecified on exit. (The output value of H when INFO > 0 is given under the description of INFO below.) 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. LDH >= max(1,N). โญ
  • WR โ€” REAL array, dimension (IHI). ๐Ÿ“
  • WI โ€” REAL array, dimension (IHI). ๐Ÿ’–
  • WI โ€” REAL array, dimension (IHI). The real and imaginary parts, respectively, of the computed eigenvalues of H(ILO:IHI,ILO:IHI) are stored in WR(ILO:IHI) and WI(ILO:IHI). 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., then 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). iconic little conjugate-pair behavior, no cap ๐Ÿ’…
  • ILOZ โ€” ILOZ is INTEGER. thatโ€™s the whole note, bestie โœจ
  • IHIZ โ€” IHIZ is INTEGER. Specifies the rows of Z to which transformations must be applied if WANTZ is .TRUE.. Constraints are giving very strict-girl energy: 1 <= ILOZ <= ILO; IHI <= IHIZ <= N. ๐ŸŽ€
  • Z โ€” REAL array, dimension (LDZ,IHI). If WANTZ is .FALSE., then Z is not referenced. 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 โ€” LDZ is INTEGER. The leading dimension of the array Z. if WANTZ is .TRUE. then LDZ >= MAX(1,IHIZ). Otherwise, LDZ >= 1. respect the leading dimension or catch hands ๐Ÿซถ
  • WORK โ€” REAL array, dimension LWORK. On exit, if LWORK = -1, WORK(1) returns an estimate of the optimal value for LWORK. ๐Ÿ’–
  • LWORK โ€” LWORK is 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. A workspace query to determine the optimal workspace size is recommended. If LWORK = -1, then SLAQR0 does a workspace query. In this case, SLAQR0 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. workspace query is the main character here, honestly โญ
  • INFO โ€” INFO is INTEGER:
    • = 0: successful exit ๐Ÿ’š
    • > 0: if INFO = i, SLAQR0 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 a vibe when it happens ๐Ÿ˜ญ

If INFO > 0 and WANT 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 quasi-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 orthogonal matrix in (*) (regardless of the value of WANTT.) regardless, bestie. regardless. ๐Ÿ’€

If INFO > 0 and WANTZ is .FALSE., then Z is not accessed.

๐Ÿ–‹๏ธ Author ๐Ÿ–‹๏ธ

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

๐ŸŒŸ Contributors ๐ŸŒŸ

Karen Braman and Ralph Byers, Department of Mathematics, University of Kansas, USA ๐ŸŽ€

๐Ÿ“š 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.

Definition at line 254 of file slaqr0.f. ๐Ÿซถ


๐ŸŒˆ subroutine zlaqr0 ๐ŸŒˆ

   subroutine zlaqr0 (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)

ZLAQR0 computes the eigenvalues of a Hessenberg matrix, and optionally the matrices from the Schur decomposition. the complex edition has entered the chat ๐Ÿ’œ

๐ŸŽฏ Purpose ๐ŸŽฏ

ZLAQR0 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. math but make it fashion ๐Ÿ’…

๐Ÿงธ Parameters ๐Ÿงธ

  • WANTT โ€” WANTT is LOGICAL:
    • = .TRUE. : the full Schur form T is required;
    • = .FALSE.: only eigenvalues are required.
  • WANTZ โ€” WANTZ is LOGICAL:
    • = .TRUE. : the matrix of Schur vectors Z is required;
    • = .FALSE.: Schur vectors are not required.
  • N โ€” N is INTEGER. The order of the matrix H. N >= 0. ๐Ÿ“
  • ILO โ€” ILO is INTEGER. short and mysterious, honestly
  • IHI โ€” IHI is INTEGER. It is 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. boundary conditions are literally the blueprint ๐Ÿฆ‹
  • H โ€” H is 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. (The output value of H when INFO > 0 is given under the description of INFO below.) 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 โ€” LDH is INTEGER. The leading dimension of the array H. LDH >= max(1,N). ๐Ÿ’–
  • W โ€” W is 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). ๐ŸŒธ
  • ILOZ โ€” ILOZ is INTEGER. โœจ
  • IHIZ โ€” IHIZ is INTEGER. Specify the rows of Z to which transformations must be applied if WANTZ is .TRUE.. 1 <= ILOZ <= ILO; IHI <= IHIZ <= N. ๐Ÿซถ
  • Z โ€” Z is COMPLEX*16 array, dimension (LDZ,IHI). If WANTZ is .FALSE., then Z is not referenced. 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 โ€” LDZ is INTEGER. The leading dimension of the array Z. if WANTZ is .TRUE. then LDZ >= MAX(1,IHIZ). Otherwise, LDZ >= 1. again: respect the leading dimension, bestie ๐Ÿ’…
  • WORK โ€” WORK is COMPLEX*16 array, dimension LWORK. On exit, if LWORK = -1, WORK(1) returns an estimate of the optimal value for LWORK. โญ
  • LWORK โ€” LWORK is 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. A workspace query to determine the optimal workspace size is recommended. If LWORK = -1, then ZLAQR0 does a workspace query. In this case, ZLAQR0 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. workspace query said โ€œlet me do my little estimateโ€ and honestly slay ๐ŸŒŸ
  • INFO โ€”

okay so back to INFO โ€” it's an INTEGER, and here's the whole breakdown bestie:

  • INFO = 0 โ€” successful exit, slay โœจ
  • INFO > 0 โ€” if INFO = i, then ZLAQR0 failed to compute all of the eigenvalues. The elements 1:ilo-1 and i+1:n of WR and WI contain those eigenvalues which have been successfully computed. (Failures are rare.) ๐Ÿซถ
If INFO > 0 and WANT 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 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 (*) (regardless of the value of WANTT.)
If INFO > 0 and WANTZ is .FALSE., then Z is not accessed.

๐Ÿ‘‘ Author ๐Ÿ‘‘

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

๐ŸŒธ Contributors ๐ŸŒธ

Karen Braman and Ralph Byers, Department of Mathematics, University of Kansas, USA

๐Ÿ“š 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.

๐Ÿงพ Definition at line 239 of file zlaqr0.f. ๐Ÿงพ

yep, that's literally where it lives.

๐Ÿค– Author (Doxygen's autogenerated version) ๐Ÿค–

Generated automatically by Doxygen for LAPACK from the source code.


๐Ÿ’– and that's the whole page, bestie! this is from LAPACK Version 3.12.0, page laqr0(3) โ€” periodt. ๐Ÿ’–

๐Ÿ“ฆ where this page comes from