DLAQR4(3)
π DLAQR4(3) β the LAPACK page, bestie π
Okay so this is the DLAQR4(3) page from the LAPACK manual, and itβs giving βtiny subroutine, huge brainβ energy. Letβs get into it.
β¨ NAME β¨
The NAME line is literally this source path, no cap:
/home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/SRC/dlaqr4.f
πΈ SYNOPSIS πΈ
Functions/Subroutines
subroutine DLAQR4 (wantt, wantz, n, ilo, ihi, h, ldh, wr, wi, iloz,
ihiz, z, ldz, work, lwork, info)
DLAQR4 computes the eigenvalues of a Hessenberg matrix, and optionally the matrices from the Schur decomposition.
π¦ Function/Subroutine Documentation π¦
subroutine DLAQR4 (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)
DLAQR4 computes the eigenvalues of a Hessenberg matrix, and optionally the matrices from the Schur decomposition.
π Purpose π
Real talk: DLAQR4 implements one level of recursion for DLAQR0. It is a complete implementation of the small bulge multi-shift QR algorithm. It may be called by DLAQR0 and, for large enough deflation window size, it may be called by DLAQR3. This subroutine is identical to DLAQR0 except that it calls DLAQR2 instead of DLAQR3. Slay.
DLAQR4 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. Iconic behavior.
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β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. Thatβs the whole description, bestie. Short and mysterious. π«ΆIHIβ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 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.HβH is DOUBLE PRECISION array, dimension (LDH,N).- On entry, the upper Hessenberg matrix
H. - On exit, if
INFO = 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. - If
INFO = 0andWANTTis.FALSE., then the contents ofHare unspecified on exit. Unspecified means donβt trust it, bestie. (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βLDH is INTEGER. The leading dimension of the arrayH.LDH >= max(1,N).WRβWR is DOUBLE PRECISION array, dimension (IHI).WIβWI is DOUBLE PRECISION 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).ILOZβILOZ is INTEGER. Again: short, sweet, mysterious.IHIZβIHIZ is INTEGER. Specify the rows ofZto which transformations must be applied ifWANTZis.TRUE..1 <= ILOZ <= ILO; IHI <= IHIZ <= N.ZβZ is DOUBLE PRECISION array, dimension (LDZ,IHI).- If
WANTZis.FALSE., thenZis not referenced. - If
WANTZis.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.)
- If
LDZβLDZ is INTEGER. The leading dimension of the arrayZ. IfWANTZis.TRUE.thenLDZ >= MAX(1,IHIZ). Otherwise,LDZ >= 1.WORKβWORK is DOUBLE PRECISION 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.- If
LWORK = -1, thenDLAQR4does a workspace query. In this case,DLAQR4checks 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βINFO is INTEGER.= 0: successful exit> 0: ifINFO = i,DLAQR4failed 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:
- If
(*) (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 > 0andWANTZis.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 > 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 261 of file dlaqr4.f.
π§ Author π§
Generated automatically by Doxygen for LAPACK from the source code.
Byeee bestie π This page is from LAPACK Version 3.12.0, source path /home/abui...RC/dlaqr4.f(3), and yes β generated automatically by Doxygen for LAPACK from the source code. Mwah πβ¨
π¦ where this page comes from
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms