laqz0(3)
π laqz0(3) π β your fave step in ggev3 / gges3 π
okay so welcome to the Library Functions Manual entry for laqz0(3), bestie. This is where we meet the recursive subroutine crew: claqz0, dlaqz0, slaqz0, and zlaqz0. They all handle the laqz0 step inside ggev3 and gges3, and they are all very much doing the work. β¨
π NAME π
laqz0 β laqz0: step in ggev3, gges3.
β¨ SYNOPSIS β¨
π«Ά Functions π«Ά
claqz0 β CLAQZ0
recursive subroutine claqz0 (wants, wantq, wantz, n, ilo, ihi, a, lda,
b, ldb, alpha, beta, q, ldq, z, ldz, work, lwork, rwork, rec, info)
dlaqz0 β DLAQZ0
recursive subroutine dlaqz0 (wants, wantq, wantz, n, ilo, ihi, a, lda,
b, ldb, alphar, alphai, beta, q, ldq, z, ldz, work, lwork, rec,
info)
slaqz0 β SLAQZ0
recursive subroutine slaqz0 (wants, wantq, wantz, n, ilo, ihi, a, lda,
b, ldb, alphar, alphai, beta, q, ldq, z, ldz, work, lwork, rec,
info)
zlaqz0 β ZLAQZ0
recursive subroutine zlaqz0 (wants, wantq, wantz, n, ilo, ihi, a, lda,
b, ldb, alpha, beta, q, ldq, z, ldz, work, lwork, rwork, rec, info)
π¦ Detailed Description π¦
No extra prose here, bestieβthe real tea is in Function Documentation below. π΅
π Function Documentation π
πΈ recursive subroutine claqz0 πΈ
recursive subroutine claqz0 (character, intent(in) wants, character,
intent(in) wantq, character, intent(in) wantz, integer, intent(in) n,
integer, intent(in) ilo, integer, intent(in) ihi, complex, dimension(
lda, * ), intent(inout) a, integer, intent(in) lda, complex, dimension(
ldb, * ), intent(inout) b, integer, intent(in) ldb, complex, dimension(
* ), intent(inout) alpha, complex, dimension( * ), intent(inout) beta,
complex, dimension( ldq, * ), intent(inout) q, integer, intent(in) ldq,
complex, dimension( ldz, * ), intent(inout) z, integer, intent(in) ldz,
complex, dimension( * ), intent(inout) work, integer, intent(in) lwork,
real, dimension( * ), intent(out) rwork, integer, intent(in) rec,
integer, intent(out) info)
CLAQZ0
π― Purpose π―
CLAQZ0 computes the eigenvalues of a matrix pair (H,T), where H is an upper Hessenberg matrix and T is upper triangular, using the double-shift QZ method. Matrix pairs of this type are produced by the reduction to generalized upper Hessenberg form of a matrix pair (A,B):
A = Q1*H*Z1**H, B = Q1*T*Z1**H,
as computed by CGGHRD.
If JOB='S', then the Hessenberg-triangular pair (H,T) is also reduced to generalized Schur form,
H = Q*S*Z**H, T = Q*P*Z**H,
where Q and Z are unitary matrices, P and S are an upper triangular matrices.
Optionally, the unitary matrix Q from the generalized Schur factorization may be postmultiplied into an input matrix Q1, and the unitary matrix Z may be postmultiplied into an input matrix Z1. If Q1 and Z1 are the unitary matrices from CGGHRD that reduced the matrix pair (A,B) to generalized upper Hessenberg form, then the output matrices Q1*Q and Z1*Z are the unitary factors from the generalized Schur factorization of (A,B):
A = (Q1*Q)*S*(Z1*Z)**H, B = (Q1*Q)*P*(Z1*Z)**H.
To avoid overflow, eigenvalues of the matrix pair (H,T) (equivalently, of (A,B)) are computed as a pair of values (alpha,beta), where alpha is complex and beta real. If beta is nonzero, lambda = alpha / beta is an eigenvalue of the generalized nonsymmetric eigenvalue problem (GNEP)
A*x = lambda*B*x
and if alpha is nonzero, mu = beta / alpha is an eigenvalue of the alternate form of the GNEP
mu*A*y = B*y.
Eigenvalues can be read directly from the generalized Schur form:
alpha = S(i,i), beta = P(i,i).
Ref: C.B. Moler & G.W. Stewart, , SIAM J. Numer. Anal., 10(1973), pp. 241--256.
Ref: B. Kagstrom, D. Kressner, , SIAM J. Numer. Anal., 29(2006), pp. 199--227.
Ref: T. Steel, D. Camps, K. Meerbergen, R. Vandebril
π§ Parameters π§
WANTSβWANTSisCHARACTER*1.= 'E'β Compute eigenvalues only;= 'S'β Compute eigenvalues and the Schur form.
WANTQβWANTQisCHARACTER*1.= 'N'β Left Schur vectors (Q) are not computed;= 'I'βQis initialized to the unit matrix and the matrixQof left Schur vectors of(A,B)is returned;= 'V'βQmust contain an unitary matrixQ1on entry and the productQ1*Qis returned.
WANTZβWANTZisCHARACTER*1.= 'N'β Right Schur vectors (Z) are not computed;= 'I'βZis initialized to the unit matrix and the matrixZof right Schur vectors of(A,B)is returned;= 'V'βZmust contain an unitary matrixZ1on entry and the productZ1*Zis returned.
NβNisINTEGER. The order of the matricesA,B,Q, andZ.N >= 0.ILOβILOisINTEGER.IHIβIHIisINTEGER.ILOandIHImark the rows and columns ofAwhich are in Hessenberg form. It is assumed thatAis already upper triangular in rows and columns1:ILO-1andIHI+1:N. IfN > 0,1 <= ILO <= IHI <= N; ifN = 0,ILO=1andIHI=0.AβAisCOMPLEXarray, dimension(LDA, N). On entry, theN-by-Nupper Hessenberg matrixA. On exit, ifJOB = 'S',Acontains the upper triangular matrixSfrom the generalized Schur factorization. IfJOB = 'E', the diagonal ofAmatches that ofS, but the rest ofAis unspecified.LDAβLDAisINTEGER. The leading dimension of the arrayA.LDA >= max( 1, N ).BβBisCOMPLEXarray, dimension(LDB, N). On entry, theN-by-Nupper triangular matrixB. On exit, ifJOB = 'S',Bcontains the upper triangular matrixPfrom the generalized Schur factorization. IfJOB = 'E', the diagonal ofBmatches that ofP, but the rest ofBis unspecified.LDBβLDBisINTEGER. The leading dimension of the arrayB.LDB >= max( 1, N ).ALPHAβALPHAisCOMPLEXarray, dimension(N). Each scalaralphadefining an eigenvalue of GNEP.BETAβBETAisCOMPLEXarray, dimension(N). The scalarsbetathat define the eigenvalues of GNEP. Together, the quantitiesalpha = ALPHA(j)andbeta = BETA(j)represent thej-th eigenvalue of the matrix pair(A,B), in one of the formslambda = alpha/betaormu = beta/alpha.
π¨ No cap: since eitherlambdaormumay overflow, they should not, in general, be computed.
QβQisCOMPLEXarray, dimension(LDQ, N). On entry, ifCOMPQ = 'V', the unitary matrixQ1used in the reduction of(A,B)to generalized Hessenberg form. On exit, ifCOMPQ = 'I', the unitary matrix of left Schur vectors of(A,B), and ifCOMPQ = 'V', the unitary matrix of left Schur vectors of(A,B). Not referenced ifCOMPQ = 'N'.LDQβLDQisINTEGER. The leading dimension of the arrayQ.LDQ >= 1. IfCOMPQ='V'or'I', thenLDQ >= N.ZβZisCOMPLEXarray, dimension(LDZ, N). On entry, ifCOMPZ = 'V', the unitary matrixZ1used in the reduction of(A,B)to generalized Hessenberg form. On exit, ifCOMPZ = 'I', the unitary matrix of right Schur vectors of(H,T), and ifCOMPZ = 'V', the unitary matrix of right Schur vectors of(A,B). Not referenced ifCOMPZ = 'N'.LDZβLDZisINTEGER. The leading dimension of the arrayZ.LDZ >= 1. IfCOMPZ='V'or'I', thenLDZ >= N.WORKβWORKisCOMPLEXarray, dimension(MAX(1,LWORK)). On exit, ifINFO >= 0,WORK(1)returns the optimalLWORK.LWORKβLWORKisINTEGER. The dimension of the arrayWORK.LWORK >= max(1,N).
If LWORK = -1, then a workspace query is assumed; the routine only calculates the optimal size of the WORK array, returns this value as the first entry of the WORK array, and no error message related to LWORK is issued by XERBLA.
RWORKβRWORKisREALarray, dimension(N).RECβRECisINTEGER.RECindicates the current recursion level. Should be set to0on first call.INFOβINFOisINTEGER.= 0: successful exit< 0: ifINFO = -i, thei-th argument had an illegal value= 1,...,N: the QZ iteration did not converge.(A,B)is not in Schur form, butALPHA(i)andBETA(i),i=INFO+1,...,Nshould be correct.
π Author π
Thijs Steel, KU Leuven
πΈ Date πΈ
May 2020
Definition at line 280 of file claqz0.f.
π₯ recursive subroutine dlaqz0 π₯
recursive subroutine dlaqz0 (character, intent(in) wants, character,
intent(in) wantq, character, intent(in) wantz, integer, intent(in) n,
integer, intent(in) ilo, integer, intent(in) ihi, double precision,
dimension( lda, * ), intent(inout) a, integer, intent(in) lda, double
precision, dimension( ldb, * ), intent(inout) b, integer, intent(in)
ldb, double precision, dimension( * ), intent(inout) alphar, double
precision, dimension( * ), intent(inout) alphai, double precision,
dimension( * ), intent(inout) beta, double precision, dimension( ldq, *
), intent(inout) q, integer, intent(in) ldq, double precision,
dimension( ldz, * ), intent(inout) z, integer, intent(in) ldz, double
precision, dimension( * ), intent(inout) work, integer, intent(in)
lwork, integer, intent(in) rec, integer, intent(out) info)
DLAQZ0
π― Purpose π―
so like, continuation time β we're picking up right where the math left off, no recap, let's go π
DLAQZ0 computes the eigenvalues of a real matrix pair (H,T), where H is an upper Hessenberg matrix and T is upper triangular, using the double-shift QZ method. Matrix pairs of this type are produced by the reduction to generalized upper Hessenberg form of a real matrix pair (A,B):
A = Q1*H*Z1**T, B = Q1*T*Z1**T,
as computed by DGGHRD.
If JOB='S', then the Hessenberg-triangular pair (H,T) is also reduced to generalized Schur form,
H = Q*S*Z**T, T = Q*P*Z**T,
where Q and Z are orthogonal matrices, P is an upper triangular matrix, and S is a quasi-triangular matrix with 1-by-1 and 2-by-2 diagonal blocks. quasi-triangular bestie, it's a whole vibe β¨
The 1-by-1 blocks correspond to real eigenvalues of the matrix pair (H,T) and the 2-by-2 blocks correspond to complex conjugate pairs of eigenvalues. conjugates stay together, that's the rule π«Ά
Additionally, the 2-by-2 upper triangular diagonal blocks of P corresponding to 2-by-2 blocks of S are reduced to positive diagonal form, i.e., if S(j+1,j) is non-zero, then P(j+1,j) = P(j,j+1) = 0, P(j,j) > 0, and P(j+1,j+1) > 0. off-diagonals GONE, diagonals POSITIVE, we love a clean glow-up π
Optionally, the orthogonal matrix Q from the generalized Schur factorization may be postmultiplied into an input matrix Q1, and the orthogonal matrix Z may be postmultiplied into an input matrix Z1. If Q1 and Z1 are the orthogonal matrices from DGGHRD that reduced the matrix pair (A,B) to generalized upper Hessenberg form, then the output matrices Q1*Q and Z1*Z are the orthogonal factors from the generalized Schur factorization of (A,B):
A = (Q1*Q)*S*(Z1*Z)**T, B = (Q1*Q)*P*(Z1*Z)**T.
To avoid overflow, eigenvalues of the matrix pair (H,T) (equivalently, of (A,B)) are computed as a pair of values (alpha,beta), where alpha is complex and beta real.
ok this part is lowkey the most important thing on the page: ifbetais nonzero,lambda = alpha / betais an eigenvalue of the generalized nonsymmetric eigenvalue problem (GNEP)A*x = lambda*B*x, and ifalphais nonzero,mu = beta / alphais an eigenvalue of the alternate form of the GNEPmu*A*y = B*y. neitherlambdanormushould be computed in general β either one may overflow. that's not me being dramatic, that's the actual warning π
Real eigenvalues can be read directly from the generalized Schur form:
alpha = S(i,i), beta = P(i,i).
Ref: C.B. Moler & G.W. Stewart, , SIAM J. Numer. Anal., 10(1973), pp. 241--256.
Ref: B. Kagstrom, D. Kressner, , SIAM J. Numer. Anal., 29(2006), pp. 199--227.
Ref: T. Steel, D. Camps, K. Meerbergen, R. Vandebril
πΈ Parameters πΈ
bestie. there are SO many parameters. buckle up, we're going through every single one, no skipping π
β¨ WANTS β¨
WANTS is CHARACTER*1
= 'E': Compute eigenvalues only;= 'S': Compute eigenvalues and the Schur form.
β¨ WANTQ β¨
WANTQ is CHARACTER*1
= 'N': Left Schur vectors (Q) are not computed;= 'I':Qis initialized to the unit matrix and the matrixQof left Schur vectors of(A,B)is returned;= 'V':Qmust contain an orthogonal matrixQ1on entry and the productQ1*Qis returned.
β¨ WANTZ β¨
WANTZ is CHARACTER*1
= 'N': Right Schur vectors (Z) are not computed;= 'I':Zis initialized to the unit matrix and the matrixZof right Schur vectors of(A,B)is returned;= 'V':Zmust contain an orthogonal matrixZ1on entry and the productZ1*Zis returned.
β¨ N β¨
N is INTEGER
The order of the matrices A, B, Q, and Z. N >= 0. (zero is legal, zero is fine, zero is a valid lifestyle π
)
β¨ ILO β¨
ILO is INTEGER
no extra notes here, it's just ILO β its whole personality is defined by IHI right below π
β¨ IHI β¨
IHI is INTEGER
ILO and IHI mark the rows and columns of A which are in Hessenberg form. It is assumed that A is already upper triangular in rows and columns 1:ILO-1 and IHI+1:N. If N > 0, 1 <= ILO <= IHI <= N; if N = 0, ILO=1 and IHI=0.
fr fr check those bounds before you call this, the library is not gonna hold your hand π«Ά
β¨ A β¨
A is DOUBLE PRECISION array, dimension (LDA, N)
On entry, the N-by-N upper Hessenberg matrix A.
On exit, if JOB = 'S', A contains the upper quasi-triangular matrix S from the generalized Schur factorization. If JOB = 'E', the diagonal blocks of A match those of S, but the rest of A is unspecified. (unspecified = do not go looking, it's giving chaos in there π)
β¨ LDA β¨
LDA is INTEGER
The leading dimension of the array A. LDA >= max( 1, N ).
β¨ B β¨
B is DOUBLE PRECISION array, dimension (LDB, N)
On entry, the N-by-N upper triangular matrix B.
On exit, if JOB = 'S', B contains the upper triangular matrix P from the generalized Schur factorization; 2-by-2 diagonal blocks of P corresponding to 2-by-2 blocks of S are reduced to positive diagonal form, i.e., if A(j+1,j) is non-zero, then B(j+1,j) = B(j,j+1) = 0, B(j,j) > 0, and B(j+1,j+1) > 0. If JOB = 'E', the diagonal blocks of B match those of P, but the rest of B is unspecified.
β¨ LDB β¨
LDB is INTEGER
The leading dimension of the array B. LDB >= max( 1, N ).
β¨ ALPHAR β¨
ALPHAR is DOUBLE PRECISION array, dimension (N)
The real parts of each scalar alpha defining an eigenvalue of GNEP. the R stands for Real, we stan a descriptive suffix π
β¨ ALPHAI β¨
ALPHAI is DOUBLE PRECISION array, dimension (N)
The imaginary parts of each scalar alpha defining an eigenvalue of GNEP.
If ALPHAI(j) is zero, then the j-th eigenvalue is real; if positive, then the j-th and (j+1)-st eigenvalues are a complex conjugate pair, with ALPHAI(j+1) = -ALPHAI(j).
notice there's no negative case listed bestie β positive or zero, and the conjugate is stored right after with the flipped sign. that's the whole system π¦
β¨ BETA β¨
BETA is DOUBLE PRECISION array, dimension (N)
The scalars beta that define the eigenvalues of GNEP. Together, the quantities alpha = (ALPHAR(j),ALPHAI(j)) and beta = BETA(j) represent the j-th eigenvalue of the matrix pair (A,B), in one of the forms lambda = alpha/beta or mu = beta/alpha. Since either lambda or mu may overflow, they should not, in general, be computed.
yes I'm saying it again because it's that serious: do not just divide. overflow is real and it will humble you π
β¨ Q β¨
Q is DOUBLE PRECISION array, dimension (LDQ, N)
On entry, if COMPQ = 'V', the orthogonal matrix Q1 used in the reduction of (A,B) to generalized Hessenberg form.
On exit, if COMPQ = 'I', the orthogonal matrix of left Schur vectors of (A,B), and if COMPQ = 'V', the orthogonal matrix of left Schur vectors of (A,B).
Not referenced if COMPQ = 'N'. (and yes, that's COMPQ with an M even though the argument is named WANTQ β I'm just reading the page to you, bestie, I don't make the rules π)
β¨ LDQ β¨
LDQ is INTEGER
The leading dimension of the array Q. LDQ >= 1. If COMPQ='V' or 'I', then LDQ >= N.
β¨ Z β¨
Z is DOUBLE PRECISION array, dimension (LDZ, N)
On entry, if COMPZ = 'V', the orthogonal matrix Z1 used in the reduction of (A,B) to generalized Hessenberg form.
On exit, if COMPZ = 'I', the orthogonal matrix of right Schur vectors of (H,T), and if COMPZ = 'V', the orthogonal matrix of right Schur vectors of (A,B).
Not referenced if COMPZ = 'N'.
β¨ LDZ β¨
LDZ is INTEGER
The leading dimension of the array Z. LDZ >= 1. If COMPZ='V' or 'I', then LDZ >= N.
β¨ WORK β¨
WORK is DOUBLE PRECISION array, dimension (MAX(1,LWORK))
On exit, if INFO >= 0, WORK(1) returns the optimal LWORK. it's the little info slot that tells you how much room you actually needed π
β¨ LWORK β¨
LWORK is INTEGER
The dimension of the array WORK. LWORK >= max(1,N).
If LWORK = -1, then a workspace query is assumed; the routine only calculates the optimal size of the WORK array, returns this value as the first entry of the WORK array, and no error message related to LWORK is issued by XERBLA.
-1 is the "just tell me the size, don't compute anything" mode. iconic honestly π§
β¨ REC β¨
REC is INTEGER
REC indicates the current recursion level. Should be set to 0 on first call.
literally set it to 0 on your first call. that's not optional, that's the contract π«Ά
β¨ INFO β¨
INFO is INTEGER
= 0: successful exit< 0: ifINFO = -i, thei-th argument had an illegal value= 1,...,N: the QZ iteration did not converge.(A,B)is not in Schur form, butALPHAR(i),ALPHAI(i), andBETA(i),i=INFO+1,...,Nshould be correct.
read that third case carefully bestie β it did not converge, the pair is not in Schur form, but the entries fromINFO+1toNare still correct. partial credit exists in LAPACK π
β¨ Author β¨
Thijs Steel, KU Leuven we love a credited author π
π Date π
May 2020
π Definition π
Definition at line 302 of file dlaqz0.f.
π¦ the single precision twin has entered the chat π¦
okay and then the page pivots to the SLAQZ0 variant, same energy, single precision:
recursive subroutine slaqz0 (character, intent(in) wants, character,
intent(in) wantq, character, intent(in) wantz, integer, intent(in) n,
integer, intent(in) ilo, integer, intent(in) ihi, real, dimension( lda,
* ), intent(inout) a, integer, intent(in) lda, real, dimension( ldb, *
), intent(inout) b, integer, intent(in) ldb, real, dimension( * ),
intent(inout) alphar, real, dimension( * ), intent(inout) alphai, real,
dimension( * ), intent(inout) beta, real, dimension( ldq, * ),
intent(inout) q, integer, intent(in) ldq, real, dimension( ldz, * ),
intent(inout) z, integer, intent(in) ldz, real, dimension( * ),
intent(inout) work, integer, intent(in) lwork, integer, intent(in) rec,
integer, intent(out) info)
SLAQZ0
Purpose:
β¦and that's exactly where we're gonna pick it up next, don't go anywhere π
okay so SLAQZ0 is literally the routine that computes the eigenvalues of a real matrix pair (H,T), where H is an upper Hessenberg matrix and T is upper triangular, using the double-shift QZ method π
.
Matrix pairs of this type are produced by the reduction to generalized upper Hessenberg form of a real matrix pair (A,B):
A = Q1*H*Z1**T, B = Q1*T*Z1**T,
as computed by SGGHRD β¨.
If JOB='S', then the Hessenberg-triangular pair (H,T) is also reduced to generalized Schur form,
H = Q*S*Z**T, T = Q*P*Z**T,
where Q and Z are orthogonal matrices, P is an upper triangular matrix, and S is a quasi-triangular matrix with 1-by-1 and 2-by-2 diagonal blocks π«Ά.
The 1-by-1 blocks correspond to real eigenvalues of the matrix pair (H,T) and the 2-by-2 blocks correspond to complex conjugate pairs of eigenvalues π iconic.
Additionally, the 2-by-2 upper triangular diagonal blocks of P corresponding to 2-by-2 blocks of S are reduced to positive diagonal form, i.e., if S(j+1,j) is non-zero, then P(j+1,j) = P(j,j+1) = 0, P(j,j) > 0, and P(j+1,j+1) > 0 π.
Optionally, the orthogonal matrix Q from the generalized Schur factorization may be postmultiplied into an input matrix Q1, and the orthogonal matrix Z may be postmultiplied into an input matrix Z1 π«Ά. If Q1 and Z1 are the orthogonal matrices from SGGHRD that reduced the matrix pair (A,B) to generalized upper Hessenberg form, then the output matrices Q1*Q and Z1*Z are the orthogonal factors from the generalized Schur factorization of (A,B):
A = (Q1*Q)*S*(Z1*Z)**T, B = (Q1*Q)*P*(Z1*Z)**T.
To avoid overflow, eigenvalues of the matrix pair (H,T) (equivalently, of (A,B)) are computed as a pair of values (alpha,beta), where alpha is complex and beta real π₯. If beta is nonzero, lambda = alpha / beta is an eigenvalue of the generalized nonsymmetric eigenvalue problem (GNEP)
A*x = lambda*B*x
and if alpha is nonzero, mu = beta / alpha is an eigenvalue of the alternate form of the GNEP
mu*A*y = B*y.
Real eigenvalues can be read directly from the generalized Schur form: alpha = S(i,i), beta = P(i,i) β.
- Ref: C.B. Moler & G.W. Stewart, , SIAM J. Numer. Anal., 10(1973), pp. 241--256.
- Ref: B. Kagstrom, D. Kressner, , SIAM J. Numer. Anal., 29(2006), pp. 199--227.
- Ref: T. Steel, D. Camps, K. Meerbergen, R. Vandebril
β¨ Parameters β¨
WANTSβWANTS is CHARACTER*1'E': Compute eigenvalues only;'S': Compute eigenvalues and the Schur form.
WANTQβWANTQ is CHARACTER*1'N': Left Schur vectors (Q) are not computed;'I': Q is initialized to the unit matrix and the matrix Q of left Schur vectors of (A,B) is returned;'V': Q must contain an orthogonal matrix Q1 on entry and the product Q1*Q is returned.
WANTZβWANTZ is CHARACTER*1'N': Right Schur vectors (Z) are not computed;'I': Z is initialized to the unit matrix and the matrix Z of right Schur vectors of (A,B) is returned;'V': Z must contain an orthogonal matrix Z1 on entry and the product Z1*Z is returned.
NβN is INTEGER- The order of the matrices
A,B,Q, andZ.N >= 0.
- The order of the matrices
ILOβILO is INTEGERπIHIβIHI is INTEGERILOandIHImark the rows and columns ofAwhich are in Hessenberg form. It is assumed thatAis already upper triangular in rows and columns1:ILO-1andIHI+1:N. IfN > 0,1 <= ILO <= IHI <= N; ifN = 0,ILO=1andIHI=0.
AβA is REAL array, dimension (LDA, N)- On entry, the N-by-N upper Hessenberg matrix
A. - On exit, if
JOB = 'S',Acontains the upper quasi-triangular matrixSfrom the generalized Schur factorization. - If
JOB = 'E', the diagonal blocks ofAmatch those ofS, but the rest ofAis unspecified.
- On entry, the N-by-N upper Hessenberg matrix
LDAβLDA is INTEGER- The leading dimension of the array
A.LDA >= max( 1, N ).
- The leading dimension of the array
BβB is REAL array, dimension (LDB, N)- On entry, the N-by-N upper triangular matrix
B. - On exit, if
JOB = 'S',Bcontains the upper triangular matrixPfrom the generalized Schur factorization; 2-by-2 diagonal blocks ofPcorresponding to 2-by-2 blocks ofSare reduced to positive diagonal form, i.e., ifA(j+1,j)is non-zero, thenB(j+1,j) = B(j,j+1) = 0,B(j,j) > 0, andB(j+1,j+1) > 0. - If
JOB = 'E', the diagonal blocks ofBmatch those ofP, but the rest ofBis unspecified.
- On entry, the N-by-N upper triangular matrix
LDBβLDB is INTEGER- The leading dimension of the array
B.LDB >= max( 1, N ).
- The leading dimension of the array
ALPHARβALPHAR is REAL array, dimension (N)- The real parts of each scalar
alphadefining an eigenvalue of GNEP.
- The real parts of each scalar
ALPHAIβALPHAI is REAL array, dimension (N)- The imaginary parts of each scalar
alphadefining an eigenvalue of GNEP. - If
ALPHAI(j)is zero, then the j-th eigenvalue is real; if positive, then the j-th and (j+1)-st eigenvalues are a complex conjugate pair, withALPHAI(j+1) = -ALPHAI(j).
- The imaginary parts of each scalar
BETAβBETA is REAL array, dimension (N)- The scalars
betathat define the eigenvalues of GNEP. - Together, the quantities
alpha = (ALPHAR(j),ALPHAI(j))andbeta = BETA(j)represent the j-th eigenvalue of the matrix pair(A,B), in one of the formslambda = alpha/betaormu = beta/alpha. Since eitherlambdaormumay overflow, they should not, in general, be computed.
- The scalars
QβQ is REAL array, dimension (LDQ, N)- On entry, if
COMPQ = 'V', the orthogonal matrixQ1used in the reduction of(A,B)to generalized Hessenberg form. - On exit, if
COMPQ = 'I', the orthogonal matrix of left Schur vectors of(A,B), and ifCOMPQ = 'V', the orthogonal matrix of left Schur vectors of(A,B). - Not referenced if
COMPQ = 'N'.
- On entry, if
LDQβLDQ is INTEGER- The leading dimension of the array
Q.LDQ >= 1. - If
COMPQ='V'or'I', thenLDQ >= N.
- The leading dimension of the array
ZβZ is REAL array, dimension (LDZ, N)- On entry, if
COMPZ = 'V', the orthogonal matrixZ1used in the reduction of(A,B)to generalized Hessenberg form. - On exit, if
COMPZ = 'I', the orthogonal matrix of right Schur vectors of(H,T), and ifCOMPZ = 'V', the orthogonal matrix of right Schur vectors of(A,B). - Not referenced if
COMPZ = 'N'.
- On entry, if
LDZβLDZ is INTEGER- The leading dimension of the array
Z.LDZ >= 1. - If
COMPZ='V'or'I', thenLDZ >= N.
- The leading dimension of the array
WORKβWORK is REAL array, dimension (MAX(1,LWORK))- On exit, if
INFO >= 0,WORK(1)returns the optimalLWORK.
- On exit, if
LWORKβLWORK is INTEGER- The dimension of the array
WORK.LWORK >= max(1,N). - If
LWORK = -1, then a workspace query is assumed; the routine only calculates the optimal size of theWORKarray, returns this value as the first entry of theWORKarray, and no error message related toLWORKis issued byXERBLA.
- The dimension of the array
RECβREC is INTEGERRECindicates the current recursion level. Should be set to0on first call.
INFOβINFO is INTEGER= 0: successful exit< 0: ifINFO = -i, the i-th argument had an illegal value= 1,...,N: the QZ iteration did not converge.(A,B)is not in Schur form, butALPHAR(i),ALPHAI(i), andBETA(i),i=INFO+1,...,Nshould be correct.
β¨ Author β¨
Thijs Steel, KU Leuven
β¨ Date β¨
May 2020
β¨ Definition β¨
at line 300 of file slaqz0.f.
recursive subroutine zlaqz0 (character, intent(in) wants, character,
intent(in) wantq, character, intent(in) wantz, integer, intent(in) n,
integer, intent(in) ilo, integer, intent(in) ihi, complex*16, dimension(
lda, * ), intent(inout) a, integer, intent(in) lda, complex*16,
dimension( ldb, * ), intent(inout) b, integer, intent(in) ldb,
complex*16, dimension( * ), intent(inout) alpha, complex*16, dimension(
* ), intent(inout) beta, complex*16, dimension( ldq, * ),
intent(inout) q, integer, intent(in) ldq, complex*16, dimension( ldz, *
), intent(inout) z, integer, intent(in) ldz, complex*16, dimension( * ),
intent(inout) work, integer, intent(in) lwork, double precision,
dimension( * ), intent(out) rwork, integer, intent(in) rec, integer,
intent(out) info)
ZLAQZ0
Purpose:
β¨ Parameters β¨
Okay bestie, here's the tea on every single argument this routine takes. Don't skip any, fr fr. π
WANTS
WANTS is CHARACTER*1. It's literally you telling the routine what you want:
'E'β Compute eigenvalues only.'S'β Compute eigenvalues and the Schur form.
Slay. β¨
WANTQ
WANTQ is CHARACTER*1. This one controls the left Schur vectors (Q):
'N'β Left Schur vectors (Q) are not computed.'I'βQis initialized to the unit matrix and the matrixQof left Schur vectors of(A,B)is returned.'V'βQmust contain an unitary matrixQ1on entry and the productQ1*Qis returned.
WANTZ
WANTZ is CHARACTER*1. Same energy but for the right Schur vectors (Z):
'N'β Right Schur vectors (Z) are not computed.'I'βZis initialized to the unit matrix and the matrixZof right Schur vectors of(A,B)is returned.'V'βZmust contain an unitary matrixZ1on entry and the productZ1*Zis returned.
N
N is INTEGER. The order of the matrices A, B, Q, and Z. N >= 0.
ILO
ILO is INTEGER.
IHI
IHI is INTEGER. ILO and IHI mark the rows and columns of A which are in Hessenberg form. It is assumed that A is already upper triangular in rows and columns 1:ILO-1 and IHI+1:N. If N > 0, 1 <= ILO <= IHI <= N; if N = 0, ILO=1 and IHI=0.
A
A is COMPLEX*16 array, dimension (LDA, N). On entry, the N-by-N upper Hessenberg matrix A. On exit, if JOB = 'S', A contains the upper triangular matrix S from the generalized Schur factorization. If JOB = 'E', the diagonal blocks of A match those of S, but the rest of A is unspecified.
LDA
LDA is INTEGER. The leading dimension of the array A. LDA >= max( 1, N ).
B
B is COMPLEX*16 array, dimension (LDB, N). On entry, the N-by-N upper triangular matrix B. On exit, if JOB = 'S', B contains the upper triangular matrix P from the generalized Schur factorization; If JOB = 'E', the diagonal blocks of B match those of P, but the rest of B is unspecified.
LDB
LDB is INTEGER. The leading dimension of the array B. LDB >= max( 1, N ).
ALPHA
ALPHA is COMPLEX*16 array, dimension (N). Each scalar alpha defining an eigenvalue of GNEP.
BETA
BETA is COMPLEX*16 array, dimension (N). The scalars beta that define the eigenvalues of GNEP. Together, the quantities alpha = ALPHA(j) and beta = BETA(j) represent the j-th eigenvalue of the matrix pair (A,B), in one of the forms lambda = alpha/beta or mu = beta/alpha. Since either lambda or mu may overflow, they should not, in general, be computed.
Q
Q is COMPLEX*16 array, dimension (LDQ, N). On entry, if COMPQ = 'V', the unitary matrix Q1 used in the reduction of (A,B) to generalized Hessenberg form. On exit, if COMPQ = 'I', the unitary matrix of left Schur vectors of (A,B), and if COMPQ = 'V', the unitary matrix of left Schur vectors of (A,B). Not referenced if COMPQ = 'N'.
LDQ
LDQ is INTEGER. The leading dimension of the array Q. LDQ >= 1. If COMPQ='V' or 'I', then LDQ >= N.
Z
Z is COMPLEX*16 array, dimension (LDZ, N). On entry, if COMPZ = 'V', the unitary matrix Z1 used in the reduction of (A,B) to generalized Hessenberg form. On exit, if COMPZ = 'I', the unitary matrix of right Schur vectors of (H,T), and if COMPZ = 'V', the unitary matrix of right Schur vectors of (A,B). Not referenced if COMPZ = 'N'.
LDZ
LDZ is INTEGER. The leading dimension of the array Z. LDZ >= 1. If COMPZ='V' or 'I', then LDZ >= N.
WORK
WORK is COMPLEX*16 array, dimension (MAX(1,LWORK)). On exit, if INFO >= 0, WORK(1) returns the optimal LWORK.
RWORK
RWORK is DOUBLE PRECISION array, dimension (N).
LWORK
LWORK is INTEGER. The dimension of the array WORK. LWORK >= max(1,N).
IfLWORK = -1, then a workspace query is assumed; the routine only calculates the optimal size of theWORKarray, returns this value as the first entry of theWORKarray, and no error message related toLWORKis issued byXERBLA.
REC
REC is INTEGER. REC indicates the current recursion level. Should be set to 0 on first call.
INFO
INFO is INTEGER.
= 0: successful exit< 0: ifINFO = -i, thei-th argument had an illegal value= 1,...,N: the QZ iteration did not converge.(A,B)is not in Schur form, butALPHA(i)andBETA(i),i=INFO+1,...,Nshould be correct.
β¨ Author β¨
Thijs Steel, KU Leuven
β¨ Date β¨
May 2020
Definition at line 280 of file zlaqz0.f.
β¨ Author β¨
Generated automatically by Doxygen for LAPACK from the source code.
And that's the tea! This iconic page is from LAPACK version 3.12.0, dated May 2020. 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