ac_qz_ztgsen: Reordered QZ Decomposition for Complex Paired Matrices

qz.ztgsenR Documentation

Reordered QZ Decomposition for Complex Paired Matrices

Description

This function call 'ztgsend' in Fortran to reorder 'complex' matrices (S,T,Q,Z).

Usage

  qz.ztgsen(S, T, Q, Z, select, ijob = 4L,
            want.Q = TRUE, want.Z = TRUE, LWORK = NULL, LIWORK = NULL)

Arguments

S

a 'complex' generalized Schur form, dim = c(N, N).

T

a 'complex' generalized Schur form, dim = c(N, N).

Q

a 'complex' left Schur vectors, dim = c(N, N).

Z

a 'complex' right Schur vectors, dim = c(N, N).

select

specifies the eigenvalues in the selected cluster.

ijob

specifies whether condition numbers are required for the cluster of eigenvalues (PL and PR) or the deflating subspaces (Difu and Difl).

want.Q

if update Q.

want.Z

if update Z.

LWORK

optional, dimension of array WORK for workspace. (>= N(N+1))

LIWORK

optional, dimension of array IWORK for workspace. (>= max(N+2, N(N+1)/2))

Details

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.

Value

Return a list contains next:

'S'

S's reorded generalized Schur form.

'T'

T's reorded generalized Schur form.

'ALPHA'

ALPHA[j]/BETA[j] are generalized eigenvalues.

'BETA'

ALPHA[j]/BETA[j] are generalized eigenvalues.

'M'

original returns from 'ztgsen.f'.

'PL'

original returns from 'ztgsen.f'.

'PR'

original returns from 'ztgsen.f'.

'DIF'

original returns from 'ztgsen.f'.

'WORK'

optimal LWORK (for ztgsen.f only)

'IWORK'

optimal LIWORK (for ztgsen.f only)

'INFO'

= 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:

'Q'

the reorded left Schur vectors.

'Z'

the reorded right Schur vectors.

Warning(s)

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.

Author(s)

Wei-Chen Chen wccsnow@gmail.com

References

Anderson, E., et al. (1999) LAPACK User's Guide, 3rd edition, SIAM, Philadelphia.

https://www.netlib.org/lapack/complex16/ztgsen.f

https://en.wikipedia.org/wiki/Schur_decomposition

See Also

qz.zgges, qz.dgges, qz.dtgsen.

Examples


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))


snoweye/QZ documentation built on Sept. 12, 2023, 4:59 a.m.