Group manifolds and actions
Lie groups, groups that are Manifold
s with a smooth binary group operation AbstractGroupOperation
, are implemented as subtypes of AbstractGroupManifold
or by decorating an existing manifold with a group operation using GroupManifold
.
The common addition and multiplication group operations of AdditionOperation
and MultiplicationOperation
are provided, though their behavior may be customized for a specific group.
Contents
Groups
Group manifold
Manifolds.AbstractGroupManifold
β TypeAbstractGroupManifold{π½,O<:AbstractGroupOperation} <: AbstractDecoratorManifold{π½}
Abstract type for a Lie group, a group that is also a smooth manifold with an AbstractGroupOperation
, a smooth binary operation. AbstractGroupManifold
s must implement at least inv
, identity
, compose
, and translate_diff
.
Manifolds.AbstractGroupOperation
β TypeAbstractGroupOperation
Abstract type for smooth binary operations $β$ on elements of a Lie group $\mathcal{G}$:
\[β : \mathcal{G} Γ \mathcal{G} β \mathcal{G}\]
An operation can be either defined for a specific AbstractGroupManifold
over number system π½
or in general, by defining for an operation Op
the following methods:
identity!(::AbstractGroupManifold{π½,Op}, q, q)
identity(::AbstractGroupManifold{π½,Op}, p)
inv!(::AbstractGroupManifold{π½,Op}, q, p)
inv(::AbstractGroupManifold{π½,Op}, p)
compose(::AbstractGroupManifold{π½,Op}, p, q)
compose!(::AbstractGroupManifold{π½,Op}, x, p, q)
Note that a manifold is connected with an operation by wrapping it with a decorator, AbstractGroupManifold
. In typical cases the concrete wrapper GroupManifold
can be used.
Manifolds.ActionDirection
β TypeActionDirection
Direction of action on a manifold, either LeftAction
or RightAction
.
Manifolds.AdditionOperation
β TypeAdditionOperation <: AbstractGroupOperation
Group operation that consists of simple addition.
Manifolds.GroupExponentialRetraction
β TypeGroupExponentialRetraction{D<:ActionDirection} <: AbstractRetractionMethod
Retraction using the group exponential group_exp
"translated" to any point on the manifold.
For more details, see retract
.
Constructor
GroupExponentialRetraction(conv::ActionDirection = LeftAction())
Manifolds.GroupLogarithmicInverseRetraction
β TypeGroupLogarithmicInverseRetraction{D<:ActionDirection} <: AbstractInverseRetractionMethod
Retraction using the group logarithm group_log
"translated" to any point on the manifold.
For more details, see inverse_retract
.
Constructor
GroupLogarithmicInverseRetraction(conv::ActionDirection = LeftAction())
Manifolds.GroupManifold
β TypeGroupManifold{π½,M<:Manifold{π½},O<:AbstractGroupOperation} <: AbstractGroupManifold{π½,O}
Decorator for a smooth manifold that equips the manifold with a group operation, thus making it a Lie group. See AbstractGroupManifold
for more details.
Group manifolds by default forward metric-related operations to the wrapped manifold.
Constructor
GroupManifold(manifold, op)
Manifolds.Identity
β TypeIdentity(G::AbstractGroupManifold, p)
The group identity element $e β \mathcal{G}$ represented by point p
.
Manifolds.LeftAction
β TypeLeftAction()
Left action of a group on a manifold.
Manifolds.MultiplicationOperation
β TypeMultiplicationOperation <: AbstractGroupOperation
Group operation that consists of multiplication.
Manifolds.RightAction
β TypeRightAction()
Right action of a group on a manifold.
Base.identity
β Methodidentity(G::AbstractGroupManifold, p)
Identity element $e β \mathcal{G}$, such that for any element $p β \mathcal{G}$, $p \circ e = e \circ p = p$. The returned element is of a similar type to p
.
Base.inv
β Methodinv(G::AbstractGroupManifold, p)
Inverse $p^{-1} β \mathcal{G}$ of an element $p β \mathcal{G}$, such that $p \circ p^{-1} = p^{-1} \circ p = e β \mathcal{G}$, where $e$ is the identity
element of $\mathcal{G}$.
Manifolds.base_group
β Methodbase_group(M::Manifold) -> AbstractGroupManifold
Un-decorate M
until an AbstractGroupManifold
is encountered. Return an error if the base_manifold
is reached without encountering a group.
Manifolds.compose
β Methodcompose(G::AbstractGroupManifold, p, q)
Compose elements $p,q β \mathcal{G}$ using the group operation $p \circ q$.
Manifolds.group_exp
β Methodgroup_exp(G::AbstractGroupManifold, X)
Compute the group exponential of the Lie algebra element X
.
Given an element $X β π€ = T_e \mathcal{G}$, where $e$ is the identity
element of the group $\mathcal{G}$, and $π€$ is its Lie algebra, the group exponential is the map
\[\exp : π€ β \mathcal{G},\]
such that for $t,s β β$, $Ξ³(t) = \exp (t X)$ defines a one-parameter subgroup with the following properties:
\[\begin{aligned} Ξ³(t) &= Ξ³(-t)^{-1}\\ Ξ³(t + s) &= Ξ³(t) \circ Ξ³(s) = Ξ³(s) \circ Ξ³(t)\\ Ξ³(0) &= e\\ \lim_{t β 0} \frac{d}{dt} Ξ³(t) &= X. \end{aligned}\]
In general, the group exponential map is distinct from the Riemannian exponential map exp
.
group_exp(G::AbstractGroupManifold{π½,AdditionOperation}, X) where {π½}
Compute $q = X$.
group_exp(G::AbstractGroupManifold{π½,MultiplicationOperation}, X) where {π½}
For Number
and AbstractMatrix
types of X
, compute the usual numeric/matrix exponential,
\[\exp X = \operatorname{Exp} X = \sum_{n=0}^β \frac{1}{n!} X^n.\]
Manifolds.group_log
β Methodgroup_log(G::AbstractGroupManifold, q)
Compute the group logarithm of the group element q
.
Given an element $q β \mathcal{G}$, compute the right inverse of the group exponential map group_exp
, that is, the element $\log q = X β π€ = T_e \mathcal{G}$, such that $q = \exp X$
In general, the group logarithm map is distinct from the Riemannian logarithm map log
.
group_log(G::AbstractGroupManifold{π½,AdditionOperation}, q) where {π½}
Compute $X = q$.
group_log(G::AbstractGroupManifold{π½,MultiplicationOperation}, q) where {π½}
For Number
and AbstractMatrix
types of q
, compute the usual numeric/matrix logarithm:
\[\log q = \operatorname{Log} q = \sum_{n=1}^β \frac{(-1)^{n+1}}{n} (q - e)^n,\]
where $e$ here is the identity
element, that is, $1$ for numeric $q$ or the identity matrix $I_m$ for matrix $q β β^{m Γ m}$.
Manifolds.inverse_translate
β Methodinverse_translate(G::AbstractGroupManifold, p, q)
inverse_translate(G::AbstractGroupManifold, p, q, conv::ActionDirection=LeftAction())
Inverse translate group element $q$ by $p$ with the inverse translation $Ο_p^{-1}$ with the specified conv
ention, either left ($L_p^{-1}$) or right ($R_p^{-1}$), defined as
\[\begin{aligned} L_p^{-1} &: q β¦ p^{-1} \circ q\\ R_p^{-1} &: q β¦ q \circ p^{-1}. \end{aligned}\]
Manifolds.inverse_translate_diff
β Methodinverse_translate_diff(G::AbstractGroupManifold, p, q, X)
inverse_translate_diff(G::AbstractGroupManifold, p, q, X, conv::ActionDirection=LeftAction())
For group elements $p, q β \mathcal{G}$ and tangent vector $X β T_q \mathcal{G}$, compute the action on $X$ of the differential of the inverse translation $Ο_p$ by $p$, with the specified left or right conv
ention. The differential transports vectors:
\[(\mathrm{d}Ο_p^{-1})_q : T_q \mathcal{G} β T_{Ο_p^{-1} q} \mathcal{G}\\\]
Manifolds.switch_direction
β Methodswitch_direction(::ActionDirection)
Returns a RightAction
when given a LeftAction
and vice versa.
Manifolds.translate
β Methodtranslate(G::AbstractGroupManifold, p, q)
translate(G::AbstractGroupManifold, p, q, conv::ActionDirection=LeftAction()])
Translate group element $q$ by $p$ with the translation $Ο_p$ with the specified conv
ention, either left ($L_p$) or right ($R_p$), defined as
\[\begin{aligned} L_p &: q β¦ p \circ q\\ R_p &: q β¦ q \circ p. \end{aligned}\]
Manifolds.translate_diff
β Methodtranslate_diff(G::AbstractGroupManifold, p, q, X)
translate_diff(G::AbstractGroupManifold, p, q, X, conv::ActionDirection=LeftAction())
For group elements $p, q β \mathcal{G}$ and tangent vector $X β T_q \mathcal{G}$, compute the action of the differential of the translation $Ο_p$ by $p$ on $X$, with the specified left or right conv
ention. The differential transports vectors:
\[(\mathrm{d}Ο_p)_q : T_q \mathcal{G} β T_{Ο_p q} \mathcal{G}\\\]
ManifoldsBase.inverse_retract
β Methodinverse_retract(
G::AbstractGroupManifold,
p,
X,
method::GroupLogarithmicInverseRetraction{<:ActionDirection},
)
Compute the inverse retraction using the group logarithm group_log
"translated" to any point on the manifold. With a group translation (translate
) $Ο_p$ in a specified direction, the retraction is
\[\operatorname{retr}_p^{-1} = (\mathrm{d}Ο_p)_e \circ \log \circ Ο_p^{-1},\]
where $\log$ is the group logarithm (group_log
), and $(\mathrm{d}Ο_p)_e$ is the action of the differential of translation $Ο_p$ evaluated at the identity element $e$ (see translate_diff
).
ManifoldsBase.retract
β Methodretract(
G::AbstractGroupManifold,
p,
X,
method::GroupExponentialRetraction{<:ActionDirection},
)
Compute the retraction using the group exponential group_exp
"translated" to any point on the manifold. With a group translation (translate
) $Ο_p$ in a specified direction, the retraction is
\[\operatorname{retr}_p = Ο_p \circ \exp \circ (\mathrm{d}Ο_p^{-1})_p,\]
where $\exp$ is the group exponential (group_exp
), and $(\mathrm{d}Ο_p^{-1})_p$ is the action of the differential of inverse translation $Ο_p^{-1}$ evaluated at $p$ (see inverse_translate_diff
).
Product group
Manifolds.ProductGroup
β MethodProductGroup{π½,T} <: GroupManifold{π½,ProductManifold{T},ProductOperation}
Decorate a product manifold with a ProductOperation
.
Each submanifold must also be an AbstractGroupManifold
or a decorated instance of one. This type is mostly useful for equipping the direct product of group manifolds with an Identity
element.
Constructor
ProductGroup(manifold::ProductManifold)
Manifolds.ProductOperation
β TypeProductOperation <: AbstractGroupOperation
Direct product group operation.
Semidirect product group
Manifolds.SemidirectProductGroup
β MethodSemidirectProductGroup(N::GroupManifold, H::GroupManifold, A::AbstractGroupAction)
A group that is the semidirect product of a normal group $\mathcal{N}$ and a subgroup $\mathcal{H}$, written $\mathcal{G} = \mathcal{N} β_ΞΈ \mathcal{H}$, where $ΞΈ: \mathcal{H} Γ \mathcal{N} β \mathcal{N}$ is an automorphism action of $\mathcal{H}$ on $\mathcal{N}$. The group $\mathcal{G}$ has the composition rule
\[g \circ g' = (n, h) \circ (n', h') = (n \circ ΞΈ_h(n'), h \circ h')\]
and the inverse
\[g^{-1} = (n, h)^{-1} = (ΞΈ_{h^{-1}}(n^{-1}), h^{-1}).\]
Manifolds.SemidirectProductOperation
β TypeSemidirectProductOperation(action::AbstractGroupAction)
Group operation of a semidirect product group. The operation consists of the operation opN
on a normal subgroup N
, the operation opH
on a subgroup H
, and an automorphism action
of elements of H
on N
. Only the action is stored.
Circle group
Manifolds.CircleGroup
β TypeCircleGroup <: GroupManifold{Circle{β},MultiplicationOperation}
The circle group is the complex circle (Circle(β)
) equipped with the group operation of complex multiplication (MultiplicationOperation
).
General linear group
Manifolds.GeneralLinear
β TypeGeneralLinear{n,π½} <:
AbstractGroupManifold{π½,MultiplicationOperation,DefaultEmbeddingType}
The general linear group, that is, the group of all invertible matrices in $π½^{nΓn}$.
The default metric is the left-$\mathrm{GL}(n)$-right-$\mathrm{O}(n)$-invariant metric whose inner product is
\[β¨X_p,Y_pβ©_p = β¨p^{-1}X_p,p^{-1}Y_pβ©_\mathrm{F} = β¨X_e, Y_eβ©_\mathrm{F},\]
where $X_p, Y_p β T_p \mathrm{GL}(n, π½)$, $X_e = p^{-1}X_p β π€π©(n) = T_e \mathrm{GL}(n, π½) = π½^{nΓn}$ is the corresponding vector in the Lie algebra, and $β¨β ,β β©_\mathrm{F}$ denotes the Frobenius inner product.
By default, tangent vectors $X_p$ are represented with their corresponding Lie algebra vectors $X_e = p^{-1}X_p$.
Base.exp
β Methodexp(G::GeneralLinear, p, X)
Compute the exponential map on the GeneralLinear
group.
The exponential map is
\[\exp_p \colon X β¦ p \operatorname{Exp}(X^\mathrm{H}) \operatorname{Exp}(X - X^\mathrm{H}),\]
where $\operatorname{Exp}(β )$ denotes the matrix exponential, and $β ^\mathrm{H}$ is the conjugate transpose. [AndruchowLarotondaRechtVarela2014][MartinNeff2016]
Base.log
β Methodlog(G::GeneralLinear, p, q)
Compute the logarithmic map on the GeneralLinear(n)
group.
The algorithm proceeds in two stages. First, the point $r = p^{-1} q$ is projected to the nearest element (under the Frobenius norm) of the direct product subgroup $\mathrm{O}(n) Γ S^+$, whose logarithmic map is exactly computed using the matrix logarithm. This initial tangent vector is then refined using the NLsolveInverseRetraction
.
For GeneralLinear(n, β)
, the logarithmic map is instead computed on the realified supergroup GeneralLinear(2n)
and the resulting tangent vector is then complexified.
Note that this implementation is experimental.
Special linear group
Manifolds.SpecialLinear
β TypeSpecialLinear{n,π½} <:
AbstractGroupManifold{π½,MultiplicationOperation,DefaultEmbeddingType}
The special linear group $\mathrm{SL}(n,π½)$ that is, the group of all invertible matrices with unit determinant in $π½^{nΓn}$.
The Lie algebra $π°π©(n, π½) = T_e \mathrm{SL}(n,π½)$ is the set of all matrices in $π½^{nΓn}$ with trace of zero. By default, tangent vectors $X_p β T_p \mathrm{SL}(n,π½)$ for $p β \mathrm{SL}(n,π½)$ are represented with their corresponding Lie algebra vector $X_e = p^{-1}X_p β π°π©(n, π½)$.
The default metric is the same left-$\mathrm{GL}(n)$-right-$\mathrm{O}(n)$-invariant metric used for GeneralLinear(n, π½)
. The resulting geodesic on $\mathrm{GL}(n,π½)$ emanating from an element of $\mathrm{SL}(n,π½)$ in the direction of an element of $π°π©(n, π½)$ is a closed subgroup of $\mathrm{SL}(n,π½)$. As a result, most metric functions forward to GeneralLinear
.
ManifoldsBase.project
β Methodproject(G::SpecialLinear, p, X)
Orthogonally project $X β π½^{n Γ n}$ onto the tangent space of $p$ to the SpecialLinear
$G = \mathrm{SL}(n, π½)$. The formula reads
\[\operatorname{proj}_{p} = (\mathrm{d}L_p)_e β \operatorname{proj}_{π°π©(n, π½)} β (\mathrm{d}L_p^{-1})_p \colon X β¦ X - \frac{\operatorname{tr}(X)}{n} I,\]
where the last expression uses the tangent space representation as the Lie algebra.
ManifoldsBase.project
β Methodproject(G::SpecialLinear, p)
Project $p β \mathrm{GL}(n, π½)$ to the SpecialLinear
group $G=\mathrm{SL}(n, π½)$.
Given the singular value decomposition of $p$, written $p = U S V^\mathrm{H}$, the formula for the projection is
\[\operatorname{proj}_{\mathrm{SL}(n, π½)}(p) = U S D V^\mathrm{H},\]
where
\[D_{ij} = Ξ΄_{ij} \begin{cases} 1 & \text{ if } i β n \\ \det(p)^{-1} & \text{ if } i = n \end{cases}.\]
Special orthogonal group
Manifolds.SpecialOrthogonal
β TypeSpecialOrthogonal{n} <: GroupManifold{β,Rotations{n},MultiplicationOperation}
Special orthogonal group $\mathrm{SO}(n)$ represented by rotation matrices.
Constructor
SpecialOrthogonal(n)
Translation group
Manifolds.TranslationGroup
β TypeTranslationGroup{T<:Tuple,π½} <: GroupManifold{Euclidean{T,π½},AdditionOperation}
Translation group $\mathrm{T}(n)$ represented by translation arrays.
Constructor
TranslationGroup(nβ,...,nα΅’; field = π½)
Generate the translation group on $π½^{nβ,β¦,nα΅’}$ = Euclidean(nβ,...,nα΅’; field = π½)
, which is isomorphic to the group itself.
Special Euclidean group
Manifolds.SpecialEuclidean
β TypeSpecialEuclidean(n)
Special Euclidean group $\mathrm{SE}(n)$, the group of rigid motions.
$\mathrm{SE}(n)$ is the semidirect product of the TranslationGroup
on $β^n$ and SpecialOrthogonal(n)
\[\mathrm{SE}(n) β \mathrm{T}(n) β_ΞΈ \mathrm{SO}(n),\]
where $ΞΈ$ is the canonical action of $\mathrm{SO}(n)$ on $\mathrm{T}(n)$ by vector rotation.
This constructor is equivalent to calling
Tn = TranslationGroup(n)
SOn = SpecialOrthogonal(n)
SemidirectProductGroup(Tn, SOn, RotationAction(Tn, SOn))
Points on $\mathrm{SE}(n)$ may be represented as points on the underlying product manifold $\mathrm{T}(n) Γ \mathrm{SO}(n)$. For group-specific functions, they may also be represented as affine matrices with size (n + 1, n + 1)
(see affine_matrix
), for which the group operation is MultiplicationOperation
.
Manifolds.affine_matrix
β Methodaffine_matrix(G::SpecialEuclidean, p) -> AbstractMatrix
Represent the point $p β \mathrm{SE}(n)$ as an affine matrix. For $p = (t, R) β \mathrm{SE}(n)$, where $t β \mathrm{T}(n), R β \mathrm{SO}(n)$, the affine representation is the $n + 1 Γ n + 1$ matrix
\[\begin{pmatrix} R & t \\ 0^\mathrm{T} & 1 \end{pmatrix}.\]
See also screw_matrix
for matrix representations of the Lie algebra.
Manifolds.group_exp
β Methodgroup_exp(G::SpecialEuclidean{2}, X)
Compute the group exponential of $X = (b, Ξ©) β π°π’(2)$, where $b β π±(2)$ and $Ξ© β π°π¬(2)$:
\[\exp X = (t, R) = (U(ΞΈ) b, \exp Ξ©),\]
where $t β \mathrm{T}(2)$, $R = \exp Ξ©$ is the group exponential on $\mathrm{SO}(2)$,
\[U(ΞΈ) = \frac{\sin ΞΈ}{ΞΈ} I_2 + \frac{1 - \cos ΞΈ}{ΞΈ^2} Ξ©,\]
and $ΞΈ = \frac{1}{\sqrt{2}} \lVert Ξ© \rVert_e$ (see norm
) is the angle of the rotation.
Manifolds.group_exp
β Methodgroup_exp(G::SpecialEuclidean{3}, X)
Compute the group exponential of $X = (b, Ξ©) β π°π’(3)$, where $b β π±(3)$ and $Ξ© β π°π¬(3)$:
\[\exp X = (t, R) = (U(ΞΈ) b, \exp Ξ©),\]
where $t β \mathrm{T}(3)$, $R = \exp Ξ©$ is the group exponential on $\mathrm{SO}(3)$,
\[U(ΞΈ) = I_3 + \frac{1 - \cos ΞΈ}{ΞΈ^2} Ξ© + \frac{ΞΈ - \sin ΞΈ}{ΞΈ^3} Ξ©^2,\]
and $ΞΈ = \frac{1}{\sqrt{2}} \lVert Ξ© \rVert_e$ (see norm
) is the angle of the rotation.
Manifolds.group_exp
β Methodgroup_exp(G::SpecialEuclidean{n}, X)
Compute the group exponential of $X = (b, Ξ©) β π°π’(n)$, where $b β π±(n)$ and $Ξ© β π°π¬(n)$:
\[\exp X = (t, R),\]
where $t β \mathrm{T}(n)$ and $R = \exp Ξ©$ is the group exponential on $\mathrm{SO}(n)$.
In the screw_matrix
representation, the group exponential is the matrix exponential (see group_exp
).
Manifolds.group_log
β Methodgroup_log(G::SpecialEuclidean{2}, p)
Compute the group logarithm of $p = (t, R) β \mathrm{SE}(2)$, where $t β \mathrm{T}(2)$ and $R β \mathrm{SO}(2)$:
\[\log p = (b, Ξ©) = (U(ΞΈ)^{-1} t, \log R),\]
where $b β π±(2)$, $Ξ© = \log R β π°π¬(2)$ is the group logarithm on $\mathrm{SO}(2)$,
\[U(ΞΈ) = \frac{\sin ΞΈ}{ΞΈ} I_2 + \frac{1 - \cos ΞΈ}{ΞΈ^2} Ξ©,\]
and $ΞΈ = \frac{1}{\sqrt{2}} \lVert Ξ© \rVert_e$ (see norm
) is the angle of the rotation.
Manifolds.group_log
β Methodgroup_log(G::SpecialEuclidean{3}, p)
Compute the group logarithm of $p = (t, R) β \mathrm{SE}(3)$, where $t β \mathrm{T}(3)$ and $R β \mathrm{SO}(3)$:
\[\log p = (b, Ξ©) = (U(ΞΈ)^{-1} t, \log R),\]
where $b β π±(3)$, $Ξ© = \log R β π°π¬(3)$ is the group logarithm on $\mathrm{SO}(3)$,
\[U(ΞΈ) = I_3 + \frac{1 - \cos ΞΈ}{ΞΈ^2} Ξ© + \frac{ΞΈ - \sin ΞΈ}{ΞΈ^3} Ξ©^2,\]
and $ΞΈ = \frac{1}{\sqrt{2}} \lVert Ξ© \rVert_e$ (see norm
) is the angle of the rotation.
Manifolds.group_log
β Methodgroup_log(G::SpecialEuclidean{n}, p) where {n}
Compute the group logarithm of $p = (t, R) β \mathrm{SE}(n)$, where $t β \mathrm{T}(n)$ and $R β \mathrm{SO}(n)$:
\[\log p = (b, Ξ©),\]
where $b β π±(n)$ and $Ξ© = \log R β π°π¬(n)$ is the group logarithm on $\mathrm{SO}(n)$.
In the affine_matrix
representation, the group logarithm is the matrix logarithm (see group_log
):
Manifolds.screw_matrix
β Methodscrew_matrix(G::SpecialEuclidean, X) -> AbstractMatrix
Represent the Lie algebra element $X β π°π’(n) = T_e \mathrm{SE}(n)$ as a screw matrix. For $X = (b, Ξ©) β π°π’(n)$, where $Ξ© β π°π¬(n) = T_e \mathrm{SO}(n)$, the screw representation is the $n + 1 Γ n + 1$ matrix
\[\begin{pmatrix} Ξ© & b \\ 0^\mathrm{T} & 0 \end{pmatrix}.\]
See also affine_matrix
for matrix representations of the Lie group.
Group actions
Manifolds.AbstractGroupAction
β TypeAbstractGroupAction
An abstract group action on a manifold.
Manifolds.apply!
β Methodapply!(A::AbstractGroupAction, q, a, p)
Apply action a
to the point p
with the rule specified by A
. The result is saved in q
.
Manifolds.apply
β Methodapply(A::AbstractGroupAction, a, p)
Apply action a
to the point p
using map $Ο_a$, specified by A
. Unless otherwise specified, the right action is defined in terms of the left action:
\[\mathrm{R}_a = \mathrm{L}_{a^{-1}}\]
Manifolds.apply_diff
β Methodapply_diff(A::AbstractGroupAction, a, p, X)
For group point $p β \mathcal M$ and tangent vector $X β T_p \mathcal M$, compute the action on $X$ of the differential of the action of $a β \mathcal{G}$, specified by rule A
. Written as $(\mathrm{d}Ο_a)_p$, with the specified left or right convention, the differential transports vectors
\[(\mathrm{d}Ο_a)_p : T_p \mathcal M β T_{Ο_a p} \mathcal M\]
Manifolds.base_group
β Methodbase_group(A::AbstractGroupAction)
The group that acts in action A
.
Manifolds.center_of_orbit
β Functioncenter_of_orbit(
A::AbstractGroupAction,
pts,
p,
mean_method::AbstractEstimationMethod = GradientDescentEstimation(),
)
Calculate an action element $a$ of action A
that is the mean element of the orbit of p
with respect to given set of points pts
. The mean
is calculated using the method mean_method
.
The orbit of $p$ with respect to the action of a group $\mathcal{G}$ is the set
\[O = \{ Ο_a p : a β \mathcal{G} \}.\]
This function is useful for computing means on quotients of manifolds by a Lie group action.
Manifolds.direction
β Methoddirection(::AbstractGroupAction{AD}) -> AD
Get the direction of the action
Manifolds.g_manifold
β Methodg_manifold(A::AbstractGroupAction)
The manifold the action A
acts upon.
Manifolds.inverse_apply!
β Methodinverse_apply!(A::AbstractGroupAction, q, a, p)
Apply inverse of action a
to the point p
with the rule specified by A
. The result is saved in q
.
Manifolds.inverse_apply
β Methodinverse_apply(A::AbstractGroupAction, a, p)
Apply inverse of action a
to the point p
. The action is specified by A
.
Manifolds.inverse_apply_diff
β Methodinverse_apply_diff(A::AbstractGroupAction, a, p, X)
For group point $p β \mathcal M$ and tangent vector $X β T_p \mathcal M$, compute the action on $X$ of the differential of the inverse action of $a β \mathcal{G}$, specified by rule A
. Written as $(\mathrm{d}Ο_a^{-1})_p$, with the specified left or right convention, the differential transports vectors
\[(\mathrm{d}Ο_a^{-1})_p : T_p \mathcal M β T_{Ο_a^{-1} p} \mathcal M\]
Manifolds.optimal_alignment!
β Methodoptimal_alignment!(A::AbstractGroupAction, x, p, q)
Calculate an action element of action A
that acts upon p
to produce the element closest to q
. The result is written to x
.
Manifolds.optimal_alignment
β Methodoptimal_alignment(A::AbstractGroupAction, p, q)
Calculate an action element $a$ of action A
that acts upon p
to produce the element closest to q
in the metric of the G-manifold:
\[\arg\min_{a β \mathcal{G}} d_{\mathcal M}(Ο_a p, q)\]
where $\mathcal{G}$ is the group that acts on the G-manifold $\mathcal M$.
Group operation action
Manifolds.GroupOperationAction
β TypeGroupOperationAction(group::AbstractGroupManifold, AD::ActionDirection = LeftAction())
Action of a group upon itself via left or right translation.
Rotation action
Manifolds.RotationAction
β TypeRotationAction(
M::Manifold,
SOn::SpecialOrthogonal,
AD::ActionDirection = LeftAction(),
)
Space of actions of the SpecialOrthogonal
group $\mathrm{SO}(n)$ on a Euclidean-like manifold M
of dimension n
.
Translation action
Manifolds.TranslationAction
β TypeTranslationAction(
M::Manifold,
Rn::TranslationGroup,
AD::ActionDirection = LeftAction(),
)
Space of actions of the TranslationGroup
$\mathrm{T}(n)$ on a Euclidean-like manifold M
.
The left and right actions are equivalent.
Invariant metrics
Manifolds.InvariantMetric
β TypeInvariantMetric{G<:Metric,D<:ActionDirection} <: Metric
Extend a metric on the Lie algebra of an AbstractGroupManifold
to the whole group via translation in the specified direction.
Given a group $\mathcal{G}$ and a left- or right group translation map $Ο$ on the group, a metric $g$ is $Ο$-invariant if it has the inner product
\[g_p(X, Y) = g_{Ο_q p}((\mathrm{d}Ο_q)_p X, (\mathrm{d}Ο_q)_p Y),\]
for all $p,q β \mathcal{G}$ and $X,Y β T_p \mathcal{G}$, where $(\mathrm{d}Ο_q)_p$ is the differential of translation by $q$ evaluated at $p$ (see translate_diff
).
InvariantMetric
constructs an (assumed) $Ο$-invariant metric by extending the inner product of a metric $h_e$ on the Lie algebra to the whole group:
\[g_p(X, Y) = h_e((\mathrm{d}Ο_p^{-1})_p X, (\mathrm{d}Ο_p^{-1})_p Y).\]
The invariance condition is not checked and must be verified for the entire group. To verify the condition for a set of points numerically, use has_approx_invariant_metric
.
The convenient aliases LeftInvariantMetric
and RightInvariantMetric
are provided.
Constructor
InvariantMetric(metric::Metric, conv::ActionDirection = LeftAction())
Manifolds.LeftInvariantMetric
β MethodLeftInvariantMetric(metric::Metric)
Alias for a left-InvariantMetric
.
Manifolds.RightInvariantMetric
β MethodRightInvariantMetric(metric::Metric)
Alias for a right-InvariantMetric
.
Manifolds.biinvariant_metric_dispatch
β Methodbiinvariant_metric_dispatch(G::AbstractGroupManifold) -> Val
Return Val(true)
if the metric on the manifold is bi-invariant, that is, if the metric is both left- and right-invariant (see invariant_metric_dispatch
).
Manifolds.has_approx_invariant_metric
β Methodhas_approx_invariant_metric(
G::AbstractGroupManifold,
p,
X,
Y,
qs::AbstractVector,
conv::ActionDirection = LeftAction();
kwargs...,
) -> Bool
Check whether the metric on the group $\mathcal{G}$ is (approximately) invariant using a set of predefined points. Namely, for $p β \mathcal{G}$, $X,Y β T_p \mathcal{G}$, a metric $g$, and a translation map $Ο_q$ in the specified direction, check for each $q β \mathcal{G}$ that the following condition holds:
\[g_p(X, Y) β g_{Ο_q p}((\mathrm{d}Ο_q)_p X, (\mathrm{d}Ο_q)_p Y).\]
This is necessary but not sufficient for invariance.
Optionally, kwargs
passed to isapprox
may be provided.
Manifolds.invariant_metric_dispatch
β Methodinvariant_metric_dispatch(G::AbstractGroupManifold, conv::ActionDirection) -> Val
Return Val(true)
if the metric on the group $\mathcal{G}$ is invariant under translations by the specified direction, that is, given a group $\mathcal{G}$, a left- or right group translation map $Ο$, and a metric $g_e$ on the Lie algebra, a $Ο$-invariant metric at any point $p β \mathcal{G}$ is defined as a metric with the inner product
\[g_p(X, Y) = g_{Ο_q p}((\mathrm{d}Ο_q)_p X, (\mathrm{d}Ο_q)_p Y),\]
for $X,Y β T_q \mathcal{G}$ and all $q β \mathcal{G}$, where $(\mathrm{d}Ο_q)_p$ is the differential of translation by $q$ evaluated at $p$ (see translate_diff
).
- AndruchowLarotondaRechtVarela2014
Andruchow E., Larotonda G., Recht L., and Varela A.: βThe left invariant metric in the general linear groupβ, Journal of Geometry and Physics 86, pp. 241-257, 2014. doi: 10.1016/j.geomphys.2014.08.009, arXiv: 1109.0520v1.
- MartinNeff2016
Martin, R. J. and Neff, P.: βMinimal geodesics on GL(n) for left-invariant, right-O(n)-invariant Riemannian metricsβ, Journal of Geometric Mechanics 8(3), pp. 323-357, 2016. doi: 10.3934/jgm.2016010, arXiv: 1409.7849v2.