Functions

Periodic Schur decompositions

PeriodicSchurDecompositions.pschurFunction
pschur(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.

source
PeriodicSchurDecompositions.pschur!Function
pschur!(A::Vector{S<:StridedMatrix}, lr::Symbol=:R) -> F::PeriodicSchur

Same as pschur but uses the input matrices A as workspace.

source
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ⱼ.

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

source
PeriodicSchurDecompositions.gpschurFunction
gpschur(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.

source

Reordering

LinearAlgebra.ordschur!Method
ordschur!(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.

source

Partial periodic Schur decompositions

PeriodicSchurDecompositions.partial_pschurFunction
partial_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

NameTypeDefaultDescription
nevIntmin(6, size(A, 1))Number of eigenvalues
whichTargetLM()One of LM(), LR(), SR(), LI(), SI(), see below.

The most important keyword arguments:

KeywordTypeDefaultDescription
tolReal√epsTolerance for convergence: ‖AV - VT‖₂ < tol * ‖λ‖
maxdimIntmax(20,2*nev)order of working Krylov subspace
restartsInt100limit on restart iterations

The target which can be any appropriate subtype of ArnoldiMethod.Target.

source

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.eigvecsMethod
eigvecs(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.

source

Periodic Hessenberg decompositions

PeriodicSchurDecompositions.phessenberg!Function

phessenberg!(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.

source