Positive Numbers
The manifold PositiveNumbers represents positive numbers with hyperbolic geometry. Additionally, there are also short forms for its corresponding PowerManifolds, i.e. PositiveVectors, PositiveMatrices, and PositiveArrays.
Manifolds.PositiveNumbers โ TypePositiveNumbers <: AbstractManifold{โ}The hyperbolic manifold of positive numbers $H^1$ is a the hyperbolic manifold represented by just positive numbers.
Constructor
PositiveNumbers()Generate the โ-valued hyperbolic model represented by positive positive numbers. To use this with arrays (1-element arrays), please use SymmetricPositiveDefinite(1).
Base.exp โ Methodexp(M::PositiveNumbers, p, X)Compute the exponential map on the PositiveNumbers M.
\[\exp_p X = p\operatorname{exp}(X/p).\]
Base.log โ Methodlog(M::PositiveNumbers, p, q)Compute the logarithmic map on the PositiveNumbers M.
\[\log_p q = p\log\frac{q}{p}.\]
ManifoldDiff.riemannian_Hessian โ Methodriemannian_Hessian(M::SymmetricPositiveDefinite, p, G, H, X)The Riemannian Hessian can be computed as stated in Eq. (7.3) [Ngu23]. Let $\nabla f(p)$ denote the Euclidean gradient G, $\nabla^2 f(p)[X]$ the Euclidean Hessian H. Then the formula reads
\[ \operatorname{Hess}f(p)[X] = p\bigl(โ^2 f(p)[X]\bigr)p + X\bigl(โf(p)\bigr)p\]
Manifolds.PositiveArrays โ MethodPositiveArrays(nโ, nโ, ..., nแตข; parameter::Symbol=:type)Generate the manifold of i-dimensional arrays with positive entries. This manifold is modeled as a PowerManifold of PositiveNumbers.
parameter: whether a type parameter should be used to store n. By default size is stored in a type parameter. Value can either be :field or :type.
Manifolds.PositiveMatrices โ MethodPositiveMatrices(m::Integer, n::Integer; parameter::Symbol=:type)Generate the manifold of matrices with positive entries. This manifold is modeled as a PowerManifold of PositiveNumbers.
parameter: whether a type parameter should be used to store n. By default size is stored in a type parameter. Value can either be :field or :type.
Manifolds.PositiveVectors โ MethodPositiveVectors(n::Integer; parameter::Symbol=:type)Generate the manifold of vectors with positive entries. This manifold is modeled as a PowerManifold of PositiveNumbers.
parameter: whether a type parameter should be used to store n. By default size is stored in a type parameter. Value can either be :field or :type.
Manifolds.manifold_volume โ Methodmanifold_volume(M::PositiveNumbers)Return volume of PositiveNumbers M, i.e. Inf.
Manifolds.volume_density โ Methodvolume_density(M::PositiveNumbers, p, X)Compute volume density function of PositiveNumbers. The formula reads
\[\theta_p(X) = \exp(X / p)\]
ManifoldsBase.change_metric โ Methodchange_metric(M::PositiveNumbers, E::EuclideanMetric, p, X)Given a tangent vector $X โ T_p\mathcal M$ representing a linear function with respect to the EuclideanMetric g_E, this function changes the representer into the one with respect to the positivity metric of PositiveNumbers M.
For all $Z,Y$ we are looking for the function $c$ on the tangent space at $p$ such that
\[ โจZ,Yโฉ = XY = \frac{c(Z)c(Y)}{p^2} = g_p(c(Y),c(Z))\]
and hence $C(X) = pX$.
ManifoldsBase.change_representer โ Methodchange_representer(M::PositiveNumbers, E::EuclideanMetric, p, X)Given a tangent vector $X โ T_p\mathcal M$ representing a linear function with respect to the EuclideanMetric g_E, this function changes the representer into the one with respect to the positivity metric representation of PositiveNumbers M.
For all tangent vectors $Y$ the result $Z$ has to fulfill
\[ โจX,Yโฉ = XY = \frac{ZY}{p^2} = g_p(YZ)\]
and hence $Z = p^2X$
ManifoldsBase.check_point โ Methodcheck_point(M::PositiveNumbers, p)Check whether p is a point on the PositiveNumbers M, i.e. $p>0$.
ManifoldsBase.check_vector โ Methodcheck_vector(M::PositiveNumbers, p, X; kwargs...)Check whether X is a tangent vector in the tangent space of p on the PositiveNumbers M. For the real-valued case represented by positive numbers, all X are valid, since the tangent space is the whole real line. For the complex-valued case X [...]
ManifoldsBase.distance โ Methoddistance(M::PositiveNumbers, p, q)Compute the distance on the PositiveNumbers M, which is
\[d(p,q) = \Bigl\lvert \log \frac{p}{q} \Bigr\rvert = \lvert \log p - \log q\rvert.\]
ManifoldsBase.get_coordinates โ Methodget_coordinates(::PositiveNumbers, p, X, ::DefaultOrthonormalBasis{โ})Compute the coordinate of vector X which is tangent to p on the PositiveNumbers manifold. The formula is $X / p$.
ManifoldsBase.get_vector โ Methodget_vector(::PositiveNumbers, p, c, ::DefaultOrthonormalBasis{โ})Compute the vector with coordinate c which is tangent to p on the PositiveNumbers manifold. The formula is $p * c$.
ManifoldsBase.injectivity_radius โ Methodinjectivity_radius(M::PositiveNumbers[, p])Return the injectivity radius on the PositiveNumbers M, i.e. $\infty$.
ManifoldsBase.inner โ Methodinner(M::PositiveNumbers, p, X, Y)Compute the inner product of the two tangent vectors X,Y from the tangent plane at p on the PositiveNumbers M, i.e.
\[g_p(X,Y) = \frac{XY}{p^2}.\]
ManifoldsBase.is_flat โ Methodis_flat(::PositiveNumbers)Return false. PositiveNumbers is not a flat manifold.
ManifoldsBase.manifold_dimension โ Methodmanifold_dimension(M::PositiveNumbers)Return the dimension of the PositiveNumbers M, i.e. of the 1-dimensional hyperbolic space,
\[\dim(H^1) = 1\]
ManifoldsBase.parallel_transport_to โ Methodparallel_transport_to(M::PositiveNumbers, p, X, q)Compute the parallel transport of X from the tangent space at p to the tangent space at q on the PositiveNumbers M.
\[\mathcal P_{q\gets p}(X) = Xโ \frac{q}{p}.\]
ManifoldsBase.project โ Methodproject(M::PositiveNumbers, p, X)Project a value X onto the tangent space of the point p on the PositiveNumbers M, which is just the identity.