Functions
Periodic Schur decompositions
PeriodicSchurDecompositions.pschur — Functionpschur(A::Vector{S<:StridedMatrix}, lr::Symbol) -> F::PeriodicSchurComputes 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::PeriodicSchurSame as pschur but uses the input matrices A as workspace.
pschur!(H1,Us; Q) -> PeriodicSchurComputes 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::GeneralizedPeriodicSchurComputes 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::GeneralizedPeriodicSchurComputes 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.HistoryFind 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.