Functions
Periodic Schur decompositions
PeriodicSchurDecompositions.pschur
— Functionpschur(A::Vector{S<:StridedMatrix}, lr::Symbol) -> F::PeriodicSchur
Computes a periodic Schur decomposition of a series of general square matrices with left (lr=:L
) or right (lr=:R
) product ordering.
Optional arguments wantT
and wantZ
, defaulting to true
, are booleans which may be used to save time and memory by suppressing computation of the T
and Z
matrices. See PeriodicSchur
for the resulting structure.
PeriodicSchurDecompositions.pschur!
— Functionpschur!(A::Vector{S<:StridedMatrix}, lr::Symbol=:R) -> F::PeriodicSchur
Same as pschur
but uses the input matrices A
as workspace.
pschur!(H1,Us; Q) -> PeriodicSchur
Computes a periodic Schur decomposition of a series of Hessenberg/upper-triangular matrices.
H1
must be upper Hessenberg, Us
a vector of upper triangular matrices. The argument arrays are overwritten and used in the result, a PeriodicSchur
object.
Keyword arguments: The result corresponds to the rightwards product H1*prod(Us)
unless the optional argument rev=true
is specified. Specify wantT=false
to compute eigenvalues, but not the Schur factors. Specify wantZ=false
to suppress computation of orthogonal transformation matrices. if Q
is not provided, these will be the Zⱼ
factors; if Q
is set to a vector of matrices Qⱼ
, they will be the products QⱼZⱼ
.
pschur!(A::Vector{<:StridedMatrix}, S::Vector{Bool}, lr::Symbol) -> F::GeneralizedPeriodicSchur
Computes a generalized periodic Schur decomposition of a series of general square matrices with left (lr=:L
) or right (lr=:R
) orientation.
Entries in S
must be false
for the corresponding entries in A
which are effectively inverted, and true
for the rest. Currently Sⱼ
must be true
for the leftmost term. (But see gpschur
for the common case of leftwards alternating signs.)
Optional arguments wantT
and wantZ
, defaulting to true
, are booleans which may be used to save time and memory by suppressing computation of the T
and Z
matrices. See GeneralizedPeriodicSchur
for the resulting structure. (S[j]=false
corresponds to sⱼ=-1
in the decomposition shown there.)
PeriodicSchurDecompositions.gpschur
— Functiongpschur(As, Bs) -> F::GeneralizedPeriodicSchur
Computes a generalized periodic Schur decomposition corresponding to the formal product Bₚ⁻¹Aₚ...B₁⁻¹A₁
of paired series of matrices in left operator order [A₁,...,Aₚ]
,[B₁,...,Bₚ]
.
Terms in the decomposition are actually shifted by one; this does not change the eigenvalues but requires attention when dealing with invariant subspaces.
Reordering
LinearAlgebra.ordschur!
— Methodordschur!(P::AbstractPeriodicSchur{T}, select::AbstractVector{Bool})
reorder a periodic Schur decomposition so that the eigenvalues corresponding to true
entries in select
and their associated subspace are moved to the top.
Partial periodic Schur decompositions
PeriodicSchurDecompositions.partial_pschur
— Functionpartial_pschur(As, nev, which; kwargs...) → PartialPeriodicSchur, ArnoldiMethod.History
Find a nev
-order partial periodic Schur decomposition of the product Aₚ*...*A₂*A₁
with eigenvalues near a specified region of the spectral boundary.
The elements Aⱼ
can be matrices or any linear maps that implement mul!(y, Aⱼ, x)
, eltype
and size
.
The method will run iteratively until the Schur vectors are approximated to the prescribed tolerance or until restarts
restarts have passed.
Arguments
Name | Type | Default | Description |
---|---|---|---|
nev | Int | min(6, size(A, 1)) | Number of eigenvalues |
which | Target | LM() | One of LM() , LR() , SR() , LI() , SI() , see below. |
The most important keyword arguments:
Keyword | Type | Default | Description |
---|---|---|---|
tol | Real | √eps | Tolerance for convergence: ‖AV - VT‖₂ < tol * ‖λ‖ |
maxdim | Int | max(20,2*nev) | order of working Krylov subspace |
restarts | Int | 100 | limit on restart iterations |
The target which
can be any appropriate subtype of ArnoldiMethod.Target
.
Eigenvectors
Eigenvector computations are provided for standard and partial PSDs. In future releases, they may also be available for some kinds of generalized PSDs.
Most practical applications of PSDs are too ill-conditioned for the standard back-solve approaches to computing eigenvectors, so the code in this package uses more stable subspace-reordering steps instead. This has the feature that attempting to get eigenvectors out of ill-conditioned subspaces (eigenvalues too close together) will fail instead of the usual misleading redundancy. This approach is fairly expensive, so the user should only ask for vectors which will be needed.
LinearAlgebra.eigvecs
— Methodeigvecs(ps::PeriodicSchur, select::Vector{Bool}; shifted::Bool) => V::Vector{Matrix}
computes selected right eigenvectors of a product of matrices
For the n×n
matrices Aⱼ, j ∈ 1:p
, whose periodic schur decomposition is in ps
, this function computes vectors v
such that Aₚ*...*A₂*A₁*v = λₖ v
(or A₁*A₂*...*Aₚ*v = λₖ v
) for left (right) oriented ps
. The returned vectors correspond to the eigenvalues in ps.values
corresponding to true
entries in select
.
If keyword shifted
is true (the default), eigenvectors for circularly shifted permutations of the A
matrices are also returned. The vectors are returned as columns of the elements of the vector V
of matrices. (Note: A vector of length one is returned if shifted
is false.) Vectors are normalized so that Aⱼvⱼ = μ vⱼ₊₁
where μ^p = λₖ
for the left orientation.
If the element type of ps
is real, select
may be updated to include conjugate pairs. ps
itself is not modified.
The algorithm may fail if some selected eigenvalues are associated with an invariant subspace that cannot be untangled.
Periodic Hessenberg decompositions
PeriodicSchurDecompositions.phessenberg!
— Functionphessenberg!(A::Vector{<:AbstractMatrix}) -> (Hessenberg, Vector{QR})
reduce a series of p
matrices A = [A₁ A₂ ... Aₚ]
to upper Hessenberg/triangular form via a cycle of orthogonal similarity transformations
Q₁'A₁Q₂ = H₁
Q₂'A₂Q₃ = H₂
Qₚ'AₚQ₁ = Hₚ
H₁
is upper Hessenberg, the other Hⱼ
are upper triangular.