
This function call 'ztgsend' in Fortran to reorder 'complex' matrices (S,T,Q,Z).
qz.ztgsen(S, T, Q, Z, select, ijob = 4L,
want.Q = TRUE, want.Z = TRUE, LWORK = NULL, LIWORK = NULL)
a 'complex' generalized Schur form, dim = c(N, N).
a 'complex' generalized Schur form, dim = c(N, N).
a 'complex' left Schur vectors, dim = c(N, N).
a 'complex' right Schur vectors, dim = c(N, N).
specifies the eigenvalues in the selected cluster.
specifies whether condition numbers are required for the cluster of eigenvalues (PL and PR) or the deflating subspaces (Difu and Difl).
if update Q.
if update Z.
optional, dimension of array WORK for workspace. (>= N(N+1))
optional, dimension of array IWORK for workspace. (>= max(N+2, N(N+1)/2))
Return a list contains next:
S's reorded generalized Schur form.
T's reorded generalized Schur form.
ALPHA[j]/BETA[j] are generalized eigenvalues.
ALPHA[j]/BETA[j] are generalized eigenvalues.
original returns from 'ztgsen.f'.
original returns from 'ztgsen.f'.
original returns from 'ztgsen.f'.
original returns from 'ztgsen.f'.
optimal LWORK (for ztgsen.f only)
optimal LIWORK (for ztgsen.f only)
= 0: successful. < 0: if INFO = -i, the i-th argument had an illegal value. =1: reordering of (S,T) failed.
Extra returns in the list:
the reorded left Schur vectors.
the reorded right Schur vectors.
There is no format checking for S
, T
, Q
, and Z
which are usually returned by qz.zgges
.
There is also no checking for select
which is usually according to
the returns of qz.zggev
.
See 'ztgsen.f' for all details.
ZTGSEN reorders the generalized Schur decomposition of a complex matrix pair (S,T) (in terms of an unitary equivalence transformation Q**H * (S,T) * Z), so that a selected cluster of eigenvalues appears in the leading diagonal blocks of the pair (S,T). The leading columns of Q and Z form unitary bases of the corresponding left and right eigenspaces (deflating subspaces). (S,T) must be in generalized Schur canonical form, that is, S and T are both upper triangular.
ZTGSEN also computes the generalized eigenvalues
w(j)= ALPHA(j) / BETA(j)
of the reordered matrix pair (S,T).
Note for 'ijob': =0: Only reorder w.r.t. SELECT. No extras. =1: Reciprocal of norms of "projections" onto left and right eigenspaces w.r.t. the selected cluster (PL and PR). =2: Upper bounds on Difu and Difl. F-norm-based estimate (DIF(1:2)). =3: Estimate of Difu and Difl. 1-norm-based estimate (DIF(1:2)). About 5 times as expensive as ijob = 2. =4: Compute PL, PR and DIF (i.e. 0, 1 and 2 above): Economic version to get it all. =5: Compute PL, PR and DIF (i.e. 0, 1 and 3 above).
In short, if (A,B) = Q * (S,T) * Z**H from qz.zgges
and input
(S,T,Q,Z) to qz.ztgsen
with appropriate select
option,
then it yields
(A,B) = Q_n * (S_n,T_n) * Z_n**H
where (S_n,T_n,Q_n,Z_n) is a new set of generalized Schur decomposition
of (A,B) according to the select
.
Anderson, E., et al. (1999) LAPACK User's Guide, 3rd edition, SIAM, Philadelphia.
# NOT RUN {
<!-- % \dontrun{ -->
# }
# NOT RUN {
library(QZ, quiet = TRUE)
### https://www.nag.com/numeric/fl/nagdoc_fl23/xhtml/f08/f08yuf.xml
S <- exAB3$S
T <- exAB3$T
Q <- exAB3$Q
Z <- exAB3$Z
select <- c(FALSE, TRUE, TRUE, FALSE)
ret <- qz.ztgsen(S, T, Q, Z, select)
# Verify 1
S.new <- ret$Q %*% ret$S %*% H(ret$Z)
T.new <- ret$Q %*% ret$T %*% H(ret$Z)
round(S - S.new)
round(T - T.new)
# verify 2
round(ret$Q %*% H(ret$Q))
round(ret$Z %*% H(ret$Z))
# }
# NOT RUN {
<!-- % } -->
# }
Run the code above in your browser using DataLab