Manifolds.jl

A Library of Riemannian Manifolds

Efficient Numerical Differential Geometry

Manifolds.jl Manifolds.jl
ManifoldsBase.jl ManifoldsBase.jl

Unified implementation

All manifolds follow the interface from ManifoldsBase.jl.

๐Ÿงฉ

Composable

Components like a metric, the connection or different representations of points and tangent vectors are designed in a modular fashion. They can be reused and combined easily. Points and tangent vectors can be represented using arbitrary Julia types.

๐Ÿ“š

Well-documented and -tested

All manifolds are documented โ€“ both their theoretical foundation and all numerical functionality. The theoretical background also refers to further literature.

โšก๏ธ

Efficient

All methods provide also in-place evaluations. The package is compatible with running on a GPU when you use ManifoldsGPU.jl.

LieGroups.jl LieGroups.jl

Use with LieGroups.jl

Together with a group operation, a manifold forms a Lie group. This package serves as base layer for LieGroups.jl.

Manopt.jl

Use with Manopt.jl

All manifolds from this package can be used as the domain of a function in the optimization algorithms of Manopt.jl

The manifolds are implemented using the interface for manifolds given in ManifoldsBase.jl. You can use that interface to implement your own software on manifolds, such that all manifolds based on that interface can be used within your code.

For more information, see the About section.

Getting started

To install the package just type

using Pkg; Pkg.add("Manifolds")

Then you can directly start, for example to stop half way from the north pole on the Sphere to a point on the the equator, you can generate the shortest_geodesic. It internally employs log and exp.

using ManifoldsM = Sphere(2)ฮณ = shortest_geodesic(M, [0., 0., 1.], [0., 1., 0.])ฮณ(0.5)
3-element Vector{Float64}:
 0.0
 0.7071067811865475
 0.7071067811865476

Citation

If you use Manifolds.jl in your work, please cite the following

@online{2106.08777,
    Author = {Seth D. Axen and Mateusz Baran and Ronny Bergmann and Krzysztof Rzecki},
    Title = {Manifolds.jl: An Extensible Julia Framework for Data Analysis on Manifolds},
    Year = {2021},
    Eprint = {2106.08777},
    Eprinttype = {arXiv},
}

To refer to a specific version, it is recommended to cite, for example,

@software{manifoldsjl-zenodo-mostrecent,
  Author = {Seth D. Axen and Mateusz Baran and Ronny Bergmann},
  Title = {Manifolds.jl},
  Doi = {10.5281/ZENODO.4292129},
  Url = {https://zenodo.org/record/4292129},
  Publisher = {Zenodo},
  Year = {2021},
  Copyright = {MIT License}
}

for the most recent version or a corresponding version specific DOI, see the list of all versions. Note that both citations are in BibLaTeX format.