Vector bundles
Vector bundle $E$ is a special case of a fiber bundle where each fiber is a vector space.
Tangent bundle is a simple example of a vector bundle, where each fiber is the tangent space at the specified point $p$. An object representing a tangent bundle can be obtained using the constructor called TangentBundle
.
There is also another type, VectorSpaceFiber
, that represents a specific fiber at a given point. This is also considered a manifold.
FVector
For cases where confusion between different types of vectors is possible, the type FVector
can be used to express which type of vector space the vector belongs to. It is used for example in musical isomorphisms (the flat
and sharp
functions) that are used to go from a tangent space to cotangent space and vice versa.
Documentation
Manifolds.TensorProductType
โ TypeTensorProductType(spaces::VectorSpaceType...)
Vector space type corresponding to the tensor product of given vector space types.
Manifolds.TangentBundle
โ TypeTangentBundle{๐ฝ,M} = VectorBundle{๐ฝ,TangentSpaceType,M} where {๐ฝ,M<:AbstractManifold{๐ฝ}}
Tangent bundle for manifold of type M
, as a manifold with the Sasaki metric [Sas58].
Exact retraction and inverse retraction can be approximated using FiberBundleProductRetraction
, FiberBundleInverseProductRetraction
and SasakiRetraction
. FiberBundleProductVectorTransport
can be used as a vector transport.
Constructors
TangentBundle(M::AbstractManifold)
TangentBundle(M::AbstractManifold, vtm::FiberBundleProductVectorTransport)
Manifolds.VectorBundle
โ TypeVectorBundle{๐ฝ,TVS,TM,VTV} = FiberBundle{๐ฝ,TVS,TM,TVT} where {TVS<:VectorSpaceType}
Alias for FiberBundle
when fiber type is a TVS
of type VectorSpaceType
.
VectorSpaceFiberType
is used to encode vector spaces as fiber types.
Manifolds.fiber_bundle_transport
โ Methodfiber_bundle_transport(M::AbstractManifold, fiber::FiberType)
Determine the vector transport used for exp
and log
maps on a vector bundle with fiber type fiber
and manifold M
.
ManifoldsBase.injectivity_radius
โ Methodinjectivity_radius(M::TangentBundle)
Injectivity radius of TangentBundle
manifold is infinite if the base manifold is flat and 0 otherwise. See https://mathoverflow.net/questions/94322/injectivity-radius-of-the-sasaki-metric.
ManifoldsBase.inner
โ Methodinner(B::VectorBundle, p, X, Y)
Inner product of tangent vectors X
and Y
at point p
from the vector bundle B
over manifold B.fiber
(denoted $\mathcal M$).
Notation:
- The point $p = (x_p, V_p)$ where $x_p โ \mathcal M$ and $V_p$ belongs to the fiber $F=ฯ^{-1}(\{x_p\})$ of the vector bundle $B$ where $ฯ$ is the canonical projection of that vector bundle $B$.
- The tangent vector $v = (V_{X,M}, V_{X,F}) โ T_{x}B$ where $V_{X,M}$ is a tangent vector from the tangent space $T_{x_p}\mathcal M$ and $V_{X,F}$ is a tangent vector from the tangent space $T_{V_p}F$ (isomorphic to $F$). Similarly for the other tangent vector $w = (V_{Y,M}, V_{Y,F}) โ T_{x}B$.
The inner product is calculated as
$โจX, Yโฉ_p = โจV_{X,M}, V_{Y,M}โฉ_{x_p} + โจV_{X,F}, V_{Y,F}โฉ_{V_p}.$
ManifoldsBase.inverse_retract
โ Methodinverse_retract(M::VectorBundle, p, q, ::FiberBundleInverseProductRetraction)
Compute the allocating variant of the FiberBundleInverseProductRetraction
, which by default allocates and calls inverse_retract_product!
.
ManifoldsBase.is_flat
โ Methodis_flat(::VectorBundle)
Return true if the underlying manifold of VectorBundle
M
is flat.
ManifoldsBase.project
โ Methodproject(B::VectorBundle, p, X)
Project the element X
of the ambient space of the tangent space $T_p B$ to the tangent space $T_p B$.
Notation:
- The point $p = (x_p, V_p)$ where $x_p โ \mathcal M$ and $V_p$ belongs to the fiber $F=ฯ^{-1}(\{x_p\})$ of the vector bundle $B$ where $ฯ$ is the canonical projection of that vector bundle $B$.
- The vector $x = (V_{X,M}, V_{X,F})$ where $x_p$ belongs to the ambient space of $T_{x_p}\mathcal M$ and $V_{X,F}$ belongs to the ambient space of the fiber $F=ฯ^{-1}(\{x_p\})$ of the vector bundle $B$ where $ฯ$ is the canonical projection of that vector bundle $B$.
The projection is calculated by projecting $V_{X,M}$ to tangent space $T_{x_p}\mathcal M$ and then projecting the vector $V_{X,F}$ to the fiber $F$.
ManifoldsBase.project
โ Methodproject(B::VectorBundle, p)
Project the point p
from the ambient space of the vector bundle B
over manifold B.fiber
(denoted $\mathcal M$) to the vector bundle.
Notation:
- The point $p = (x_p, V_p)$ where $x_p$ belongs to the ambient space of $\mathcal M$ and $V_p$ belongs to the ambient space of the fiber $F=ฯ^{-1}(\{x_p\})$ of the vector bundle $B$ where $ฯ$ is the canonical projection of that vector bundle $B$.
The projection is calculated by projecting the point $x_p$ to the manifold $\mathcal M$ and then projecting the vector $V_p$ to the tangent space $T_{x_p}\mathcal M$.
ManifoldsBase.retract
โ Methodretract(M::VectorBundle, p, q, t::Number, ::FiberBundleProductRetraction)
Compute the allocating variant of the FiberBundleProductRetraction
, which by default allocates and calls retract_product!
.
ManifoldsBase.vector_transport_to
โ Methodvector_transport_to(M::VectorBundle, p, X, q, m::FiberBundleProductVectorTransport)
Compute the vector transport the tangent vector X
at p
to q
on the VectorBundle
M
using the FiberBundleProductVectorTransport
m
.
Example
The following code defines a point on the tangent bundle of the sphere $S^2$ and a tangent vector to that point.
using Manifolds, RecursiveArrayTools
M = Sphere(2)
TB = TangentBundle(M)
p = ArrayPartition([1.0, 0.0, 0.0], [0.0, 1.0, 3.0])
X = ArrayPartition([0.0, 1.0, 0.0], [0.0, 0.0, -2.0])
([0.0, 1.0, 0.0], [0.0, 0.0, -2.0])
An approximation of the exponential in the Sasaki metric using 1000 steps can be calculated as follows.
q = retract(TB, p, X, SasakiRetraction(1000))
println("Approximation of the exponential map: ", q)
Approximation of the exponential map: RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}(([0.6759570857309888, 0.35241486404386485, 0.6472138609849252], [-1.0318269583261073, 0.6273324630574116, 0.7360618920075961]))