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