# Positive Numbers

The manifold `PositiveNumbers`

represents positive numbers with hyperbolic geometry. Additionally, there are also short forms for its corresponding `PowerManifold`

s, i.e. `PositiveVectors`

, `PositiveMatrices`

, and `PositiveArrays`

.

`Manifolds.PositiveNumbers`

— Type`PositiveNumbers <: 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`

— Method`exp(M::PositiveNumbers, p, X)`

Compute the exponential map on the `PositiveNumbers`

`M`

.

\[\exp_p X = p\operatorname{exp}(X/p).\]

`Base.log`

— Method`log(M::PositiveNumbers, p, q)`

Compute the logarithmic map on the `PositiveNumbers`

`M`

.

\[\log_p q = p\log\frac{q}{p}.\]

`Manifolds.PositiveArrays`

— Method`PositiveArrays(n₁,n₂,...,nᵢ)`

Generate the manifold of `i`

-dimensional arrays with positive entries. This manifold is modeled as a `PowerManifold`

of `PositiveNumbers`

.

`Manifolds.PositiveMatrices`

— Method`PositiveMatrices(m,n)`

Generate the manifold of matrices with positive entries. This manifold is modeled as a `PowerManifold`

of `PositiveNumbers`

.

`Manifolds.PositiveVectors`

— Method`PositiveVectors(n)`

Generate the manifold of vectors with positive entries. This manifold is modeled as a `PowerManifold`

of `PositiveNumbers`

.

`ManifoldsBase.change_metric`

— Method`change_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`

— Method`change_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`

— Method`check_point(M::PositiveNumbers, p)`

Check whether `p`

is a point on the `PositiveNumbers`

`M`

, i.e. $p>0$.

`ManifoldsBase.check_vector`

— Method`check_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`

— Method`distance(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`

— Method`get_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`

— Method`get_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`

— Method`injectivity_radius(M::PositiveNumbers[, p])`

Return the injectivity radius on the `PositiveNumbers`

`M`

, i.e. $\infty$.

`ManifoldsBase.inner`

— Method`inner(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`

— Method`is_flat(::PositiveNumbers)`

Return false. `PositiveNumbers`

is not a flat manifold.

`ManifoldsBase.manifold_dimension`

— Method`manifold_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`

— Method`parallel_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\cdot\frac{q}{p}.\]

`ManifoldsBase.project`

— Method`project(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.