# Flag manifold

Manifolds.Flag โ Type
Flag{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 OrthogonalTVector 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.

source
Base.convert โ Method
convert(::Type{AbstractMatrix}, M::Flag, p::OrthogonalPoint, X::OrthogonalTVector)

Convert tangent vector from Flag manifold M from orthogonal representation to Stiefel representation.

source
Base.convert โ Method
convert(::Type{AbstractMatrix}, M::Flag, p::OrthogonalPoint)

Convert point p from Flag manifold M from orthogonal representation to Stiefel representation.

source
Base.convert โ Method
convert(::Type{OrthogonalPoint}, M::Flag, p::AbstractMatrix)

Convert point p from Flag manifold M from Stiefel representation to orthogonal representation.

source
Base.convert โ Method
convert(::Type{OrthogonalTVector}, M::Flag, p::AbstractMatrix, X::AbstractMatrix)

Convert tangent vector from Flag manifold M from Stiefel representation to orthogonal representation.

source

## The flag manifold represented as points on the Stiefel manifold

ManifoldsBase.check_vector โ Method
check_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$.

source
ManifoldsBase.project โ Method
project(::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.

source

## The flag manifold represented as orthogonal matrices

ManifoldsBase.check_vector โ Method
check_vector(M::Flag, p::OrthogonalPoint, X::OrthogonalTVector; 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$.

source
ManifoldsBase.project โ Method
project(M::Flag, p::OrthogonalPoint, X::OrthogonalTVector)

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$.

source
ManifoldsBase.retract โ Method
retract(M::Flag, p::OrthogonalPoint, X::OrthogonalTVector, ::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].

source