Manifolds.jl
A Library of Riemannian Manifolds
Efficient Numerical Differential Geometry
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.
Use with LieGroups.jl
Together with a group operation, a manifold forms a Lie group. This package serves as base layer for LieGroups.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
Manifolds.Manifolds โ Module
Manifolds.jl: Riemannian manifolds in Julia
- ๐ Documentation: juliamanifolds.github.io/Manifolds.jl/
- ๐ฆ Repository: github.com/JuliaManifolds/Manifolds.jl
- ๐ฌ Discussions: github.com/JuliaManifolds/Manifolds.jl/discussions
- ๐ฏ Issues: github.com/JuliaManifolds/Manifolds.jl/issues
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.7071067811865476Citation
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.