# Grassmannian manifold

Manifolds.GrassmannType
Grassmann{n,k,𝔽} <: AbstractDecoratorManifold{𝔽}

The Grassmann manifold $\operatorname{Gr}(n,k)$ consists of all subspaces spanned by $k$ linear independent vectors $𝔽^n$, where $𝔽 ∈ \{ℝ, ℂ\}$ is either the real- (or complex-) valued vectors. This yields all $k$-dimensional subspaces of $ℝ^n$ for the real-valued case and all $2k$-dimensional subspaces of $ℂ^n$ for the second.

The manifold can be represented as

$$$\operatorname{Gr}(n,k) := \bigl\{ \operatorname{span}(p) : p ∈ 𝔽^{n × k}, p^\mathrm{H}p = I_k\},$$$

where $\cdot^{\mathrm{H}}$ denotes the complex conjugate transpose or Hermitian and $I_k$ is the $k × k$ identity matrix. This means, that the columns of $p$ form an unitary basis of the subspace, that is a point on $\operatorname{Gr}(n,k)$, and hence the subspace can actually be represented by a whole equivalence class of representers. Another interpretation is, that

$$$\operatorname{Gr}(n,k) = \operatorname{St}(n,k) / \operatorname{O}(k),$$$

i.e the Grassmann manifold is the quotient of the Stiefel manifold and the orthogonal group $\operatorname{O}(k)$ of orthogonal $k × k$ matrices.

The tangent space at a point (subspace) $x$ is given by

$$$T_p\mathrm{Gr}(n,k) = \bigl\{ X ∈ 𝔽^{n × k} : X^{\mathrm{H}}p + p^{\mathrm{H}}X = 0_{k} \bigr\},$$$

where $0_k$ is the $k × k$ zero matrix.

Note that a point $p ∈ \operatorname{Gr}(n,k)$ might be represented by different matrices (i.e. matrices with unitary column vectors that span the same subspace). Different representations of $p$ also lead to different representation matrices for the tangent space $T_p\mathrm{Gr}(n,k)$

For a representation of points as orthogonal projectors. Here

$$$\operatorname{Gr}(n,k) := \bigl\{ p \in \mathbb R^{n×n} : p = p^˜\mathrm{T}, p^2 = p, \operatorname{rank}(p) = k\},$$$

with tangent space

$$$T_p\mathrm{Gr}(n,k) = \bigl\{ X ∈ \mathbb R^{n × n} : X=X^{\mathrm{T}} \text{ and } X = pX+Xp \bigr\},$$$

The manifold is named after Hermann G. Graßmann (1809-1877).

A good overview can be found in[BendokatZimmermannAbsil2020].

Constructor

Grassmann(n,k,field=ℝ)

Generate the Grassmann manifold $\operatorname{Gr}(n,k)$, where the real-valued case field = ℝ is the default.

source

## The Grassmanian represented as points on the Stiefel manifold

Base.expMethod
exp(M::Grassmann, p, X)

Compute the exponential map on the Grassmann M$= \mathrm{Gr}(n,k)$ starting in p with tangent vector (direction) X. Let $X = USV$ denote the SVD decomposition of $X$. Then the exponential map is written using

$$$z = p V\cos(S)V^\mathrm{H} + U\sin(S)V^\mathrm{H},$$$

where $\cdot^{\mathrm{H}}$ denotes the complex conjugate transposed or Hermitian and the cosine and sine are applied element wise to the diagonal entries of $S$. A final QR decomposition $z=QR$ is performed for numerical stability reasons, yielding the result as

$$$\exp_p X = Q.$$$
source
Base.logMethod
log(M::Grassmann, p, q)

Compute the logarithmic map on the Grassmann M$= \mathcal M=\mathrm{Gr}(n,k)$, i.e. the tangent vector X whose corresponding geodesic starting from p reaches q after time 1 on M. The formula reads

$$$\log_p q = V\cdot \operatorname{atan}(S) \cdot U^\mathrm{H},$$$

where $\cdot^{\mathrm{H}}$ denotes the complex conjugate transposed or Hermitian. The matrices $U$ and $V$ are the unitary matrices, and $S$ is the diagonal matrix containing the singular values of the SVD-decomposition

$$$USV = (q^\mathrm{H}p)^{-1} ( q^\mathrm{H} - q^\mathrm{H}pp^\mathrm{H}).$$$

In this formula the $\operatorname{atan}$ is meant elementwise.

source
Base.randMethod
rand(M::Grassmann; σ::Real=1.0, vector_at=nothing)

When vector_at is nothing, return a random point p on Grassmann manifold M by generating a random (Gaussian) matrix with standard deviation σ in matching size, which is orthonormal.

