An R6::R6Class object implementing the base Connection
class for affine connections.
Public fields
dim
An integer value specifying the dimension of the underlying manifold.
shape
An integer vector specifying the shape of one element of the manifold. Defaults to
NULL
.default_coords_type
A string specifying the coordinate type. Choices are
extrensic
orintrinsic
. Dedaults tointrinsic
.default_point_type
A string specifying the point type. Choices are
vector
ormatrix
. It is automatically determined depending on the manifold.
Methods
Method new()
The Connection
class constructor.
Usage
Connection$new(
dim,
shape = NULL,
default_coords_type = "intrinsic",
py_cls = NULL
)
Arguments
dim
An integer value specifying the dimension of the manifold.
shape
An integer vector specifying the shape of one element of the manifold. Defaults to
NULL
.default_coords_type
A string specifying the coordinate type. Choices are
extrensic
orintrinsic
. Defaults tointrinsic
.py_cls
A Python object of class
Connection
. Defaults toNULL
in which case it is instantiated on the fly using the other input arguments.metric
A
RiemannianMetric
object specifying the metric to use on the manifold. Defaults toNULL
.
Method geodesic_equation()
Computes the geodesic ODE associated with the connection.
Method exp()
Exponential map associated to the affine connection.
Arguments
tangent_vec
A numeric array of shape
dim
specifying a tangent vector atbase_point
.base_point
A numeric array of shape
dim
specifying a base point on the manifold.n_steps
An integer value specifying the number of discrete time steps to take in the integration. Defaults to
100L
.step
A string specifying which numerical scheme to use for integration. Choices are
euler
orrk4
. Defaults toeuler
.
Method log()
Logarithm map associated to the affine connection.
Usage
Connection$log(
point,
base_point,
n_steps = 100,
step = "euler",
max_iter = 25,
verbose = FALSE,
tol = gs$backend$atol
)
Arguments
point
A numeric array of shape
dim
specifying a point on the manifold.base_point
A numeric array of shape
dim
specifying a base point on the manifold.n_steps
An integer value specifying the number of discrete time steps to take in the integration. Defaults to
100L
.step
A string specifying which numerical scheme to use for integration. Choices are
euler
orrk4
. Defaults toeuler
.max_iter
An integer value specifying the number of iterations. Defaults to
25L
.verbose
A boolean specifying whether the optimizer should display intermediate messages pertaining to its convergence. Defaults to
FALSE
.tol
A numeric value specifying the absolute tolerance for optimization convergence. Defaults to
gs$backend$atol
.
Method ladder_parallel_transport()
Approximate parallel transport using the pole ladder scheme.
Usage
Connection$ladder_parallel_transport(
tangent_vec,
base_point,
direction,
n_rungs = 1,
scheme = "pole",
alpha = 1,
...
)
Arguments
tangent_vec
A numeric array of shape
dim
specifying a tangent vector atbase_point
.base_point
A numeric array of shape
dim
specifying a base point on the manifold.direction
Tangent vector at base point specifying the initial speed of the geodesic along which to transport.
n_rungs
A scalar integer specifying the Number of steps of the ladder. Defaults to
1L
.scheme
A string specifying the scheme to use for the construction of the ladder at each step. Choices are either
pole
orschild
. Defaults topole
.alpha
A numeric value specifying the exponent for the scaling of the vector to transport. Must be greater or equal to 1 and Guigui and Pennec (2022) proved that
alpha = 2
is optimal. Defaults to2
....
Extra arguments to be passed to calls to
$exp()
and$log()
in auxiliary single ladder step functions.
Details
Approximate parallel transport using either the pole ladder or
the Schild's ladder scheme
(Lorenzi and Pennec 2014)
. Pole ladder is exact in
symmetric spaces and of order two in general while Schild's ladder is a
first order approximation (Guigui and Pennec 2022)
.
Both schemes are available on any affine connection manifolds whose
exponential and logarithm maps are implemented. tangent_vec
is
transported along the geodesic starting at the base_point
with
initial tangent vector direction
.
References
Guigui N, Pennec X (2022).
“Numerical accuracy of ladder schemes for parallel transport on manifolds.”
Foundations of Computational Mathematics, 22(3), 757--790.
Lorenzi M, Pennec X (2014).
“Efficient parallel transport of deformations in time series of images: from Schild’s to pole ladder.”
Journal of mathematical imaging and vision, 50(1), 5--17.
Returns
A named list with 3 components:
transported_tangent_vector
: Approximation of the parallel transport of the input tangent vector.trajectory
: A list of lengthn_steps
storing the geodesics of the construction, only ifreturn_geodesics = TRUE
in the step function. The geodesics are methods of the class connection.end_point
:
Method curvature()
Computes the curvature.
Arguments
tangent_vec_a
Tangent vector at
base_point
.tangent_vec_b
Tangent vector at
base_point
.tangent_vec_c
Tangent vector at
base_point
.base_point
A numeric array of shape
dim
specifying a base point on the manifold.
Details
For three vector fields \(X|_P = \mathrm{tangent\_vec\_a}\), \(Y|_P = \mathrm{tangent\_vec\_b}\), \(Z|_P = \mathrm{tangent\_vec\_c}\) with tangent vector specified in argument at the base point \(P\), the curvature is defined by $$R(X,Y)Z = \nabla_{[X,Y]}Z - \nabla_X\nabla_Y Z + \nabla_Y\nabla_X Z.$$
Method directional_curvature()
Computes the directional curvature (tidal force operator).
Arguments
tangent_vec_a
Tangent vector at
base_point
.tangent_vec_b
Tangent vector at
base_point
.base_point
A numeric array of shape
dim
specifying a base point on the manifold.
Method curvature_derivative()
Computes the covariant derivative of the curvature.
Usage
Connection$curvature_derivative(
tangent_vec_a,
tangent_vec_b,
tangent_vec_c,
tangent_vec_d,
base_point = NULL
)
Arguments
tangent_vec_a
Tangent vector at
base_point
.tangent_vec_b
Tangent vector at
base_point
.tangent_vec_c
Tangent vector at
base_point
.tangent_vec_d
Tangent vector at
base_point
.base_point
A numeric array of shape
dim
specifying a base point on the manifold.
Details
For four vector fields \(H|_P = \mathrm{tangent\_vec\_a}\), \(X|_P = \mathrm{tangent\_vec\_b}\), \(Y|_P = \mathrm{tangent\_vec\_c}\), \(Z|_P = \mathrm{tangent\_vec\_d}\) with tangent vector value specified in argument at the base point \(P\), the covariant derivative of the curvature \((\nabla_H R)(X, Y) Z |_P\) is computed at the base point \(P\).
Method directional_curvature_derivative()
Computes the covariant derivative of the directional curvature.
Usage
Connection$directional_curvature_derivative(
tangent_vec_a,
tangent_vec_b,
base_point = NULL
)
Arguments
tangent_vec_a
Tangent vector at
base_point
.tangent_vec_b
Tangent vector at
base_point
.base_point
A numeric array of shape
dim
specifying a base point on the manifold.
Details
For two vector fields \(X|_P = \mathrm{tangent\_vec\_a}\), \(Y|_P = \mathrm{tangent\_vec\_b}\) with tangent vector value specified in argument at the base point \(P\), the covariant derivative (in the direction \(X\)) \((\nabla_X R_Y)(X) |_P = (\nabla_X R)(Y, X) Y |_P\) of the directional curvature (in the direction \(Y\)) \(R_Y(X) = R(Y, X) Y\) is a quadratic tensor in \(X\) and \(Y\) that plays an important role in the computation of the moments of the empirical Fréchet mean (Pennec 2019) .
Method geodesic()
Generates parametrized function for the geodesic curve.
Arguments
initial_point
Point on the manifold specifying the initial point of the geodesic.
end_point
Point on the manifold specifying the end point of the geodesic. Defaults to
NULL
, in which case an initial tangent vector must be given.initial_tangent_vec
Tangent vector at base point specifying the initial speed of the geodesics. Defaults to
NULL
, in which case an end point must be given and a logarithm is computed.
Method parallel_transport()
Computes the parallel transport of a tangent vector.
Arguments
tangent_vec
A numeric array of shape
dim
specifying a tangent vector atbase_point
.base_point
A numeric array of shape
dim
specifying a base point on the manifold.direction
Tangent vector at base point specifying the point along which the parallel transport is computed. Defaults to
NULL
.end_point
Point on the manifold specifying the point to transport to. Defaults to
NULL
.
Method injectivity_radius()
Computes the radius of the injectivity domain.