Specific manifold functions

This small section extends the functions available from ManifoldsBase.jl and Manifolds.jl, espcially a few random generators, that are simpler than the functions available.

ManifoldsBase.mid_pointMethod
mid_point(M, p, q, x)

Compute the mid point between p and q. If there is more than one mid point of (not neccessarily minimizing) geodesics (i.e. on the sphere), the one nearest to x is returned.

source
Manopt.reflectMethod
reflect(M, p, x)

reflect the point x from the manifold M at point x, i.e.

\[ \operatorname{refl}_p(x) = \exp_p(-\log_p x).\]

where exp and log denote the exponential and logarithmic map on M.

source
Manopt.sym_remMethod
sym_rem(x,[T=π])

Compute symmetric remainder of x with respect to the interall 2*T, i.e. (x+T)%2T, where the default for T is $π$

source

Simplified random functions

While statistics are available in Manifolds.jl, the following functions provide default random points and vectors on manifolds.

Manopt.random_pointFunction
randomMPoint(M::Rotations [,type=:Gaussian, σ=1.0])

return a random point p on the manifold Rotations by generating a (Gaussian) random orthogonal matrix with determinant $+1$. Let $QR = A$ be the QR decomposition of a random matrix $A$, then the formula reads $p = QD$ where $D$ is a diagonal matrix with the signs of the diagonal entries of $R$, i.e.

\[D_{ij}=\begin{cases} \operatorname{sgn}(R_{ij}) & \text{if} \; i=j \\ 0 & \, \text{otherwise.} \end{cases}$\]

It can happen that the matrix gets -1 as a determinant. In this case, the first and second columns are swapped.

source
Manopt.random_pointFunction
random_point(M::Sphere, :Gaussian, σ=1.0])

return a random point on the Sphere by projecting a normal distirbuted vector from within the embedding to the sphere.

source
Manopt.random_pointMethod
random_point(M, :Uniform)

return a random point on the Circle $\mathbb S^1$ by picking a random element from $[-\pi,\pi)$ uniformly.

source
Manopt.random_pointMethod
random_point(M::Euclidean[,T=Float64])

generate a random point on the Euclidean manifold M, where the optional parameter determines the type of the entries of the resulting point on the Euclidean space d.

source
Manopt.random_pointMethod
random_point(M::ProductManifold [,type=:Gaussian, σ=1.0])

return a random point x on Grassmannian manifold M by generating a random (Gaussian) matrix with standard deviation σ in matching size, which is orthonormal.

source
Manopt.random_pointMethod
random_point(M::SymmetricPositiveDefinite, :Gaussian[, σ=1.0])

gerenate a random symmetric positive definite matrix on the SymmetricPositiveDefinite manifold M.

source
Manopt.random_pointMethod
random_point(M::Grassmannian [,type=:Gaussian, σ=1.0])

return a random point x on Grassmannian manifold M by generating a random (Gaussian) matrix with standard deviation σ in matching size, which is orthonormal.

source
Manopt.random_pointMethod
random_point(M::Stiefel, :Gaussian, σ=1.0])

return a random (Gaussian) point x on the Stiefel manifold M by generating a (Gaussian) matrix with standard deviation σ and return the orthogonalized version, i.e. return ​​the Q component of the QR decomposition of the random matrix of size $n×k$.

source
Manopt.random_tangentFunction
random_tangent(M::Sphere, x[, :Gaussian, σ=1.0])

return a random tangent vector in the tangent space of x on the Sphere M.

source
Manopt.random_tangentFunction
random_tangent(M::Rotations, p[, type=:Gaussian, σ=1.0])

return a random tangent vector in the tangent space $T_x\mathrm{SO}(n)$ of the point x on the Rotations manifold M by generating a random skew-symmetric matrix. The function takes the real upper triangular matrix of a (Gaussian) random matrix $A$ with dimension $n\times n$ and subtracts its transposed matrix. Finally, the matrix is ​​normalized.

source
Manopt.random_tangentFunction
random_tangent(M::GRassmann,x[,type=:Gaussian, σ=1.0])

return a (Gaussian) random vector from the tangent space $T_x\mathrm{Gr}(n,k)$ with mean zero and standard deviation σ by projecting a random Matrix onto the x.

source
Manopt.random_tangentFunction
random_tangent(M, p[, :Gaussian, σ = 1.0])

generate a random tangent vector in the tangent space of the point p on the SymmetricPositiveDefinite manifold M by using a Gaussian distribution with standard deviation σ on an ONB of the tangent space.

source
Manopt.random_tangentFunction
random_tangent(M,x, Val(:Rician) [,σ = 0.01])

generate a random tangent vector in the tangent space of x on the SymmetricPositiveDefinite manifold M by using a Rician distribution with standard deviation σ.

source
Manopt.random_tangentFunction
random_tangent(M::Circle, x[, :Gaussian, σ=1.0])

return a random tangent vector from the tangent space of the point x on the Circle $\mathbb S^1$ by using a normal distribution with mean 0 and standard deviation 1.

source
Manopt.random_tangentMethod
random_tangent(M::Hyperpolic, p)

generate a random point on the Hyperbolic manifold by projecting a point from the embedding with respect to the Minkowsky metric.

source
Manopt.random_tangentMethod
random_tangent(M::ProductManifold, x)

generate a random tangent vector in the tangent space of the point p on the ProductManifold M.

source
Manopt.random_tangentMethod
random_tangent(M,p)

generate a random tangent vector in the tangent space of p on M. By default this is a :Gaussian distribution.

source