When vector_at is not nothing, return a (Gaussian) random vector from the tangent space $T_p\mathrm{Gr}(n,k)$ with mean zero and standard deviation σ by projecting a random Matrix onto the tangent space at vector_at.

source
ManifoldsBase.distanceMethod
distance(M::Grassmann, p, q)

Compute the Riemannian distance on Grassmann manifold M$= \mathrm{Gr}(n,k)$.

Let $USV = p^\mathrm{H}q$ denote the SVD decomposition of $p^\mathrm{H}q$, where $\cdot^{\mathrm{H}}$ denotes the complex conjugate transposed or Hermitian. Then the distance is given by

$$$d_{\mathrm{Gr}(n,k)}(p,q) = \operatorname{norm}(\operatorname{Re}(b)).$$$

where

$$$b_{i}=\begin{cases} 0 & \text{if} \; S_i ≥ 1\\ \arccos(S_i) & \, \text{if} \; S_i<1. \end{cases}$$$
source
ManifoldsBase.innerMethod
inner(M::Grassmann, p, X, Y)

Compute the inner product for two tangent vectors X, Y from the tangent space of p on the Grassmann manifold M. The formula reads

$$$g_p(X,Y) = \operatorname{tr}(X^{\mathrm{H}}Y),$$$

where $\cdot^{\mathrm{H}}$ denotes the complex conjugate transposed or Hermitian.

source
ManifoldsBase.projectMethod
project(M::Grassmann, p, X)

Project the n-by-k X onto the tangent space of p on the Grassmann M, which is computed by

$$$\operatorname{proj_p}(X) = X - pp^{\mathrm{H}}X,$$$

where $\cdot^{\mathrm{H}}$ denotes the complex conjugate transposed or Hermitian.

source
ManifoldsBase.retractMethod
retract(M::Grassmann, p, X, ::QRRetraction )

Compute the QR-based retraction QRRetraction on the Grassmann M. With $QR = p + X$ the retraction reads

$$$\operatorname{retr}_p X = QD,$$$

where D is a $m × n$ matrix with

$$$D = \operatorname{diag}\left( \operatorname{sgn}\left(R_{ii}+\frac{1}{2}\right)_{i=1}^n \right).$$$
source
ManifoldsBase.vector_transport_toMethod
vector_transport_to(M::Grassmann,p,X,q,::ProjectionTransport)

compute the projection based transport on the Grassmann M by interpreting X from the tangent space at p as a point in the embedding and projecting it onto the tangent space at q.

source

## The Grassmannian represented as projectors

Base.expMethod
exp(M::Grassmann, p::ProjectorPoint, X::ProjectorTVector)

Compute the exponential map on the Grassmann as

$$$\exp_pX = \operatorname{Exp}([X,p])p\operatorname{Exp}(-[X,p]),$$$

where $\operatorname{Exp}$ denotes the matrix exponential and $[A,B] = AB-BA$ denotes the matrix commutator.

For details, see Proposition 3.2 in [BendokatZimmermannAbsil2020].

source
Manifolds.horizontal_liftMethod
horizontal_lift(N::Stiefel{n,k}, q, X::ProjectorTVector)

Compute the horizontal lift of X from the tangent space at $p=π(q)$ on the Grassmann manifold, i.e.

$$$Y = Xq ∈ T_q\mathrm{St}(n,k)$$$
source
ManifoldsBase.check_vectorMethod
check_vector(::Grassmann{n,k,𝔽}, p::ProjectorPoint, X::ProjectorTVector; kwargs...) where {n,k,𝔽}

Check whether the ProjectorTVector X is from the tangent space $T_p\operatorname{Gr}(n,k)$ at the ProjectorPoint p on the Grassmann manifold $\operatorname{Gr}(n,k)$. This means that X has to be symmetric and that

$$$Xp + pX = X$$$

must hold, where the kwargs can be used to check both for symmetrix of $X$ and this equality up to a certain tolerance.

source
ManifoldsBase.parallel_transport_directionMethod
parallel_transport_direction(
M::Grassmann,
p::ProjectorPoint,
X::ProjectorTVector,
d::ProjectorTVector
)

Compute the parallel transport of X from the tangent space at p into direction d`, i.e. to $q=\exp_pd$. The formula is given in Proposition 3.5 of [BendokatZimmermannAbsil2020] as

$$$\mathcal{P}_{q ← p}(X) = \operatorname{Exp}([d,p])X\operatorname{Exp}(-[d,p]),$$$

where $\operatorname{Exp}$ denotes the matrix exponential and $[A,B] = AB-BA$ denotes the matrix commutator.

source