An interface for Lie group operations
LieGroups.AbstractGroupOperation
β TypeAbstractGroupOperation
Represent a type of group operation for a AbstractLieGroup
$\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 an AbstractLieGroup
$\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(::AbstractLieGroup{π½,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.
- an
AdditionGroupOperation
- an
AbelianMultiplicationGroupOperation
and - a
MatrixMultiplicationGroupOperation
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}, X)
exp!(G::LieGroup{π½,AdditionGroupOperation}, g, X)
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}, g)
log!(G::LieGroup{π½,AdditionGroupOperation}, X, 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 conjugate $c_g(h) = gβhβg^{-1} = g+h-g = h$, which simplifies for AdditionGroupOperation
to $\mathrm{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 conjugate $c_g(h) = gβhβg^{-1} = g+h-g = h$, which simplifies for AdditionGroupOperation
to $\mathrm{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 $\mathrm{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 $\mathrm{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 the group operation $g+h$ with respect to the left argument g
. Here it simplifies for AdditionGroupOperation
to $\mathrm{d}Ο_h(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 the group operation $g+h$ with respect to the left argument g
. Here it simplifies for AdditionGroupOperation
to $\mathrm{d}Ο_h(g)[X] = X$.
LieGroups.diff_right_compose!
β Methoddiff_right_compose(G::LieGroup{π½,AdditionGroupOperation}, g, h, X)
diff_right_compose!(G::LieGroup{π½,AdditionGroupOperation}, Y, g, h, X)
Compute the differential of the group operation $gβh$, on an AbstractLieGroup
G
with respect to its second (right) argument h
.
Another interpretation is to consider a function where we do a fixed multiplication from the left with g
. i..e. the left group multiplication function $Ξ»_g(h) = gβh$ (where the left refers to the fixed argument $g$.).
For the AdditionGroupOperation
it reads $\mathrm{d}Ξ»_g(h)[X] = X$.
LieGroups.diff_right_compose
β Methoddiff_right_compose(G::LieGroup{π½,AdditionGroupOperation}, g, h, X)
diff_right_compose!(G::LieGroup{π½,AdditionGroupOperation}, Y, g, h, X)
Compute the differential of the group operation $gβh$, on an AbstractLieGroup
G
with respect to its second (right) argument h
.
Another interpretation is to consider a function where we do a fixed multiplication from the left with g
. i..e. the left group multiplication function $Ξ»_g(h) = gβh$ (where the left refers to the fixed argument $g$.).
For the AdditionGroupOperation
it reads $\mathrm{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}, X)
exp!(G::LieGroup{π½,AdditionGroupOperation}, g, X)
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}, g)
log!(G::LieGroup{π½,AdditionGroupOperation}, X, 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
β TypeMatrixMultiplicationGroupOperation <: AbstractMultiplicationGroupOperation
A group operation that is realised by a matrix multiplication.
Base.exp
β Methodexp(G::LieGroup{π½,<:AbstractMultiplicationGroupOperation}, X)
exp!(G::LieGroup{π½,<:AbstractMultiplicationGroupOperation}, g, X)
Compute the Lie group exponential on a LieGroup
with an AbstractMultiplicationGroupOperation
, which simplifies to the matrix exponential.
This can be computed in-place of g
.
Base.inv
β Methodinv(G::LieGroup{π½,<:AbstractMultiplicationGroupOperation}, 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{π½,<:AbstractMultiplicationGroupOperation}, g)
log!(G::LieGroup{π½,<:AbstractMultiplicationGroupOperation}, X, g)
Compute the Lie group logarithm on a LieGroup
with a concrete instance of AbstractMultiplicationGroupOperation
, 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 an LieGroup
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 conjugate $c_g(h) = gβhβg^{-1} = ghg^{-1}$, which simplifies for an AbstractMultiplicationGroupOperation
to $\mathrm{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 conjugate $c_g(h) = gβhβg^{-1} = ghg^{-1}$, which simplifies for an AbstractMultiplicationGroupOperation
to $\mathrm{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 $\mathrm{d}ΞΉ_{\mathcal G}(g)[X]$ of matrix inversion $ΞΉ_{\mathcal G}(g) := g^{-1}$ at $X β π€$ in the LieAlgebra
$π€$ of the LieGroup
G
.
The (classical) differential $\mathrm{D}ΞΉ_{\mathcal G}(g): T_g\mathcal G β T_{g^{-1}}\mathcal G$ reads
\[ \mathrm{D}ΞΉ_{\mathcal G}(g)[W] = -g^{-1}Wg^{-1} = -Xg^{-1} = -g^{-1}(gXg^{-1}) = -g^{-1}\mathrm{Ad}(g)[X] = V β T_{g^{-1}}\mathcal G,\]
see e.g. [Gil08]. To bring this back to the Lie algebra, we Write $V = g^{-1}Y β T_{g^{-1}}\mathcal G$ for some $Y β π€$ and obtain
\[ \mathrm{d} ΞΉ_{\mathcal G}(g)[X] = -\mathrm{Ad}(g)[X] β π€,\]
where we use $\mathrm{d}$ to denote the differential in the Lie algebra.
LieGroups.diff_inv
β Methoddiff_inv(G::LieGroup{π½, <:AbstractMultiplicationGroupOperation}, g, X)
diff_inv!(G::LieGroup{π½, <:AbstractMultiplicationGroupOperation}, Y, g, X)
Compute the value of differential $\mathrm{d}ΞΉ_{\mathcal G}(g)[X]$ of matrix inversion $ΞΉ_{\mathcal G}(g) := g^{-1}$ at $X β π€$ in the LieAlgebra
$π€$ of the LieGroup
G
.
The (classical) differential $\mathrm{D}ΞΉ_{\mathcal G}(g): T_g\mathcal G β T_{g^{-1}}\mathcal G$ reads
\[ \mathrm{D}ΞΉ_{\mathcal G}(g)[W] = -g^{-1}Wg^{-1} = -Xg^{-1} = -g^{-1}(gXg^{-1}) = -g^{-1}\mathrm{Ad}(g)[X] = V β T_{g^{-1}}\mathcal G,\]
see e.g. [Gil08]. To bring this back to the Lie algebra, we Write $V = g^{-1}Y β T_{g^{-1}}\mathcal G$ for some $Y β π€$ and obtain
\[ \mathrm{d} ΞΉ_{\mathcal G}(g)[X] = -\mathrm{Ad}(g)[X] β π€,\]
where we use $\mathrm{d}$ to denote the differential in the Lie algebra.
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 group operation $gβh$, on an AbstractLieGroup
G
with respect to its first (left) argument g
.
Another interpretation is to consider a function where we do a fixed multiplication from the right with h
. i..e. the right group multiplication function $Ο_h(g) = gβh$.
The differential simplifies for an AbstractMultiplicationGroupOperation
to
\[\mathrm{d} Ο_h(g)[X] = h^{-1}Xh = \mathrm{Ad}(h^{-1})[X] β π€,\]
where $\mathrm{Ad}$ denotes the adjoint
.
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 group operation $gβh$, on an AbstractLieGroup
G
with respect to its first (left) argument g
.
Another interpretation is to consider a function where we do a fixed multiplication from the right with h
. i..e. the right group multiplication function $Ο_h(g) = gβh$.
The differential simplifies for an AbstractMultiplicationGroupOperation
to
\[\mathrm{d} Ο_h(g)[X] = h^{-1}Xh = \mathrm{Ad}(h^{-1})[X] β π€,\]
where $\mathrm{Ad}$ denotes the adjoint
.
LieGroups.diff_right_compose!
β Methoddiff_right_compose(G::LieGroup{π½,<:AbstractMultiplicationGroupOperation}, g, h, X)
diff_right_compose!(G::LieGroup{π½,<:AbstractMultiplicationGroupOperation}, Y, g, h, X)
Compute the differential of the group operation $gβh$, on an AbstractLieGroup
G
with respect to its second (right) argument h
.
Another interpretation is to consider a function where we do a fixed multiplication from the left with g
. i..e. the left group multiplication function $Ξ»_g(h) = gβh$.
It reads for an AbstractMultiplicationGroupOperation
$\mathrm{d}Ξ»_g(h)[X] = X$.
LieGroups.diff_right_compose
β Methoddiff_right_compose(G::LieGroup{π½,<:AbstractMultiplicationGroupOperation}, g, h, X)
diff_right_compose!(G::LieGroup{π½,<:AbstractMultiplicationGroupOperation}, Y, g, h, X)
Compute the differential of the group operation $gβh$, on an AbstractLieGroup
G
with respect to its second (right) argument h
.
Another interpretation is to consider a function where we do a fixed multiplication from the left with g
. i..e. the left group multiplication function $Ξ»_g(h) = gβh$.
It reads for an AbstractMultiplicationGroupOperation
$\mathrm{d}Ξ»_g(h)[X] = X$.
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{π½,<:AbstractMultiplicationGroupOperation}, 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(::LieAlgebra{π½,MatrixMultiplicationGroupOperation}, X, Y)
lie_bracket!(::LieAlgebra{π½,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(::LieAlgebra{π½,MatrixMultiplicationGroupOperation}, X, Y)
lie_bracket!(::LieAlgebra{π½,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 an LieGroup
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{π½,<:AbstractMultiplicationGroupOperation}, X)
exp!(G::LieGroup{π½,<:AbstractMultiplicationGroupOperation}, g, X)
Compute the Lie group exponential on a LieGroup
with an AbstractMultiplicationGroupOperation
, which simplifies to the matrix exponential.
This can be computed in-place of g
.
ManifoldsBase.log!
β Methodlog(G::LieGroup{π½,<:AbstractMultiplicationGroupOperation}, g)
log!(G::LieGroup{π½,<:AbstractMultiplicationGroupOperation}, X, g)
Compute the Lie group logarithm on a LieGroup
with a concrete instance of AbstractMultiplicationGroupOperation
, which simplifies to the (matrix) logarithm.
This can be computed in-place of X
.
Abelian multiplication group operation
Since the commutativity of some Lie groups leads to a significant simplification of computations on those groups, the abelian multiplication group operation
optimizes these cases. Additionally, it provides an interface for the abelian Lie groups. Some of these can are represented by isbits
-types, which don't have mutating variants of the functions.
LieGroups.AbelianMultiplicationGroupOperation
β TypeAbelianMultiplicationGroupOperation <: AbstractMultiplicationGroupOperation
A group operation that is realised by an abelian multiplication.
Base.exp
β Methodexp(G::LieGroup{π½,<:AbelianMultiplicationGroupOperation}, X)
exp(G::LieGroup{π½,<:AbelianMultiplicationGroupOperation}, g, X)
exp!(G::LieGroup{π½,<:AbelianMultiplicationGroupOperation}, h, X)
exp!(G::LieGroup{π½,<:AbelianMultiplicationGroupOperation}, h, g, X)
Compute the Lie group exponential on a LieGroup
at a point g
or the Identity
with an AbelianMultiplicationGroupOperation
.
Due to differences in the representation of some abelian Lie groups, this method wraps a concrete implementation of a specific abelian LieGroup with inputs of type AbstractArray{<:Any,0}
and supports in-place computation.
This can be computed in-place of h
if h
is mutable
.
Base.inv
β Methodinv(G::LieGroup{π½,<:AbstractMultiplicationGroupOperation}, g)
inv!(G::LieGroup{π½,<:AbstractMultiplicationGroupOperation}, h, g)
Compute the inverse group element $g^{-1}$, which for the AbelianMultiplicationGroupOperation
simplifies for a scalar input to the ordinary scalar inverse $g^{-1}$.
Due to differences in the representation of some abelian Lie groups, this method wraps a concrete implementation of a specific abelian LieGroup with inputs of type AbstractArray{<:Any,0}
and supports in-place computation.
This can be computed in-place of h
if h
is mutable
.
Base.log
β Methodlog(G::LieGroup{π½,<:AbelianMultiplicationGroupOperation}, h)
log(G::LieGroup{π½,<:AbelianMultiplicationGroupOperation}, g, h)
log!(G::LieGroup{π½,<:AbeliantMultiplicationGroupOperation}, X, g)
log!(G::LieGroup{π½,<:AbeliantMultiplicationGroupOperation}, X, g, h)
Compute the Lie group logarithm on a LieGroup
at a point g
or the Identity
with a concrete instance of AbelianMultiplicationGroupOperation
.
Due to differences in the representation of some abelian Lie groups, this method wraps a concrete implementation of a specific abelian LieGroup with inputs of type AbstractArray{<:Any,0}
and supports in-place computation.
This can be computed in-place of X
if X
is mutable
.
LieGroups.diff_conjugate!
β Methoddiff_conjugate(G::LieGroup{π½,<:AbelianMultiplicationGroupOperation}, g, h, X)
diff_conjugate!(G::LieGroup{π½,<:AbelianMultiplicationGroupOperation}, Y, g, h, X)
Compute the differential of the conjugate $c_g(h) = gβhβg^{-1} = ghg^{-1}$, which simplifies for an AbelianMultiplicationGroupOperation
to $\mathrm{d}(c_g(h))[X] = X$.
This can be computed in-place of Y
.
LieGroups.diff_conjugate
β Methoddiff_conjugate(G::LieGroup{π½,<:AbelianMultiplicationGroupOperation}, g, h, X)
diff_conjugate!(G::LieGroup{π½,<:AbelianMultiplicationGroupOperation}, Y, g, h, X)
Compute the differential of the conjugate $c_g(h) = gβhβg^{-1} = ghg^{-1}$, which simplifies for an AbelianMultiplicationGroupOperation
to $\mathrm{d}(c_g(h))[X] = X$.
This can be computed in-place of Y
.
LieGroups.diff_inv!
β Methoddiff_inv(G::LieGroup{π½,<:AbelianMultiplicationGroupOperation}, g, X)
diff_inv!(G::LieGroup{π½,<:AbelianMultiplicationGroupOperation}, Y, g, X)
Compute the value of the differential $\mathrm{d}ΞΉ_{\mathcal G}(g)[X]$ of the inversion $ΞΉ_{\mathcal G}(g) := g^{-1}$ at $X β π€$ in the LieAlgebra
$π€$ of the LieGroup
G
.
In the Abelian case, the computation simplifies to
\[\mathrm{d}ΞΉ_{\mathcal G}(g)[X] = -gXg^{-1} = -X.\]
This can be computed in-place of Y
if Y
is mutable
.
LieGroups.diff_left_compose!
β Methoddiff_left_compose(G::LieGroup{π½,<:AbelianMultiplicationGroupOperation}, g, h, X)
diff_left_compose!(G::LieGroup{π½,<:AbelianMultiplicationGroupOperation}, Y, g, h, X)
Compute the differential of the group operation $gβh$, on an AbstractLieGroup
G
with respect to its first (left) argument g
.
Another interpretation is to consider a function where we do a fixed multiplication from the right with h
. i..e. the right group multiplication function $Ο_h(g) = gβh$.
The differential simplifies for an AbelianMultiplicationGroupOperation
to the identity, i.e. $\mathrm{d}Ο_h(g)[X] = X$.
This can be computed in-place of Y
if Y
is mutable
.
LieGroups.diff_left_compose
β Methoddiff_left_compose(G::LieGroup{π½,<:AbelianMultiplicationGroupOperation}, g, h, X)
diff_left_compose!(G::LieGroup{π½,<:AbelianMultiplicationGroupOperation}, Y, g, h, X)
Compute the differential of the group operation $gβh$, on an AbstractLieGroup
G
with respect to its first (left) argument g
.
Another interpretation is to consider a function where we do a fixed multiplication from the right with h
. i..e. the right group multiplication function $Ο_h(g) = gβh$.
The differential simplifies for an AbelianMultiplicationGroupOperation
to the identity, i.e. $\mathrm{d}Ο_h(g)[X] = X$.
This can be computed in-place of Y
if Y
is mutable
.
LieGroups.diff_right_compose!
β Methoddiff_right_compose(G::LieGroup{π½,<:AbelianMultiplicationGroupOperation}, g, h, X)
diff_right_compose!(G::LieGroup{π½,<:AbelianMultiplicationGroupOperation}, Y, g, h, X)
Compute the differential of the group operation $gβh$, on an AbstractLieGroup
G
with respect to its second (right) argument h
.
Another interpretation is to consider a function where we do a fixed multiplication from the left with g
. i..e. the left group multiplication function $Ξ»_g(h) = gβh$.
The differential simplifies for an AbelianMultiplicationGroupOperation
to the identity, i.e. $\mathrm{d}Ξ»_g(h)[X] = X$.
LieGroups.diff_right_compose
β Methoddiff_right_compose(G::LieGroup{π½,<:AbelianMultiplicationGroupOperation}, g, h, X)
diff_right_compose!(G::LieGroup{π½,<:AbelianMultiplicationGroupOperation}, Y, g, h, X)
Compute the differential of the group operation $gβh$, on an AbstractLieGroup
G
with respect to its second (right) argument h
.
Another interpretation is to consider a function where we do a fixed multiplication from the left with g
. i..e. the left group multiplication function $Ξ»_g(h) = gβh$.
The differential simplifies for an AbelianMultiplicationGroupOperation
to the identity, i.e. $\mathrm{d}Ξ»_g(h)[X] = X$.
LieGroups.identity_element!
β Methodidentity_element(G::LieGroup{π½,AbelianMultiplicationGroupOperation})
identity_element!(G::LieGroup{π½,AbelianMultiplicationGroupOperation}, e)
Return the point representation of the Identity
, which for an AbelianMultiplicationGroupOperation
is the one-element.
This can be computed in e
if e
is mutable
.
LieGroups.inv!
β Methodinv(G::LieGroup{π½,<:AbstractMultiplicationGroupOperation}, g)
inv!(G::LieGroup{π½,<:AbstractMultiplicationGroupOperation}, h, g)
Compute the inverse group element $g^{-1}$, which for the AbelianMultiplicationGroupOperation
simplifies for a scalar input to the ordinary scalar inverse $g^{-1}$.
Due to differences in the representation of some abelian Lie groups, this method wraps a concrete implementation of a specific abelian LieGroup with inputs of type AbstractArray{<:Any,0}
and supports in-place computation.
This can be computed in-place of h
if h
is mutable
.
LieGroups.lie_bracket!
β Methodlie_bracket(::LieAlgebra{π½,AbelianMultiplicationGroupOperation}, X, Y)
lie_bracket!(::LieAlgebra{π½,AbelianMultiplicationGroupOperation}, Z, X, Y)
Compute the Lie bracket $[β
,β
]: \mathfrak gΓ\mathfrak g β \mathfrak g$, which for the for the AbelianMultiplicationGroupOperation
yields the zero vector of the LieAlgebra
due to commutativity.
\[[X, Y] = XY-YX = 0\]
The computation can be done in-place of Z
if Z
is mutable
.
LieGroups.lie_bracket
β Methodlie_bracket(::LieAlgebra{π½,AbelianMultiplicationGroupOperation}, X, Y)
lie_bracket!(::LieAlgebra{π½,AbelianMultiplicationGroupOperation}, Z, X, Y)
Compute the Lie bracket $[β
,β
]: \mathfrak gΓ\mathfrak g β \mathfrak g$, which for the for the AbelianMultiplicationGroupOperation
yields the zero vector of the LieAlgebra
due to commutativity.
\[[X, Y] = XY-YX = 0\]
The computation can be done in-place of Z
if Z
is mutable
.
Manifolds.identity_element
β Methodidentity_element(G::LieGroup{π½,AbelianMultiplicationGroupOperation})
identity_element!(G::LieGroup{π½,AbelianMultiplicationGroupOperation}, e)
Return the point representation of the Identity
, which for an AbelianMultiplicationGroupOperation
is the one-element.
This can be computed in e
if e
is mutable
.
ManifoldsBase.exp!
β Methodexp(G::LieGroup{π½,<:AbelianMultiplicationGroupOperation}, X)
exp(G::LieGroup{π½,<:AbelianMultiplicationGroupOperation}, g, X)
exp!(G::LieGroup{π½,<:AbelianMultiplicationGroupOperation}, h, X)
exp!(G::LieGroup{π½,<:AbelianMultiplicationGroupOperation}, h, g, X)
Compute the Lie group exponential on a LieGroup
at a point g
or the Identity
with an AbelianMultiplicationGroupOperation
.
Due to differences in the representation of some abelian Lie groups, this method wraps a concrete implementation of a specific abelian LieGroup with inputs of type AbstractArray{<:Any,0}
and supports in-place computation.
This can be computed in-place of h
if h
is mutable
.
ManifoldsBase.log!
β Methodlog(G::LieGroup{π½,<:AbelianMultiplicationGroupOperation}, h)
log(G::LieGroup{π½,<:AbelianMultiplicationGroupOperation}, g, h)
log!(G::LieGroup{π½,<:AbeliantMultiplicationGroupOperation}, X, g)
log!(G::LieGroup{π½,<:AbeliantMultiplicationGroupOperation}, X, g, h)
Compute the Lie group logarithm on a LieGroup
at a point g
or the Identity
with a concrete instance of AbelianMultiplicationGroupOperation
.
Due to differences in the representation of some abelian Lie groups, this method wraps a concrete implementation of a specific abelian LieGroup with inputs of type AbstractArray{<:Any,0}
and supports in-place computation.
This can be computed in-place of X
if X
is mutable
.
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.