Flag manifold
Manifolds.Flag โ TypeFlag{T,d} <: AbstractDecoratorManifold{โ}Flag manifold of $d$ subspaces of $โ^N$ [YWL21]. By default the manifold uses the Stiefel coordinates representation, embedding it in the Stiefel manifold. The other available representation is an embedding in OrthogonalMatrices. It can be utilized using OrthogonalPoint and OrthogonalTangentVector wrappers.
Tangent space is represented in the block-skew-symmetric form.
Constructor
Flag(N, n1, n2, ..., nd; parameter::Symbol=:type)Generate the manifold $\operatorname{Flag}(n_1, n_2, ..., n_d; N)$ of subspaces
\[๐_1 โ ๐_2 โ โฏ โ V_d, \quad \operatorname{dim}(๐_i) = n_i\]
where $๐_i$ for $i โ 1, 2, โฆ, d$ are subspaces of $โ^N$ of dimension $\operatorname{dim} ๐_i = n_i$.
parameter: whether a type parameter should be used to store n. By default size is stored in type. Value can either be :field or :type.
Manifolds.OrthogonalPoint โ TypeOrthogonalPoint <: AbstractManifoldPointA type to represent points on a manifold Flag in the orthogonal coordinates representation, i.e. a rotation matrix.
Manifolds.OrthogonalTangentVector โ TypeOrthogonalTangentVector <: AbstractTangentVectorA type to represent tangent vectors to points on a Flag manifold in the orthogonal coordinates representation.
Manifolds.ZeroTuple โ TypeZeroTupleInternal structure for representing shape of a Flag manifold. Behaves like a normal tuple, except at index zero returns value 0.
Base.convert โ Methodconvert(::Type{AbstractMatrix}, M::Flag, p::OrthogonalPoint, X::OrthogonalTangentVector)Convert tangent vector from Flag manifold M from orthogonal representation to Stiefel representation.
Base.convert โ Methodconvert(::Type{AbstractMatrix}, M::Flag, p::OrthogonalPoint)Convert point p from Flag manifold M from orthogonal representation to Stiefel representation.
Base.convert โ Methodconvert(::Type{OrthogonalPoint}, M::Flag, p::AbstractMatrix)Convert point p from Flag manifold M from Stiefel representation to orthogonal representation.
Base.convert โ Methodconvert(::Type{OrthogonalTangentVector}, M::Flag, p::AbstractMatrix, X::AbstractMatrix)Convert tangent vector from Flag manifold M from Stiefel representation to orthogonal representation.
ManifoldsBase.get_embedding โ MethodManifoldsBase.injectivity_radius โ Methodinjectivity_radius(M::Flag)
injectivity_radius(M::Flag, p)Return the injectivity radius on the Flag M, which is $\frac{ฯ}{2}$.
ManifoldsBase.manifold_dimension โ Methodmanifold_dimension(M::Flag)Return dimension of flag manifold $\operatorname{Flag}(n_1, n_2, ..., n_d; N)$. The formula reads $\sum_{i=1}^d (n_i-n_{i-1})(N-n_i)$.
The flag manifold represented as points on the Stiefel manifold
ManifoldsBase.check_vector โ Methodcheck_vector(M::Flag, p::AbstractMatrix, X::AbstractMatrix; kwargs... )Check whether X is a tangent vector to point p on the Flag manifold M $\operatorname{Flag}(n_1, n_2, ..., n_d; N)$ in the Stiefel representation, i.e. that X is a matrix of the form
\[X = \begin{bmatrix} 0 & B_{1,2} & โฏ & B_{1,d} \\ -B_{1,2}^\mathrm{T} & 0 & โฏ & B_{2,d} \\ \vdots & \vdots & โฑ & \vdots \\ -B_{1,d}^\mathrm{T} & -B_{2,d}^\mathrm{T} & โฏ & 0 \\ -B_{1,d+1}^\mathrm{T} & -B_{2,d+1}^\mathrm{T} & โฏ & -B_{d,d+1}^\mathrm{T} \end{bmatrix}\]
where $B_{i,j} โ โ^{(n_i - n_{i-1}) ร (n_j - n_{j-1})}$, for $1 โค i < j โค d+1$.
ManifoldsBase.default_inverse_retraction_method โ Methoddefault_inverse_retraction_method(M::Flag)Return PolarInverseRetraction as the default inverse retraction for the Flag manifold.
ManifoldsBase.default_retraction_method โ Methoddefault_retraction_method(M::Flag)Return PolarRetraction as the default retraction for the Flag manifold.
ManifoldsBase.default_vector_transport_method โ Methoddefault_vector_transport_method(M::Flag)Return the ProjectionTransport as the default vector transport method for the Flag manifold.
ManifoldsBase.inverse_retract โ Methodinverse_retract(M::Flag, p, q, ::PolarInverseRetraction)Compute the inverse retraction for the PolarRetraction, on the Flag manifold M.
ManifoldsBase.project โ Methodproject(::Flag, p, X)Project vector X in the Euclidean embedding to the tangent space at point p on Flag manifold. The formula reads [YWL21]:
\[Y_i = X_i - (p_i p_i^{\mathrm{T}}) X_i + \sum_{j \neq i} p_j X_j^{\mathrm{T}} p_i\]
for $i$ from 1 to $d$ where the resulting vector is $Y = [Y_1, Y_2, โฆ, Y_d]$ and $X = [X_1, X_2, โฆ, X_d]$, $p = [p_1, p_2, โฆ, p_d]$ are decompositions into basis vector matrices for consecutive subspaces of the flag.
ManifoldsBase.retract โ Methodretract(M::Flag, p, X, ::PolarRetraction)Compute the SVD-based retraction PolarRetraction on the Flag M. With $USV = p + X$ the retraction reads
\[\operatorname{retr}_p X = UV^\mathrm{H},\]
where $\cdot^{\mathrm{H}}$ denotes the complex conjugate transposed or Hermitian.
The flag manifold represented as orthogonal matrices
ManifoldsBase.check_vector โ Methodcheck_vector(M::Flag, p::OrthogonalPoint, X::OrthogonalTangentVector; kwargs... )Check whether X is a tangent vector to point p on the Flag manifold M $\operatorname{Flag}(n_1, n_2, ..., n_d; N)$ in the orthogonal matrix representation, i.e. that X is block-skew-symmetric with zero diagonal:
\[X = \begin{bmatrix} 0 & B_{1,2} & โฏ & B_{1,d+1} \\ -B_{1,2}^\mathrm{T} & 0 & โฏ & B_{2,d+1} \\ \vdots & \vdots & โฑ & \vdots \\ -B_{1,d+1}^\mathrm{T} & -B_{2,d+1}^\mathrm{T} & โฏ & 0 \end{bmatrix}\]
where $B_{i,j} โ โ^{(n_i - n_{i-1}) ร (n_j - n_{j-1})}$, for $1 โค i < j โค d+1$.
ManifoldsBase.get_embedding โ Methodget_embedding(M::Flag, p::OrthogonalPoint)Get embedding of Flag manifold M, i.e. the manifold OrthogonalMatrices.
ManifoldsBase.project โ Methodproject(M::Flag, p::OrthogonalPoint, X::OrthogonalTangentVector)Project vector X to tangent space at point p from Flag manifold M $\operatorname{Flag}(n_1, n_2, ..., n_d; N)$, in the orthogonal matrix representation. It works by first projecting X to the space of SkewHermitianMatrices and then setting diagonal blocks to 0:
\[X = \begin{bmatrix} 0 & B_{1,2} & โฏ & B_{1,d+1} \\ -B_{1,2}^\mathrm{T} & 0 & โฏ & B_{2,d+1} \\ \vdots & \vdots & โฑ & \vdots \\ -B_{1,d+1}^\mathrm{T} & -B_{2,d+1}^\mathrm{T} & โฏ & 0 \end{bmatrix}\]
where $B_{i,j} โ โ^{(n_i - n_{i-1}) ร (n_j - n_{j-1})}$, for $1 โค i < j โค d+1$.
ManifoldsBase.retract โ Methodretract(M::Flag, p::OrthogonalPoint, X::OrthogonalTangentVector, ::QRRetraction)Compute the QR retraction on the Flag in the orthogonal matrix representation as the first order approximation to the exponential map. Similar to QR retraction for [GeneralUnitaryMatrices].