Internal methods
FiniteHorizonGramians._exp_and_gram_chol_init!
— Method_exp_and_gram_init(
A::AbstractMatrix{T},
B::AbstractMatrix{T},
method::ExpAndGram{T,q},
[cache=alloc_mem(A, B, method)],
)
Computes the matrix exponential exp(A) and the controllability Grammian
\[∫_0^1 e^{A t} B B' e^{A'*t} dt,\]
using a Legendre expansion of the matrix exponential of order q.
FiniteHorizonGramians._exp_and_gram_double!
— Method_exp_and_gram_double!(eA, U, s, cache)
Computes s iterations of the doubling recursions:
\[Φ_{k+1} = Φ_k^2,\]
and
\[U_{k+1}' U_{k+1} = Φ_k U_k' U_k Φ_k' + U_k' U_k\]
FiniteHorizonGramians._dims_if_compatible
— Method_dims_if_compatible(A::AbstractMatrix, B::AbstractMatrix)
Throws DimensionMismatch if A is not square or if the number of rows of B does not equal the number of columns of A. Is equivalent to size(B) if no error is thrown.
FiniteHorizonGramians.triu2cholesky_factor!
— Methodtriu2cholesky_factor!(A::AbstractMatrix{T})
If A is an upper triangular matrix, it computes the product QA in-place, where Q is a unitary transform such that QA is a valid Cholesky factor. If A is not an upper triangular matrix, returns garbage.
FiniteHorizonGramians._symmetrize!
— Method_symmetrize!(A::AbstractMatrix{T}) where {T<:Number}
Discards the skew-Hermitian part of A in-place.