Skip to contents

Applies the logarithmic map of \(H^d\) at base point p. At \(p = (1, 0, \ldots, 0)\) it is \(\log_p(x) = \mathrm{arcsinh}(\|x'\|)\, x' / \|x'\|\) with \(x' = (x_1, \ldots, x_d)\), which equals the \(\mathrm{arccosh}(x_0)\, x'/\|x'\|\) of the hyperboloid model but is numerically accurate close to p. For a general p, the data are first moved by the Lorentz boost sending p to \((1, 0, \ldots, 0)\), which identifies the tangent space at p with \(R^d\). The map is a global diffeomorphism (\(H^d\) has no cut locus).

Usage

log_map_hyperbolic(X, p)

Arguments

X

A matrix or data frame of points on the hyperboloid; rows are samples, with d + 1 columns.

p

Numeric vector of length ncol(X): the base point on the hyperboloid.

Value

A numeric matrix with nrow(X) rows and d columns: the tangent-space coordinates of each row of X, whose norms are the geodesic distances to p.

Examples

X <- exp_map_hyperbolic(matrix(rnorm(20), nrow = 10, ncol = 2))
log_map_hyperbolic(X, p = c(1, 0, 0))
#>              [,1]       [,2]
#>  [1,]  1.12792660 -0.6954311
#>  [2,]  1.81345434 -0.7836391
#>  [3,] -0.08382568 -0.9531239
#>  [4,]  1.36770667  1.7927561
#>  [5,] -0.62743462  0.3489767
#>  [6,] -0.21662915  0.2591038
#>  [7,] -0.68371382 -0.8059519
#>  [8,] -0.44470273  0.1056647
#>  [9,]  0.60648981 -0.3335997
#> [10,]  0.62418307  1.6418480