An interface for Lie group operations
LieGroups.AbstractGroupOperation
β TypeAbstractGroupOperation
Represent a type of group operation for a LieGroup
$\mathcal G$, that is a smooth binary operation $β : \mathcal G Γ \mathcal G β \mathcal G$ on elements of a Lie group $\mathcal G$.
LieGroups.Identity
β TypeIdentity{O<:AbstractGroupOperation}
Represent the group identity element $e β \mathcal G$ on a LieGroup
$\mathcal G$ with AbstractGroupOperation
of type O
.
Similar to the philosophy that points are agnostic of their group at hand, the identity does not store the group $\mathcal G$ it belongs to. However it depends on the type of the AbstractGroupOperation
used.
See also identity_element
on how to obtain the corresponding AbstractManifoldPoint
or array representation.
Constructors
Identity(::LieGroup{π½,O}) where {π½,O<:AbstractGroupOperation}
Identity(o::AbstractGroupOperation)
Identity(::Type{AbstractGroupOperation})
create the identity of the corresponding subtype O<:
AbstractGroupOperation
You can combine some specific group operations with one of several manifolds to form a Lie group. You can still define the corresponding functions generically for all groups with this group operation regardless of the manifold. The following sections collect these.
Additive group operation
LieGroups.AdditionGroupOperation
β TypeAdditionGroupOperation <: AbstractGroupOperation
A group operation that is realised introducing defaults that fall back to +
and -
being overloaded, for example _compose(G::LieGroup{π½,AdditionGroupOperation}, a, b) = a + b
Base.exp
β Methodexp(G::LieGroup{π½,AdditionGroupOperation}, e::Identity{AdditionGroupOperation}, X, t::Number=1)
exp!(G::LieGroup{π½,AdditionGroupOperation}, g, e::Identity{AdditionGroupOperation}, X, t::Number=1)
Compute the Lie group exponential on a LieGroup
with an AdditionGroupOperation
. This can be computed in-place of g
.
Since e
is just the zero-element with respect to the corresponding +
, the formula reads $g=0+X=X$.
Base.inv
β Methodinv(G::LieGroup{π½,AdditionGroupOperation}, g)
inv!(G::LieGroup{π½,AdditionGroupOperation}, h, g)
Compute the inverse group element $g^{-1}$, which for the AdditionGroupOperation
simplifies to $-g$. This can be done in-place of h
.
Base.log
β Methodlog(G::LieGroup{π½,AdditionGroupOperation}, e::Identity{AdditionGroupOperation}, g)
log!(G::LieGroup{π½,AdditionGroupOperation}, X, e::Identity{AdditionGroupOperation}, g)
Compute the Lie group logarithm on a LieGroup
with an AdditionGroupOperation
. This can be computed in-place of X
.
Since e
is just the zero-element with respect to the corresponding +
, the formula reads $X=g-0=g$.
LieGroups.compose!
β Methodcompose(G::LieGroup{π½,AdditionGroupOperation}, g, h)
compose!(G::LieGroup{π½,AdditionGroupOperation}, k, g, h)
Compute the group operation composition of g
and h
with respect to the AdditionGroupOperation
on G
, which falls back to calling g+h
, where +
is assumed to be overloaded accordingly.
This can be computed in-place of k
.
LieGroups.diff_conjugate!
β Methoddiff_conjugate(G::LieGroup{π½,AdditionGroupOperation}, g, h, X)
diff_conjugate!(G::LieGroup{π½,AdditionGroupOperation}, Y, g, h, X)
Compute the differential of the conjutage $c_g(h) = gβhβg^{-1} = g+h-g = h$, which simplifies for AdditionGroupOperation
to $D(c_g(h))[X] = X$.
LieGroups.diff_conjugate
β Methoddiff_conjugate(G::LieGroup{π½,AdditionGroupOperation}, g, h, X)
diff_conjugate!(G::LieGroup{π½,AdditionGroupOperation}, Y, g, h, X)
Compute the differential of the conjutage $c_g(h) = gβhβg^{-1} = g+h-g = h$, which simplifies for AdditionGroupOperation
to $D(c_g(h))[X] = X$.
LieGroups.diff_inv!
β Methoddiff_inv(G::LieGroup{π½,AdditionGroupOperation}, g, X)
diff_inv!(G::LieGroup{π½,AdditionGroupOperation}, Y, g, X)
Compute the differential of the inverse operation $ΞΉ_{\mathcal G}(g) = g^-1 = -g$, which simplifies for AdditionGroupOperation
to $DΞΉ_{\mathcal G}(g)[X] = -X$
LieGroups.diff_inv
β Methoddiff_inv(G::LieGroup{π½,AdditionGroupOperation}, g, X)
diff_inv!(G::LieGroup{π½,AdditionGroupOperation}, Y, g, X)
Compute the differential of the inverse operation $ΞΉ_{\mathcal G}(g) = g^-1 = -g$, which simplifies for AdditionGroupOperation
to $DΞΉ_{\mathcal G}(g)[X] = -X$
LieGroups.diff_left_compose!
β Methoddiff_left_compose(G::LieGroup{π½,AdditionGroupOperation}, g, h, X)
diff_left_compose!(G::LieGroup{π½,AdditionGroupOperation}, Y, g, h, X)
Compute the differential of the left group multiplication $Ξ»_g(h) = gβh$, which simplifies for AdditionGroupOperation
to $DΞ»_g(h)[X] = X$.
LieGroups.diff_left_compose
β Methoddiff_left_compose(G::LieGroup{π½,AdditionGroupOperation}, g, h, X)
diff_left_compose!(G::LieGroup{π½,AdditionGroupOperation}, Y, g, h, X)
Compute the differential of the left group multiplication $Ξ»_g(h) = gβh$, which simplifies for AdditionGroupOperation
to $DΞ»_g(h)[X] = X$.
LieGroups.diff_right_compose!
β Methoddiff_right_compose(G::LieGroup{π½,AdditionGroupOperation}, h, g, X)
diff_right_compose!(G::LieGroup{π½,AdditionGroupOperation}, Y, h, g, X)
Compute the differential of the right group multiplication $Ο_g(h) = hβg$, which simplifies for AdditionGroupOperation
to $DΟ_g(h)[X] = X$.
LieGroups.diff_right_compose
β Methoddiff_right_compose(G::LieGroup{π½,AdditionGroupOperation}, h, g, X)
diff_right_compose!(G::LieGroup{π½,AdditionGroupOperation}, Y, h, g, X)
Compute the differential of the right group multiplication $Ο_g(h) = hβg$, which simplifies for AdditionGroupOperation
to $DΟ_g(h)[X] = X$.
LieGroups.identity_element!
β Methodidentity_element(G::LieGroup{π½,AdditionGroupOperation})
identity_element!(G::LieGroup{π½,AdditionGroupOperation}, e)
Return the a point representation of the Identity
, which for the AdditionGroupOperation
is the zero element or array.
LieGroups.inv!
β Methodinv(G::LieGroup{π½,AdditionGroupOperation}, g)
inv!(G::LieGroup{π½,AdditionGroupOperation}, h, g)
Compute the inverse group element $g^{-1}$, which for the AdditionGroupOperation
simplifies to $-g$. This can be done in-place of h
.
LieGroups.lie_bracket!
β Methodlie_bracket!(π€::LieAlgebra{π½,AdditionGroupOperation}, X, Y)
lie_bracket!(π€::LieAlgebra{π½,AdditionGroupOperation}, Z, X, Y)
Compute the Lie bracket $[β
,β
]: \mathfrak gΓ\mathfrak g β \mathfrak g$, which for the for the AdditionGroupOperation
simplifies to the corresponding zero_vector
. The computation can be done in-place of Z
.
LieGroups.lie_bracket
β Methodlie_bracket!(π€::LieAlgebra{π½,AdditionGroupOperation}, X, Y)
lie_bracket!(π€::LieAlgebra{π½,AdditionGroupOperation}, Z, X, Y)
Compute the Lie bracket $[β
,β
]: \mathfrak gΓ\mathfrak g β \mathfrak g$, which for the for the AdditionGroupOperation
simplifies to the corresponding zero_vector
. The computation can be done in-place of Z
.
Manifolds.compose
β Methodcompose(G::LieGroup{π½,AdditionGroupOperation}, g, h)
compose!(G::LieGroup{π½,AdditionGroupOperation}, k, g, h)
Compute the group operation composition of g
and h
with respect to the AdditionGroupOperation
on G
, which falls back to calling g+h
, where +
is assumed to be overloaded accordingly.
This can be computed in-place of k
.
Manifolds.identity_element
β Methodidentity_element(G::LieGroup{π½,AdditionGroupOperation})
identity_element!(G::LieGroup{π½,AdditionGroupOperation}, e)
Return the a point representation of the Identity
, which for the AdditionGroupOperation
is the zero element or array.
ManifoldsBase.exp!
β Methodexp(G::LieGroup{π½,AdditionGroupOperation}, e::Identity{AdditionGroupOperation}, X, t::Number=1)
exp!(G::LieGroup{π½,AdditionGroupOperation}, g, e::Identity{AdditionGroupOperation}, X, t::Number=1)
Compute the Lie group exponential on a LieGroup
with an AdditionGroupOperation
. This can be computed in-place of g
.
Since e
is just the zero-element with respect to the corresponding +
, the formula reads $g=0+X=X$.
ManifoldsBase.log!
β Methodlog(G::LieGroup{π½,AdditionGroupOperation}, e::Identity{AdditionGroupOperation}, g)
log!(G::LieGroup{π½,AdditionGroupOperation}, X, e::Identity{AdditionGroupOperation}, g)
Compute the Lie group logarithm on a LieGroup
with an AdditionGroupOperation
. This can be computed in-place of X
.
Since e
is just the zero-element with respect to the corresponding +
, the formula reads $X=g-0=g$.
Multiplication group operation
LieGroups.AbstractMultiplicationGroupOperation
β TypeAbstractMultiplicationGroupOperation <: AbstractGroupOperation
A group operation that is realised introducing defaults that fall back to *
being overloaded, for example _compose(G::LieGroup{π½,<:AbstractMultiplicationGroupOperation}, a, b) = a * b
LieGroups.MatrixMultiplicationGroupOperation
β TypeAbstractMultiplicationGroupOperation <: AbstractMultiplicationGroupOperation
A group operation that is realised by a matrix multiplication.
Base.exp
β Methodexp(G::LieGroup{π½,MatrixMultiplicationGroupOperation}, e::Identity{MatrixMultiplicationGroupOperation}, X, t::Number=1)
exp!(G::LieGroup{π½,MatrixMultiplicationGroupOperation}, g, e::Identity{MatrixMultiplicationGroupOperation}, X, t::Number=1)
Compute the Lie group exponential on a LieGroup
with a MatrixMultiplicationGroupOperation
, which simplifies to the matrix exponential.
This can be computed in-place of g
.
Base.inv
β Methodinv(G::LieGroup{π½,<:AbstractMultiplicationGroupOperationroupOperation}, g)
inv!(G::LieGroup{π½,<:AbstractMultiplicationGroupOperation}, h, g)
Compute the inverse group element $g^{-1}$, which for an AbstractMultiplicationGroupOperation
simplifies to the multiplicative inverse $g^{-1}$. This can be done in-place of h
.
Base.log
β Methodlog(G::LieGroup{π½,MatrixMultiplicationGroupOperation}, e::Identity{MatrixMultiplicationGroupOperation}, g)
log!(G::LieGroup{π½,MatrixMultiplicationGroupOperation}, X, e::Identity{MatrixMultiplicationGroupOperation}, g)
Compute the Lie group logarithm on a LieGroup
with a MatrixMultiplicationGroupOperation
, which simplifies to the matrix logarithm.
This can be computed in-place of X
.
LieGroups.compose!
β Methodcompose(G::LieGroup{π½,<:AbstractMultiplicationGroupOperation}, g, h)
compose!(G::LieGroup{π½,<:AbstractMultiplicationGroupOperation}, k, g, h)
Compute the group operation composition of g
and h
with respect to an AbstractMultiplicationGroupOperation
on G
, which falls back to calling g*h
, where *
is assumed to be overloaded accordingly.
This can be computed in-place of k
.
LieGroups.diff_conjugate!
β Methoddiff_conjugate(G::LieGroup{π½,<:AbstractMultiplicationGroupOperation}, g, h, X)
diff_conjugate!(G::LieGroup{π½,<:AbstractMultiplicationGroupOperation}, Y, g, h, X)
Compute the differential of the conjutage $c_g(h) = gβhβg^{-1} = ghg^{-1}$, which simplifies for an AbstractMultiplicationGroupOperation
to $D(c_g(h))[X] = gXg^{-1}$.
LieGroups.diff_conjugate
β Methoddiff_conjugate(G::LieGroup{π½,<:AbstractMultiplicationGroupOperation}, g, h, X)
diff_conjugate!(G::LieGroup{π½,<:AbstractMultiplicationGroupOperation}, Y, g, h, X)
Compute the differential of the conjutage $c_g(h) = gβhβg^{-1} = ghg^{-1}$, which simplifies for an AbstractMultiplicationGroupOperation
to $D(c_g(h))[X] = gXg^{-1}$.
LieGroups.diff_inv!
β Methoddiff_inv(G::LieGroup{π½,<:AbstractMultiplicationGroupOperation}, g, X)
diff_inv!(G::LieGroup{π½,<:AbstractMultiplicationGroupOperation}, Y, g, X)
Compute the value of differential $DΞΉ_{\mathcal G}(g)[X]$ of matrix inversion $ΞΉ_{\mathcal G}(g) := g^{-1}$ at $X β π€$ in the LieAlgebra
$π€$ of the LieGroup
G
.
The formula is given by
\[DΞΉ_{\mathcal G}(g)[X] = -g^{\mathrm{T}}Xg^{-1},\]
which stems from using the differential of the inverse from [Gil08] given by $D(g^{-1})[X] = -g^{-1}Xg^{-1}$ composed with the push forward of the left composition $DΞ»_\mathrm{e}(g)[X] = gX$ mapping from the Liea algebra into the tangent space at $g$, and its adjoint $D^*Ξ»_\mathrm{e}(g)[X] = g^{\mathrm{T}}X$. Then we get $g^{\mathrm{T}}(g^{-1}(gX)g^{-1})$ which simplifies to $-g^{\mathrm{T}}Xg^{-1}$ from above.
LieGroups.diff_inv
β Methoddiff_inv(G::LieGroup{π½,<:AbstractMultiplicationGroupOperation}, g, X)
diff_inv!(G::LieGroup{π½,<:AbstractMultiplicationGroupOperation}, Y, g, X)
Compute the value of differential $DΞΉ_{\mathcal G}(g)[X]$ of matrix inversion $ΞΉ_{\mathcal G}(g) := g^{-1}$ at $X β π€$ in the LieAlgebra
$π€$ of the LieGroup
G
.
The formula is given by
\[DΞΉ_{\mathcal G}(g)[X] = -g^{\mathrm{T}}Xg^{-1},\]
which stems from using the differential of the inverse from [Gil08] given by $D(g^{-1})[X] = -g^{-1}Xg^{-1}$ composed with the push forward of the left composition $DΞ»_\mathrm{e}(g)[X] = gX$ mapping from the Liea algebra into the tangent space at $g$, and its adjoint $D^*Ξ»_\mathrm{e}(g)[X] = g^{\mathrm{T}}X$. Then we get $g^{\mathrm{T}}(g^{-1}(gX)g^{-1})$ which simplifies to $-g^{\mathrm{T}}Xg^{-1}$ from above.
LieGroups.diff_left_compose!
β Methoddiff_left_compose(G::LieGroup{π½,<:AbstractMultiplicationGroupOperation}, g, h, X)
diff_left_compose!(G::LieGroup{π½,<:AbstractMultiplicationGroupOperation}, Y, g, h, X)
Compute the differential of the left group multiplication $Ξ»_g(h) = gβh$, which simplifies for an AbstractMultiplicationGroupOperation
to $DΞ»_g(h)[X] = gX$.
LieGroups.diff_left_compose
β Methoddiff_left_compose(G::LieGroup{π½,<:AbstractMultiplicationGroupOperation}, g, h, X)
diff_left_compose!(G::LieGroup{π½,<:AbstractMultiplicationGroupOperation}, Y, g, h, X)
Compute the differential of the left group multiplication $Ξ»_g(h) = gβh$, which simplifies for an AbstractMultiplicationGroupOperation
to $DΞ»_g(h)[X] = gX$.
LieGroups.diff_right_compose!
β Methoddiff_right_compose(G::LieGroup{π½,<:AbstractMultiplicationGroupOperation}, h, g, X)
diff_right_compose!(G::LieGroup{π½,<:AbstractMultiplicationGroupOperation}, Y, h, g, X)
Compute the differential of the right group multiplication $Ο_g(h) = hβg$, which simplifies for an AbstractMultiplicationGroupOperation
to $DΟ_g(h)[X] = Xg$.
LieGroups.diff_right_compose
β Methoddiff_right_compose(G::LieGroup{π½,<:AbstractMultiplicationGroupOperation}, h, g, X)
diff_right_compose!(G::LieGroup{π½,<:AbstractMultiplicationGroupOperation}, Y, h, g, X)
Compute the differential of the right group multiplication $Ο_g(h) = hβg$, which simplifies for an AbstractMultiplicationGroupOperation
to $DΟ_g(h)[X] = Xg$.
LieGroups.identity_element!
β Methodidentity_element(G::LieGroup{π½,<:AbstractMultiplicationGroupOperation})
identity_element!(G::LieGroup{π½,<:AbstractMultiplicationGroupOperation}, e)
Return the a point representation of the Identity
, which for an AbstractMultiplicationGroupOperation
is the one-element or identity array.
LieGroups.inv!
β Methodinv(G::LieGroup{π½,<:AbstractMultiplicationGroupOperationroupOperation}, g)
inv!(G::LieGroup{π½,<:AbstractMultiplicationGroupOperation}, h, g)
Compute the inverse group element $g^{-1}$, which for an AbstractMultiplicationGroupOperation
simplifies to the multiplicative inverse $g^{-1}$. This can be done in-place of h
.
LieGroups.lie_bracket!
β Methodlie_bracket(::LieGroup{π½,MatrixMultiplicationGroupOperation}, X, Y)
lie_bracket!(::LieGroup{π½,MatrixMultiplicationGroupOperation}, Z, X, Y)
Compute the Lie bracket $[β
,β
]: \mathfrak gΓ\mathfrak g β \mathfrak g$, which for the for the MatrixMultiplicationGroupOperation
yields the commutator bracket
\[[X, Y] = XY-YX\]
The computation can be done in-place of Z
.
LieGroups.lie_bracket
β Methodlie_bracket(::LieGroup{π½,MatrixMultiplicationGroupOperation}, X, Y)
lie_bracket!(::LieGroup{π½,MatrixMultiplicationGroupOperation}, Z, X, Y)
Compute the Lie bracket $[β
,β
]: \mathfrak gΓ\mathfrak g β \mathfrak g$, which for the for the MatrixMultiplicationGroupOperation
yields the commutator bracket
\[[X, Y] = XY-YX\]
The computation can be done in-place of Z
.
Manifolds.compose
β Methodcompose(G::LieGroup{π½,<:AbstractMultiplicationGroupOperation}, g, h)
compose!(G::LieGroup{π½,<:AbstractMultiplicationGroupOperation}, k, g, h)
Compute the group operation composition of g
and h
with respect to an AbstractMultiplicationGroupOperation
on G
, which falls back to calling g*h
, where *
is assumed to be overloaded accordingly.
This can be computed in-place of k
.
Manifolds.identity_element
β Methodidentity_element(G::LieGroup{π½,<:AbstractMultiplicationGroupOperation})
identity_element!(G::LieGroup{π½,<:AbstractMultiplicationGroupOperation}, e)
Return the a point representation of the Identity
, which for an AbstractMultiplicationGroupOperation
is the one-element or identity array.
ManifoldsBase.exp!
β Methodexp(G::LieGroup{π½,MatrixMultiplicationGroupOperation}, e::Identity{MatrixMultiplicationGroupOperation}, X, t::Number=1)
exp!(G::LieGroup{π½,MatrixMultiplicationGroupOperation}, g, e::Identity{MatrixMultiplicationGroupOperation}, X, t::Number=1)
Compute the Lie group exponential on a LieGroup
with a MatrixMultiplicationGroupOperation
, which simplifies to the matrix exponential.
This can be computed in-place of g
.
ManifoldsBase.log!
β Methodlog(G::LieGroup{π½,MatrixMultiplicationGroupOperation}, e::Identity{MatrixMultiplicationGroupOperation}, g)
log!(G::LieGroup{π½,MatrixMultiplicationGroupOperation}, X, e::Identity{MatrixMultiplicationGroupOperation}, g)
Compute the Lie group logarithm on a LieGroup
with a MatrixMultiplicationGroupOperation
, which simplifies to the matrix logarithm.
This can be computed in-place of X
.
Literature
- [Gil08]
- M.Β B.Β Giles. Collected Matrix Derivative Results for Forward and Reverse Mode Algorithmic Differentiation. In: Advances in Automatic Differentiation, Lecture Notes in Computational Science and Engineering, edited by C.Β H.Β Bischof, H.Β M.Β BΓΌcker, P.Β Hovland, U.Β Naumann and J.Β Utke (Springer, Berlin, Heidelberg, 2008); pp.Β 35β44.