Skip to contents

Returns the new_manifold object describing the Grassmann manifold \(Gr(n, k)\) of k-dimensional linear subspaces of \(R^n\). A subspace is represented by an n x k matrix \(U\) with orthonormal columns spanning it (a point of the Stiefel manifold, \(U^T U = I_k\)), stored as a row of length n * k holding as.vector(U), i.e. \(U\) column by column. Data on \(Gr(n, k)\) are thus matrices with n * k columns, and base points are vectors of length n * k. Two matrices \(U\) and \(UR\), with \(R\) orthogonal, represent the same subspace; all functions are invariant to this choice up to an isometry of the tangent space, which leaves distance covariance unchanged.

Usage

manifold_grassmann(n, k)

Arguments

n

Integer: dimension of the ambient space.

k

Integer: dimension of the subspaces, 1 <= k <= n - 1.

Value

An object of class "manifold".

Details

Since n and k cannot be inferred from the data, the manifold must be passed as an object, e.g. manifold = manifold_grassmann(4, 2), rather than by name.

The tangent space at a base point is identified with \(R^{(n-k)k}\) (see log_map_grassmann) and the cut locus of \(U_0\) is the set of subspaces with at least one principal angle equal to \(\pi/2\) with it. Its components are is_in_grassmann, log_map_grassmann, dist_grassmann, is_valid_grassmann, and two base point methods: "auto" (the default, the closed-form projection mean auto_base_point_grassmann) and "optimize" (optimize_base_point_grassmann).

Examples

manifold_grassmann(4, 2)
#> <manifold: Grassmann manifold Gr(4, 2)>
#>   representation:     rows as.vector(U) of 4 x 2 matrices U with orthonormal columns
#>   base point methods: auto, optimize