RKMK Numerical Integration on Product Manifolds
Lie Group × Euclidean Factors
Abstract
Many flight-dynamics and GNC state vectors naturally live on product manifolds, e.g., attitude on \(\SO(3)\) (or unit quaternions) together with translational states in \(\R^n\). Standard Runge–Kutta methods assume a vector space and can break manifold constraints (e.g. orthonormality, unit norm). Runge–Kutta–Munthe-Kaas (RKMK) methods lift the integration to the Lie algebra and update the group by an exponential (or a retraction), achieving high order while preserving the manifold structure.
These notes explain RKMK in a product-manifold setting, emphasizing the typical case \(\SO(3)\times \R^n\), and how to consistently couple the Lie-group and Euclidean factors.
Why product manifolds show up in GNC?
A common state layout is
The configuration (attitude) is not a vector: \(R\in \SO(3)\) satisfies \(R^\top R = I\) and \(\det(R)=1\). If we apply a vanilla Runge–Kutta scheme directly to a matrix parameterization (or integrate a quaternion and re-normalize), we risk:
drift from the manifold (loss of orthonormality / unit norm),
loss of accuracy order due to ad-hoc projection/normalization,
inconsistency between continuous-time model and discrete-time propagation used by an EKF (Extended Kalman Filter).
RKMK addresses this by:
performing Runge–Kutta stages in the Lie algebra (a vector space),
mapping algebra increments back to the group via \(\exp\) (or a retraction),
integrating Euclidean factors normally (addition).
Product manifolds and tangent spaces
Definition
A product manifold is \(M = M_1 \times \cdots \times M_k\) where each \(M_i\) is a manifold. A point is \(x=(x_1,\dots,x_k)\) with \(x_i\in M_i\).
Tangent space of a product
The tangent space factorizes:
So a vector field \(\dot x = F(x)\) on \(M\) splits into components
but the components can still be coupled through the shared dependence on all factors.
When factors are Lie groups
If \(G\) is a Lie group, then each tangent space \(T_g G\) can be identified with the Lie algebra \(\Lie{g} = T_e G\) via left translation:
For matrix Lie groups (like \(\SO(3)\)), \(g^{-1} = g^\top\) and \(\xi\) is a matrix in the algebra.
For a direct-product Lie group \(G = G_1 \times G_2\), the Lie algebra is the direct sum
and \(\exp_G\) acts component-wise:
In practice, most GNC states look like a Lie group factor \(G\) times Euclidean \(\R^n\) (which is itself a Lie group under addition).
Dynamics on \(G\times \R^n\)
Let \(M = G \times \R^n\), with state \(x=(g,r)\). A broad class of coupled dynamics is:
where \(\Omega(g,r)\in \Lie{g}\) is the left-trivialized “angular” rate (for \(G=\SO(3)\) this corresponds to body angular velocity), and \(f:\,G\times \R^n\to \R^n\) is the Euclidean part.
Key idea: \(\dot g\) lives on the group; \(\dot r\) lives in a vector space. RKMK integrates them together without leaving \(G\).
Retractions and the exponential map
Exponential on the group
For a Lie group \(G\), the exponential map
maps an algebra element (a tangent vector at identity) to a group element.
Given a base point \(g_n\in G\), an increment \(\eta\in \Lie{g}\) updates the state as
This is a retraction based at \(g_n\).
Euclidean factor as a trivial Lie group
On \(\R^n\), the exponential is just addition:
This matches the product-manifold view: we retract on \(G\) by \(\exp\), and on \(\R^n\) by \(+\).
From classical RK to RKMK
Classical Runge–Kutta (RK) methods are defined for ODEs in a vector space:
RKMK adapts an RK tableau \((a_{ij}, b_i, c_i)\) to Lie-group evolution by:
representing stage states as \(g_n \exp(\eta_i)\) for algebra stage variables \(\eta_i\),
evaluating the group vector field in left-trivialized form \(\Omega(\cdot)\),
correcting for the nonlinear relationship between \(\eta\) and \(g\) using \(\dexp^{-1}\).
The \(\dexp\) operator
Define \(\eta(t)\in \Lie{g}\) by writing the group trajectory as
Differentiate:
Left-trivialize at \(g(t)\):
A standard identity gives
so
This is the core: it converts the group ODE into an algebra ODE (a vector space), where we can apply RK.
RKMK on \(G\times \R^n\): coupled stage equations
Let step size be \(h\) and tableau \((a_{ij},b_i,c_i)\) have \(s\) stages. We propagate from \((g_n,r_n)\) to \((g_{n+1},r_{n+1})\).
Stage reconstruction on the product manifold
We maintain:
and define stage states
Stage derivatives
Compute:
Stage accumulation
For an explicit R-K tableau, we set
For implicit tableaus, these become coupled non-linear equations within the stages.
Step update
Finally,
Interpretation on a product manifold:
The group factor is advanced by a single exponential at the end (plus exponentials inside stages).
The Euclidean factor is advanced by the same R-K weights, but with ordinary addition.
Coupling enters only through the evaluations \(\Omega(g_i,r_i)\) and \(f(g_i,r_i)\).
Concrete special case: \(\SO(3)\times \R^n\)
SO(3) algebra and the hat operator
Identify \(\Lie{so}(3)\cong \R^3\) via the hat map:
Write \(\eta \equiv \phi\) (vector form) and \(\exp(\eta) \equiv \Exp([\phi]_\times)\).
Exponential map on SO(3)
Let \(\theta=\norm{\phi}\), \(A=[\phi]_\times\). Then Rodrigues’ formula:
with the usual smooth limits as \(\theta\to 0\) (use series to avoid division by small \(\theta\)).
Left Jacobian and \(\dexp^{-1}\) on SO(3)
For \(\SO(3)\), \(\dexp\) corresponds to the left Jacobian \(J(\phi)\):
A standard closed form is
Hence
A commonly used closed form for \(J(\phi)^{-1}\) (for \(\theta\not\approx 0\)) is
For small \(\theta\), use the series expansion
This is often the most AD-friendly route: branch on \(\theta^2\) and use series near zero.
Typical coupled state example
Let \((R, z)\in \SO(3)\times \R^n\) and define
Then in RKMK you compute stages:
with \(R_i = R_n \Exp([\phi_i]_\times)\), \(z_i = z_n + \rho_i\), and the same R-K accumulation rules.
Note \(\R^n\) is also a Lie group
\((\R^n,+)\) is a Lie group with Lie algebra \(\R^n\), exponential \(\exp(v)=v\) (identity), and group action by addition. So in principle you can treat the whole state as a Lie group element in a direct product \(G\times \R^n\).
In practice, you still keep the Euclidean part in vector form because:
its exponential and \(\dexp\) are trivial,
you avoid unnecessary machinery,
it keeps Jacobians/simple linear algebra straightforward.
RKMK on product manifolds is exactly this: nontrivial Lie factors get \(\exp\) and \(\dexp^{-1}\); Euclidean factors reduce to standard R-K.
Explicit example: RK4-RKMK on \(G\times \R^n\)
Using classical RK4 tableau, stages are explicit. A compact description:
Given \((g_n,r_n)\) and step \(h\).
Then update:
Implicit RKMK on product manifolds (stiff dynamics)
When dynamics are stiff (e.g. strong aerodynamic damping, tight actuator models, flexible modes, or coupled constraints), implicit R-K methods (Radau IIA, Gauss–Legendre) are attractive.
In implicit RKMK, the stage equations
are solved simultaneously with
This forms a nonlinear system in \(\{\eta_i,\rho_i\}_{i=1}^s\).
Newton structure on a product manifold
Your unknown vector is a stacked Euclidean vector consisting of:
Lie algebra coordinates for each \(\eta_i\) (e.g. \(\R^3\) per \(\SO(3)\) factor),
Euclidean increments \(\rho_i\in\R^n\).
The nonlinearities enter through \(\exp(\eta_i)\) and \(\dexp^{-1}_{\eta_i}\) (plus whatever nonlinearities are in \(\Omega\) and \(f\)). This is exactly where algorithmic differentiation (e.g. CppAD) is helpful.
Quaternion normalization vs. Lie-group integration
If you represent attitude by a quaternion \(q\in S^3\) and integrate \(\dot q = \tfrac12 q\otimes \omega\) with RK, you often re-normalize: \(q \leftarrow q/\norm{q}\).
This is a projection back to \(S^3\). It can work well, but:
the normalization is an extra nonlinear operation not accounted for in R-K order conditions,
it can reduce the global order (especially for higher-order schemes) or complicate consistent linearization,
the EKF propagation Jacobians become sensitive to the chosen “projection” step.
RKMK instead updates by a group exponential (or a retraction) and stays on the manifold by construction:
That tends to be cleaner for both accuracy and filter consistency.
Summary for \(G\times\R^n\) implementations
Write group dynamics in left-trivialized form: \(\dot g = g\,\Omega(g,r)\).
Choose a base R-K tableau (explicit or implicit).
In each stage, reconstruct \((g_i,r_i)\) via \((g_n\exp(\eta_i),\, r_n+\rho_i)\).
Evaluate \(\Omega(g_i,r_i)\) and \(f(g_i,r_i)\).
Convert the group rate to the algebraic rate with \(\dexp^{-1}_{\eta_i}\).
Accumulate stages using R-K coefficients.
Update \(g\) with a final \(\exp(\cdot)\) and \(r\) with a final weighted sum.
For \(\SO(3)\), implement stable \(\Exp\), \(J(\phi)\), \(J(\phi)^{-1}\) with small-angle series.
Appendix
Useful SO(3) identities
For \(\phi\in\R^3\) and \(A=[\phi]_\times\):
These help implement Rodrigues formula and Jacobians efficiently.