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?candztake a single complex arraywfor their eigenvalues;dandstake the real pairwr,wibecause 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
Hand, optionally, the matricesTandZfrom the Schur decompositionH = Z T Z**H, whereTis an upper triangular matrix (the Schur form), andZis the unitary matrix of Schur vectors. - Optionally
Zmay be postmultiplied into an input unitary matrixQso that this routine can give the Schur factorization of a matrixAwhich has been reduced to the Hessenberg formHby the unitary matrixQ:A = Q*H*Q**H = (QZ)*H*(QZ)**H.
Parameters
WANTTโ isLOGICAL.= .TRUE.: the full Schur formTis required;= .FALSE.: only eigenvalues are required.
WANTZโ isLOGICAL.= .TRUE.: the matrix of Schur vectorsZis required;= .FALSE.: Schur vectors are not required.
Nโ isINTEGER. The order of the matrixH.N >= 0.ILOโ isINTEGER. that's it. that's the whole description. she's mysterious โจIHIโ isINTEGER. It is assumed thatHis already upper triangular in rows and columns1:ILO-1andIHI+1:Nand, ifILO > 1,H(ILO,ILO-1)is zero.ILOandIHIare normally set by a previous call toCGEBAL, and then passed toCGEHRDwhen the matrix output byCGEBALis reduced to Hessenberg form. Otherwise,ILOandIHIshould be set to1andN, respectively. IfN > 0, then1 <= ILO <= IHI <= N. IfN = 0, thenILO = 1andIHI = 0.Hโ isCOMPLEXarray, dimension(LDH,N).- On entry, the upper Hessenberg matrix
H. - On exit, if
INFO = 0andWANTTis.TRUE., thenHcontains the upper triangular matrixTfrom the Schur decomposition (the Schur form). IfINFO = 0andWANTis.FALSE., then the contents ofHare unspecified on exit. (The output value ofHwhenINFO > 0is given under the description ofINFObelow.) - This subroutine may explicitly set
H(i,j) = 0fori > jandj = 1, 2, ... ILO-1orj = IHI+1, IHI+2, ... N.
- On entry, the upper Hessenberg matrix
LDHโ isINTEGER. The leading dimension of the arrayH.LDH >= max(1,N).Wโ isCOMPLEXarray, dimension(N). The computed eigenvalues ofH(ILO:IHI,ILO:IHI)are stored inW(ILO:IHI). IfWANTTis.TRUE., then the eigenvalues are stored in the same order as on the diagonal of the Schur form returned inH, withW(i) = H(i,i).ILOZโ isINTEGER. again, that's all she wrote ๐IHIZโ isINTEGER. Specify the rows ofZto which transformations must be applied ifWANTZis.TRUE..1 <= ILOZ <= ILO;IHI <= IHIZ <= N.Zโ isCOMPLEXarray, dimension(LDZ,IHI). IfWANTZis.FALSE., thenZis not referenced. IfWANTZis.TRUE., thenZ(ILO:IHI,ILOZ:IHIZ)is replaced byZ(ILO:IHI,ILOZ:IHIZ)*UwhereUis the orthogonal Schur factor ofH(ILO:IHI,ILO:IHI). (The output value ofZwhenINFO > 0is given under the description ofINFObelow.)LDZโ isINTEGER. The leading dimension of the arrayZ. ifWANTZis.TRUE.thenLDZ >= MAX(1,IHIZ). Otherwise,LDZ >= 1.WORKโ isCOMPLEXarray, dimensionLWORK. On exit, ifLWORK = -1,WORK(1)returns an estimate of the optimal value forLWORK.LWORKโ isINTEGER. The dimension of the arrayWORK.LWORK >= max(1,N)is sufficient, butLWORKtypically as large as6*Nmay 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 ofN,ILOandIHI. The estimate is returned inWORK(1). No error message related toLWORKis issued byXERBLA. NeitherHnorZare accessed.
- If
INFOโ isINTEGER.= 0: successful exit> 0: ifINFO = i, CLAQR0 failed to compute all of the eigenvalues. Elements1:ilo-1andi+1:nofWRandWIcontain those eigenvalues which have been successfully computed. (Failures are rare.)- If
INFO > 0andWANTis.FALSE., then on exit, the remaining unconverged eigenvalues are the eigenvalues of the upper Hessenberg matrix rows and columnsILOthroughINFOof the final, output value ofH. - If
INFO > 0andWANTTis.TRUE., then on exit
(*) (initial value of H)*U = U*(final value of H)
- where
Uis a unitary matrix. The final value ofHis upper Hessenberg and triangular in rows and columnsINFO+1throughIHI. - If
INFO > 0andWANTZis.TRUE., then on exit
(final value of Z(ILO:IHI,ILOZ:IHIZ)
= (initial value of Z(ILO:IHI,ILOZ:IHIZ)*U
- where
Uis the unitary matrix in(*)(regardless of the value ofWANTT.) - If
INFO > 0andWANTZis.FALSE., thenZis not accessed.
๐ yes, theINFOtext talks aboutWRandWIeven thoughclaqr0takes a singlew. 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
Hand, optionally, the matricesTandZfrom the Schur decompositionH = Z T Z**T, whereTis an upper quasi-triangular matrix (the Schur form), andZis the orthogonal matrix of Schur vectors. - Optionally
Zmay be postmultiplied into an input orthogonal matrixQso that this routine can give the Schur factorization of a matrixAwhich has been reduced to the Hessenberg formHby the orthogonal matrixQ:A = Q*H*Q**T = (QZ)*T*(QZ)**T.
Parameters
WANTTโ isLOGICAL.= .TRUE.: the full Schur formTis required;= .FALSE.: only eigenvalues are required.
WANTZโ isLOGICAL.= .TRUE.: the matrix of Schur vectorsZis required;= .FALSE.: Schur vectors are not required.
Nโ isINTEGER. The order of the matrixH.N >= 0.ILOโ isINTEGER. 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 thatHis already upper triangular in rows and columns1:ILO-1andIHI+1:N, and, ifILO > 1, thatH(ILO,ILO-1)is zero. ๐ILOandIHIare normally set by a previous call toDGEBAL, and then passed toDGEHRDwhen the matrix output byDGEBALis reduced to Hessenberg form. Otherwise,ILOandIHIshould be set to1andN, respectively. IfN > 0, then1 <= ILO <= IHI <= N. IfN = 0, thenILO = 1andIHI = 0. no cap, those are the rules ๐ซถHโDOUBLE PRECISIONarray, dimension(LDH,N). On entry, the upper Hessenberg matrixH. On exit, ifINFO = 0andWANTTis.TRUE., thenHcontains the upper quasi-triangular matrixTfrom the Schur decomposition (the Schur form); 2-by-2 diagonal blocks (corresponding to complex conjugate pairs of eigenvalues) are returned in standard form, withH(i,i) = H(i+1,i+1)andH(i+1,i)*H(i,i+1) < 0. IfINFO = 0andWANTTis.FALSE., then the contents ofHare unspecified on exit. (The output value ofHwhenINFO > 0is given under the description ofINFObelow.) This subroutine may explicitly setH(i,j) = 0fori > jandj = 1, 2, ... ILO-1orj = IHI+1, IHI+2, ... N. โจLDHโINTEGER. The leading dimension of the arrayH.LDH >= max(1,N). Keep it legal bestie ๐WRโDOUBLE PRECISIONarray, dimension(IHI).WIโDOUBLE PRECISIONarray, dimension(IHI). The real and imaginary parts, respectively, of the computed eigenvalues ofH(ILO:IHI,ILO:IHI)are stored inWR(ILO:IHI)andWI(ILO:IHI). If two eigenvalues are computed as a complex conjugate pair, they are stored in consecutive elements ofWRandWI, say thei-th and(i+1)th, withWI(i) > 0andWI(i+1) < 0. IfWANTTis.TRUE., then the eigenvalues are stored in the same order as on the diagonal of the Schur form returned inH, withWR(i) = H(i,i)and, ifH(i:i+1,i:i+1)is a 2-by-2 diagonal block,WI(i) = sqrt(-H(i+1,i)*H(i,i+1))andWI(i+1) = -WI(i). ๐งฎ the way these two always travel as a pair? iconicILOZโINTEGER.IHIZโINTEGER. Specify the rows ofZto which transformations must be applied ifWANTZis.TRUE..โ and yes, the double period in the original is sending me ๐ญ but the constraints are1 <= ILOZ <= ILOandIHI <= IHIZ <= N.ZโDOUBLE PRECISIONarray, dimension(LDZ,IHI). IfWANTZis.FALSE., thenZis not referenced โ she's off duty, don't @ her ๐ IfWANTZis.TRUE., thenZ(ILO:IHI,ILOZ:IHIZ)is replaced byZ(ILO:IHI,ILOZ:IHIZ)*UwhereUis the orthogonal Schur factor ofH(ILO:IHI,ILO:IHI). (The output value ofZwhenINFO > 0is given under the description ofINFObelow.)LDZโINTEGER. The leading dimension of the arrayZ. ifWANTZis.TRUE.thenLDZ >= MAX(1,IHIZ). Otherwise,LDZ >= 1. lowkey the lowercase "if" is a whole mood, but the math stands ๐WORKโDOUBLE PRECISIONarray, dimensionLWORK. On exit, ifLWORK = -1,WORK(1)returns an estimate of the optimal value forLWORK. cute little preview moment ๐ฅLWORKโINTEGER. The dimension of the arrayWORK.LWORK >= max(1,N)is sufficient, butLWORKtypically as large as6*Nmay be required for optimal performance. A workspace query to determine the optimal workspace size is recommended. ๐ IfLWORK = -1, thenDLAQR0does a workspace query. In this case,DLAQR0checks the input parameters and estimates the optimal workspace size for the given values ofN,ILOandIHI. The estimate is returned inWORK(1). No error message related toLWORKis issued byXERBLA. NeitherHnorZare accessed. โจ (you literally get a quote with zero side effects, we love a no-strings vibe check)INFOโINTEGER:= 0: successful exit ๐> 0: ifINFO = i,DLAQR0failed to compute all of the eigenvalues. Elements1:ilo-1andi+1:nofWRandWIcontain 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:
SLAQR0computes the eigenvalues of a Hessenberg matrixHand, optionally, the matricesTandZfrom the Schur decompositionH = Z T Z**T, whereTis an upper quasi-triangular matrix (the Schur form), andZis the orthogonal matrix of Schur vectors. OptionallyZmay be postmultiplied into an input orthogonal matrixQso that this routine can give the Schur factorization of a matrixAwhich has been reduced to the Hessenberg formHby the orthogonal matrixQ:A = Q*H*Q**T = (QZ)*T*(QZ)**T. ๐ฆ so you can stack the vibes, fr fr
๐ง Parameters
WANTTโLOGICAL.= .TRUE.: the full Schur formTis required;= .FALSE.: only eigenvalues are required.
pick your fighter bestie, the whole form or just the numbers โจ
WANTZโLOGICAL.= .TRUE.: the matrix of Schur vectorsZis required;= .FALSE.: Schur vectors are not required.
๐
NโINTEGER. The order of the matrixH.N >= 0. ๐ILOโINTEGER. (that's it, that's the whole description, she's mysterious like that ๐)IHIโINTEGER. It is assumed thatHis already upper triangular in rows and columns1:ILO-1andIHI+1:Nand, ifILO > 1,H(ILO,ILO-1)is zero.ILOandIHIare normally set by a previous call toSGEBAL, and then passed toSGEHRDwhen the matrix output bySGEBALis reduced to Hessenberg form. Otherwise,ILOandIHIshould be set to1andN, respectively. IfN > 0, then1 <= ILO <= IHI <= N. IfN = 0, thenILO = 1andIHI = 0. ๐ same rules as her double-precision sister, just swapDforSHโREALarray, dimension(LDH,N). On entry, the upper Hessenberg matrixH. On exit, ifINFO = 0andWANTTis.TRUE., thenHcontains the upper quasi-triangular matrixTfrom the Schur decomposition (the Schur form); 2-by-2 diagonal blocks (corresponding to complex conjugate pairs of eigenvalues) are returned in standard form, withH(i,i) = H(i+1,i+1)andH(i+1,i)*H(i,i+1) < 0. IfINFO = 0andWANTTis.FALSE., then the contents ofHare unspecified on exit. (The output value ofHwhenINFO > 0is given under the description ofINFObelow.) This subroutine may explicitly setH(i,j) = 0fori > jandj = 1, 2, ... ILO-1orj = IHI+1, IHI+2, ... N. ๐ฅLDHโINTEGER. The leading dimension of the arrayH.LDH >= max(1,N). โญWRโREALarray, dimension(IHI). ๐WIโREALarray, dimension(IHI). ๐WIโREAL array, dimension (IHI). The real and imaginary parts, respectively, of the computed eigenvalues ofH(ILO:IHI,ILO:IHI)are stored inWR(ILO:IHI)andWI(ILO:IHI). If two eigenvalues are computed as a complex conjugate pair, they are stored in consecutive elements ofWRandWI, say the i-th and (i+1)th, withWI(i) > 0andWI(i+1) < 0. IfWANTTis.TRUE., then the eigenvalues are stored in the same order as on the diagonal of the Schur form returned inH, withWR(i) = H(i,i)and, ifH(i:i+1,i:i+1)is a 2-by-2 diagonal block,WI(i) = sqrt(-H(i+1,i)*H(i,i+1))andWI(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 ofZto which transformations must be applied ifWANTZis.TRUE.. Constraints are giving very strict-girl energy:1 <= ILOZ <= ILO; IHI <= IHIZ <= N. ๐ZโREAL array, dimension (LDZ,IHI). IfWANTZis.FALSE., thenZis not referenced. IfWANTZis.TRUE., thenZ(ILO:IHI,ILOZ:IHIZ)is replaced byZ(ILO:IHI,ILOZ:IHIZ)*UwhereUis the orthogonal Schur factor ofH(ILO:IHI,ILO:IHI). (The output value ofZwhenINFO > 0is given under the description ofINFObelow.) ๐ฆLDZโLDZ is INTEGER. The leading dimension of the arrayZ. ifWANTZis.TRUE.thenLDZ >= MAX(1,IHIZ). Otherwise,LDZ >= 1. respect the leading dimension or catch hands ๐ซถWORKโREAL array, dimension LWORK. On exit, ifLWORK = -1,WORK(1)returns an estimate of the optimal value forLWORK. ๐LWORKโLWORK is INTEGER. The dimension of the arrayWORK.LWORK >= max(1,N)is sufficient, butLWORKtypically as large as6*Nmay be required for optimal performance. A workspace query to determine the optimal workspace size is recommended. IfLWORK = -1, thenSLAQR0does a workspace query. In this case,SLAQR0checks the input parameters and estimates the optimal workspace size for the given values ofN,ILOandIHI. The estimate is returned inWORK(1). No error message related toLWORKis issued byXERBLA. NeitherHnorZare accessed. workspace query is the main character here, honestly โญINFOโINFO is INTEGER:= 0: successful exit ๐> 0: ifINFO = i,SLAQR0failed to compute all of the eigenvalues. Elements1:ilo-1andi+1:nofWRandWIcontain 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 formTis required;= .FALSE.: only eigenvalues are required.
WANTZโWANTZ is LOGICAL:= .TRUE.: the matrix of Schur vectorsZis required;= .FALSE.: Schur vectors are not required.
NโN is INTEGER. The order of the matrixH.N >= 0. ๐ILOโILO is INTEGER. short and mysterious, honestlyIHIโIHI is INTEGER. It is assumed thatHis already upper triangular in rows and columns1:ILO-1andIHI+1:Nand, ifILO > 1,H(ILO,ILO-1)is zero.ILOandIHIare normally set by a previous call toZGEBAL, and then passed toZGEHRDwhen the matrix output byZGEBALis reduced to Hessenberg form. Otherwise,ILOandIHIshould be set to1andN, respectively. IfN > 0, then1 <= ILO <= IHI <= N. IfN = 0, thenILO = 1andIHI = 0. boundary conditions are literally the blueprint ๐ฆHโH is COMPLEX*16 array, dimension (LDH,N). On entry, the upper Hessenberg matrixH. On exit, ifINFO = 0andWANTTis.TRUE., thenHcontains the upper triangular matrixTfrom the Schur decomposition (the Schur form). IfINFO = 0andWANTis.FALSE., then the contents ofHare unspecified on exit. (The output value ofHwhenINFO > 0is given under the description ofINFObelow.) This subroutine may explicitly setH(i,j) = 0fori > jandj = 1, 2, ... ILO-1orj = IHI+1, IHI+2, ... N. ๐LDHโLDH is INTEGER. The leading dimension of the arrayH.LDH >= max(1,N). ๐WโW is COMPLEX*16 array, dimension (N). The computed eigenvalues ofH(ILO:IHI,ILO:IHI)are stored inW(ILO:IHI). IfWANTTis.TRUE., then the eigenvalues are stored in the same order as on the diagonal of the Schur form returned inH, withW(i) = H(i,i). ๐ธILOZโILOZ is INTEGER. โจIHIZโIHIZ is INTEGER. Specify the rows ofZto which transformations must be applied ifWANTZis.TRUE..1 <= ILOZ <= ILO; IHI <= IHIZ <= N. ๐ซถZโZ is COMPLEX*16 array, dimension (LDZ,IHI). IfWANTZis.FALSE., thenZis not referenced. IfWANTZis.TRUE., thenZ(ILO:IHI,ILOZ:IHIZ)is replaced byZ(ILO:IHI,ILOZ:IHIZ)*UwhereUis the orthogonal Schur factor ofH(ILO:IHI,ILO:IHI). (The output value ofZwhenINFO > 0is given under the description ofINFObelow.) ๐LDZโLDZ is INTEGER. The leading dimension of the arrayZ. ifWANTZis.TRUE.thenLDZ >= MAX(1,IHIZ). Otherwise,LDZ >= 1. again: respect the leading dimension, bestie ๐WORKโWORK is COMPLEX*16 array, dimension LWORK. On exit, ifLWORK = -1,WORK(1)returns an estimate of the optimal value forLWORK. โญLWORKโLWORK is INTEGER. The dimension of the arrayWORK.LWORK >= max(1,N)is sufficient, butLWORKtypically as large as6*Nmay be required for optimal performance. A workspace query to determine the optimal workspace size is recommended. IfLWORK = -1, thenZLAQR0does a workspace query. In this case,ZLAQR0checks the input parameters and estimates the optimal workspace size for the given values ofN,ILOandIHI. The estimate is returned inWORK(1). No error message related toLWORKis issued byXERBLA. NeitherHnorZare 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โ ifINFO = i, thenZLAQR0failed to compute all of the eigenvalues. The elements1:ilo-1andi+1:nofWRandWIcontain those eigenvalues which have been successfully computed. (Failures are rare.) ๐ซถ
IfINFO > 0andWANTis.FALSE., then on exit, the remaining unconverged eigenvalues are the eigenvalues of the upper Hessenberg matrix rows and columnsILOthroughINFOof the final, output value ofH.
IfINFO > 0andWANTTis.TRUE., then on exit
(*) (initial value of H)*U = U*(final value of H)
whereUis a unitary matrix. The final value ofHis upper Hessenberg and triangular in rows and columnsINFO+1throughIHI.
IfINFO > 0andWANTZis.TRUE., then on exit
(final value of Z(ILO:IHI,ILOZ:IHIZ)
= (initial value of Z(ILO:IHI,ILOZ:IHIZ)*U
whereUis the unitary matrix in(*)(regardless of the value ofWANTT.)
IfINFO > 0andWANTZis.FALSE., thenZis 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
- arch rolling: lapack-doc 3.12.1-2 ยท custom
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms