Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

SO(3) Gauge Theory for Classical Mechanics

Abstract

We analyze the classical mechanics of the inverted spherical pendulum (ISP) and of the symmetrical (Lagrange) top as gauge theories in SO(3)SO(3), the Lie group of rotations in three dimensions. We show that the equations of motion can be derived as geodesic equations on a curved manifold, SO(3)SO(3), fibred over ordinary spacetime. This derivation is short and direct, standing in contrast to the more standard and elaborate delivery.

Adding a third angle ψ\psi, representing twist about the baton axis, introduces gyroscopic coupling that physically stabilizes the pendulum and converts the problem into that of the symmetrical top.

This formulation directly mirrors Yang-Mills theory and general relativity, showing that classical Newtonian mechanics can be elegantly expressed in terms of differential geometry.

The original version of this article in Wolfram Mathematica is published in Beckman, 2026.

Introduction

Gauge theory and gauge-covariant derivatives are the mathematical backbone of the Standard Model of particle physics, describing electromagnetic, weak, and strong interactions as connections on principal fibre bundles. Covariant derivatives on spacetime itself are the mathematical backbone of general relativity and gravitation. It is a seldom-mentioned, yet remarkable fact that exactly the same mathematical machinery pertains to classical Newtonian mechanics!

The unifying fact, promoted to a slogan, is:

“Forces arise as connection coefficients in covariant derivatives.”

Standard physics curricula derive the equations of motion for rotating rigid bodies using coordinate-heavy Euler-Lagrange equations written in Euler angles (yaw, pitch, and roll). This traditional approach—found in classic textbooks such as Goldstein’s Classical Mechanics Goldstein et al., 2002, Landau and Lifshitz’s Mechanics Landau & Lifshitz, 1976, or Arnol’d’s Mathematical Methods of Classical Mechanics Arnol'd, 2013—tends to obscure the overarching geometric structure.

In this article, we reformulate the classical inverted spherical pendulum (ISP) and Lagrange top geometrically, revealing the equations of motion following from a gauge-covariant absolute derivative along the system’s trajectory:

Dtx˙μ  =def  dx˙μdt+Γαβμx˙αx˙β=FμD_t \dot{x}^\mu \;\stackrel{\text{def}}{=}\; \frac{d\dot{x}^\mu}{dt} + \Gamma^\mu_{\alpha\beta} \dot{x}^\alpha \dot{x}^\beta = F^\mu

where DtD_t is the absolute covariant derivative and the Γ\Gamma’s are the connection coefficients of the specific gauge manifold we choose. In this article, the gauge manifold / gauge group is SO(3)SO(3). In a future note, we will choose SU(2)SU(2), specifically to avoid gimbal lock.

This is exactly the same kind of computation performed under the banner of gauge invariance in the Standard Model. Rather than postulating Coriolis or gyroscopic forces ad-hoc, they emerge naturally as the Christoffel connection coefficients Γαβμ\Gamma^\mu_{\alpha\beta} of a curved manifold (SO(3)/SO(2)SO(3)/SO(2) or SO(3)SO(3)) fibred over ordinary time. Inertial forces arise from connection coefficients.

This formulation directly mirrors:

  1. General Relativity: Where the gravitational force is replaced entirely by geodesic motion (vanishing covariant acceleration) in a curved 4D spacetime manifold.

  2. Yang-Mills Gauge Theory: Where the gyroscopic off-diagonal coupling terms act exactly as a gauge potential AμA_\mu, and the resulting Coriolis and gyroscopic precession forces emerge directly from the gauge-covariant derivative.

It is a remarkable fact that physics of all kinds—classical and quantum, relativistic and Newtonian—are concisely and elegantly unified through differential geometry. This note aims to furnish a concise, accessible bridge for physics undergraduates to see how gauge theory operates even in a simple, concrete classical system.

We accompany this note with:

  1. A formal verification in Lean 4 verifying the algebraic properties of the 2D quotient metric and its singularity.

  2. A symbolic verification in SymPy computing the Christoffel symbols, geodesic equations, and their I30I_3 \to 0 limit, whereby the Lagrange top converges to the inverted spherical pendulum.

1. Lagrangian Formulation & Singularity

This section furnishes a “ground-truth” via the conventional and traditional derivation---Euler-Lagrange equations. Later, we show that the new, geodesical derivation yields exactly the same equations of motion.

Consider a rigid-rod pendulum of uniform density with mass mm and length 2cz2 c_z, with its center of mass located at distance czc_z from the pivot, fixed to the 2D floor. We measure its angular position with two coordinates:

The position of the center of mass in Cartesian coordinates is:

r=Rx(η)Ry(δ)(00cz)\mathbf{r} = R_x(\eta) R_y(\delta) \begin{pmatrix} 0 \\ 0 \\ c_z \end{pmatrix}
3D visualization of the inverted spherical pendulum showing the pitch (\delta) and cone-roll (\eta) coordinate system.

Figure 1:3D visualization of the inverted spherical pendulum showing the pitch (δ\delta) and cone-roll (η\eta) coordinate system.

The velocity is v=r˙\mathbf{v} = \dot{\mathbf{r}}, leading to the kinetic energy:

T=12mvv=12mcz2(δ˙2+cos2δη˙2)T = \frac{1}{2} m \mathbf{v} \cdot \mathbf{v} = \frac{1}{2} m c_z^2\left(\dot{\delta}^2 + \cos^2\delta \, \dot{\eta}^2\right)

The potential energy under gravity pointing in the Z-Z direction is:

V=mgzh=mgczcosδcosηV = m g z_h = m g c_z \cos\delta \cos\eta

With the Lagrangian L=TVL = T - V, the Euler-Lagrange equations yield:

δ¨=sinδ(gczcosηcosδη˙2)\ddot{\delta} = \sin\delta \left( \frac{g}{c_z} \cos\eta - \cos\delta \, \dot{\eta}^2 \right)
η¨=gczsecδsinη+2tanδδ˙η˙\ddot{\eta} = \frac{g}{c_z} \sec\delta \sin\eta + 2 \tan\delta \, \dot{\delta} \, \dot{\eta}

The Coordinate Singularity

The equation for η¨\ddot{\eta} contains the term secδsinη=sinηcosδ\sec\delta \sin\eta = \frac{\sin\eta}{\cos\delta}, which diverges at the equator δ±π/2\delta \to \pm \pi/2 (cosδ0\cos\delta \to 0) for almost all values of η\eta. This is the mathematical manifestation of gimbal lock.

We can analyze the limits of the applied, gravitational, non-inertial force term in the Z-Z direction, at the equator:

This gimbal-lock problem will be fully resolved in an upcoming note by performing the entire geometric computation again in SU(2)SU(2), the double-cover rotation group that is free of coordinate singularities. A side-by-side video demonstration showing SO(3)SO(3) gimbal-lock divergence vs SU(2)SU(2) singularity-free stability is available in Beckman, 2026. A second video showing the mathematical equivalence of SO(3)SO(3) and SU(2)SU(2) trajectories away from the gimbal lock equator is available in Beckman, 2026. We thank the Wolfram Community for hosting these video attachments.

We formally define this metric and verify the vanishing of its determinant at the singularity in Lean 4:

Lean definition: metricSO3
ClassicalMechanicsSO3Flow.lean
/-- The 2D quotient metric tensor `g_μν` for the inverted spherical pendulum
in SO(3)/SO(2), represented as a diagonal matrix in pitch (δ) and cone-roll (η) coordinates. -/
def metricSO3 (I1 δ : ℝ) : Matrix (Fin 2) (Fin 2) ℝ :=
  !![I1, 0;
     0, I1 * (Real.cos δ) ^ 2]
Lean proof: det_metricSO3
ClassicalMechanicsSO3Flow.lean
/-- The determinant of the 2D metric tensor is `I1^2 * cos^2(δ)`.
This determinant vanishes at `δ = ±π/2` (90 degrees), causing the coordinate singularity. -/
theorem det_metricSO3 (I1 δ : ℝ) :
    (metricSO3 I1 δ).det = I1 ^ 2 * (Real.cos δ) ^ 2 := by
  unfold metricSO3
  rw [Matrix.det_fin_two_of]
  ring

2. Geometric Derivation via Kinetic-Energy Metric

Instead of the Euler-Lagrange formalism, we can derive the exact same equations of motion geometrically. The kinetic energy defines a Riemannian metric tensor gμνg_{\mu\nu} on the 2D configuration space:

gμν=(I100I1cos2δ)g_{\mu\nu} = \begin{pmatrix} I_1 & 0 \\ 0 & I_1 \cos^2\delta \end{pmatrix}

where I1=mcz2I_1 = m c_z^2. The inverse (contravariant) metric gμνg^{\mu\nu} is:

gμν=(1I1001I1cos2δ)g^{\mu\nu} = \begin{pmatrix} \frac{1}{I_1} & 0 \\ 0 & \frac{1}{I_1 \cos^2\delta} \end{pmatrix}

which we formally define in Lean 4 as:

Lean definition: invMetricSO3
ClassicalMechanicsSO3Flow.lean
/-- The inverse metric tensor `g^μν` for the inverted spherical pendulum. -/
def invMetricSO3 (I1 δ : ℝ) : Matrix (Fin 2) (Fin 2) ℝ :=
  !![1 / I1, 0;
     0, 1 / (I1 * (Real.cos δ) ^ 2)]

We prove in Lean that the inverse is valid as long as we are away from the singularity:

Lean proof: metricSO3_mul_inv
ClassicalMechanicsSO3Flow.lean
/-- Verifies that `invMetricSO3` is indeed the matrix inverse of `metricSO3`
when `I1` is non-zero and the pendulum is not at the coordinate singularity (`cos δ ≠ 0`). -/
theorem metricSO3_mul_inv (I1 δ : ℝ) (hI1 : I1 ≠ 0) (hcos : Real.cos δ ≠ 0) :
    metricSO3 I1 δ * invMetricSO3 I1 δ = 1 := by
  unfold metricSO3 invMetricSO3
  ext i j
  fin_cases i <;> fin_cases j
  · simp [Matrix.mul_apply]
    field_simp [hI1]
  · simp [Matrix.mul_apply]
  · simp [Matrix.mul_apply]
  · simp [Matrix.mul_apply]
    have h_mul : I1 * Real.cos δ ^ 2 ≠ 0 := mul_ne_zero hI1 (pow_ne_zero 2 hcos)
    field_simp [h_mul]

The Christoffel symbols of the second kind are computed from the metric via:

Γαβμ=12gμγ(αgβγ+βgαγγgαβ)\Gamma^\mu_{\alpha\beta} = \frac{1}{2} g^{\mu\gamma} \left( \partial_\alpha g_{\beta\gamma} + \partial_\beta g_{\alpha\gamma} - \partial_\gamma g_{\alpha\beta} \right)

The non-vanishing independent Christoffel symbols are:

Γηηδ=cosδsinδ,Γδηη=tanδ\Gamma^\delta_{\eta\eta} = \cos\delta \sin\delta, \quad \Gamma^\eta_{\delta\eta} = -\tan\delta

Centrifugal and Coriolis Forces from Connection Coefficients

By expanding the geodesic equation for each coordinate, we can identify these connection coefficients with familiar physical forces.

For the pitch coordinate μ=δ\mu = \delta:

δ¨+Γηηδη˙2=Fδ    δ¨+(cosδsinδ)η˙2=Fδ\ddot{\delta} + \Gamma^\delta_{\eta\eta} \dot{\eta}^2 = F^\delta \implies \ddot{\delta} + (\cos\delta \sin\delta) \dot{\eta}^2 = F^\delta

Here, the inertial term Γηηδη˙2=(cosδsinδ)η˙2- \Gamma^\delta_{\eta\eta} \dot{\eta}^2 = -(\cos\delta \sin\delta) \dot{\eta}^2 is proportional to the square of the velocity η˙2\dot{\eta}^2. This is the centrifugal force acting on the pitch angle due to the azimuthal roll of the pendulum.

For the roll coordinate μ=η\mu = \eta:

η¨+2Γδηηδ˙η˙=Fη    η¨2(tanδ)δ˙η˙=Fη\ddot{\eta} + 2\Gamma^\eta_{\delta\eta} \dot{\delta}\dot{\eta} = F^\eta \implies \ddot{\eta} - 2(\tan\delta) \dot{\delta}\dot{\eta} = F^\eta

Here, the inertial term 2Γδηηδ˙η˙=2(tanδ)δ˙η˙-2\Gamma^\eta_{\delta\eta} \dot{\delta}\dot{\eta} = 2(\tan\delta) \dot{\delta}\dot{\eta} is proportional to the product of two distinct velocities δ˙η˙\dot{\delta}\dot{\eta}. This is the Coriolis force, arising from the interaction of radial (pitch) and azimuthal (roll) motions.

This is the precise realization of the governing slogan at the top of this note:

“Forces arise as connection coefficients in covariant derivatives.”

In standard Newtonian mechanics, these inertial forces are introduced ad-hoc as “fictitious” corrections for working in a rotating reference frame. Here, they are not postulated at all; they are the geometric consequence of the connection coefficients Γαβμ\Gamma^\mu_{\alpha\beta} in the absolute covariant derivative along the curved trajectory.

The geodesic equation of motion incorporating the potential gradient force is:

x¨μ+Γαβμx˙αx˙β=Fμ\ddot{x}^\mu + \Gamma^\mu_{\alpha\beta} \dot{x}^\alpha \dot{x}^\beta = F^\mu

where the force vector Fμ=gμννVF^\mu = -g^{\mu\nu} \partial_\nu V.

Let’s grind through this computation explicitly. First, we compute the coordinate derivatives of the potential energy V=mgczcosδcosηV = m g c_z \cos\delta \cos\eta:

δV=δ(mgczcosδcosη)=mgczsinδcosη\partial_\delta V = \partial_\delta \left( m g c_z \cos\delta \cos\eta \right) = -m g c_z \sin\delta \cos\eta

ηV=η(mgczcosδcosη)=mgczcosδsinη\partial_\eta V = \partial_\eta \left( m g c_z \cos\delta \cos\eta \right) = -m g c_z \cos\delta \sin\eta

Using the inverse metric gμν=diag(1I1,1I1cos2δ)g^{\mu\nu} = \operatorname{diag}\left(\frac{1}{I_1}, \frac{1}{I_1 \cos^2\delta}\right) where I1=mcz2I_1 = m c_z^2, we obtain the contravariant force components:

Fδ=gδδδV=1mcz2(mgczsinδcosη)=gczsinδcosηF^\delta = -g^{\delta\delta} \partial_\delta V = -\frac{1}{m c_z^2} \left(-m g c_z \sin\delta \cos\eta\right) = \frac{g}{c_z} \sin\delta \cos\eta

Fη=gηλλV=1mcz2cos2δ(mgczcosδsinη)=gczsecδsinηF^\eta = -g^{\eta\lambda} \partial_\lambda V = -\frac{1}{m c_z^2 \cos^2\delta} \left(-m g c_z \cos\delta \sin\eta\right) = \frac{g}{c_z} \sec\delta \sin\eta

Substituting these force components and the non-vanishing Christoffel symbols back into the geodesic equations:

  1. For μ=δ\mu = \delta:

    δ¨+Γηηδη˙2=Fδ    δ¨+cosδsinδη˙2=gczsinδcosη\ddot{\delta} + \Gamma^\delta_{\eta\eta} \dot{\eta}^2 = F^\delta \implies \ddot{\delta} + \cos\delta\sin\delta \, \dot{\eta}^2 = \frac{g}{c_z} \sin\delta \cos\eta

    Solving for δ¨\ddot{\delta} yields:

    δ¨=sinδ(gczcosηcosδη˙2)\ddot{\delta} = \sin\delta \left( \frac{g}{c_z} \cos\eta - \cos\delta \, \dot{\eta}^2 \right)

    which matches the Euler-Lagrange equation for δ\delta character-for-character.

  2. For μ=η\mu = \eta:

    η¨+2Γδηηδ˙η˙=Fη    η¨2tanδδ˙η˙=gczsecδsinη\ddot{\eta} + 2\Gamma^\eta_{\delta\eta} \dot{\delta}\dot{\eta} = F^\eta \implies \ddot{\eta} - 2\tan\delta \, \dot{\delta}\dot{\eta} = \frac{g}{c_z} \sec\delta \sin\eta

    Solving for η¨\ddot{\eta} yields:

    η¨=gczsecδsinη+2tanδδ˙η˙\ddot{\eta} = \frac{g}{c_z} \sec\delta \sin\eta + 2 \tan\delta \, \dot{\delta} \, \dot{\eta}

    which matches the Euler-Lagrange equation for η\eta character-for-character.

3. Gyroscopic Fibration via SO(3)SO(3)

To include gyroscopic effects, we add a third angle ψ\psi, representing twist or spin around the long axis of the baton. The configuration space is now the full Lie group SO(3)SO(3), viewed as a circle bundle (fibration) over the 2D2D sphere.

Let I3I_3 be the moment of inertia around the spin axis, and I1I_1 be the transverse moment of inertia. The 3D metric tensor is:

gμν=(I1000I1cos2δ+I3sin2δI3sinδ0I3sinδI3)g_{\mu\nu} = \begin{pmatrix} I_1 & 0 & 0 \\ 0 & I_1 \cos^2\delta + I_3 \sin^2\delta & I_3 \sin\delta \\ 0 & I_3 \sin\delta & I_3 \end{pmatrix}

Its inverse (contravariant) metric tensor gμνg^{\mu\nu} is:

gμν=(1I1000sec2δI1sec2δsinδI10sec2δsinδI11I3+tan2δI1)g^{\mu\nu} = \begin{pmatrix} \frac{1}{I_1} & 0 & 0 \\ 0 & \frac{\sec^2\delta}{I_1} & -\frac{\sec^2\delta \sin\delta}{I_1} \\ 0 & -\frac{\sec^2\delta \sin\delta}{I_1} & \frac{1}{I_3} + \frac{\tan^2\delta}{I_1} \end{pmatrix}

The off-diagonal elements of the metric tensor represent the SO(3)SO(3) gauge potential. As the baton moves along the cone-roll coordinate η\eta, the motion leaks into the twist coordinate ψ\psi via the gauge connection, physically manifesting as Coriolis and gyroscopic precession forces.

The resulting equations of motion are:

I1δ¨+(I1I3)cosδsinδη˙2I3cosδη˙ψ˙=mgczsinδcosηI_1 \ddot{\delta} + (I_1 - I_3)\cos\delta\sin\delta \, \dot{\eta}^2 - I_3 \cos\delta \, \dot{\eta} \, \dot{\psi} = m g c_z \sin\delta \cos\eta
I1η¨+δ˙(I3ψ˙secδ+(2I1+I3)tanδη˙)=mgczsecδsinηI_1 \ddot{\eta} + \dot{\delta} \left( I_3 \dot{\psi} \sec\delta + (-2 I_1 + I_3) \tan\delta \, \dot{\eta} \right) = m g c_z \sec\delta \sin\eta
I1ψ¨+δ˙((I1cosδ+(2I1I3)sinδtanδ)η˙I3tanδψ˙)=mgczsinηtanδI_1 \ddot{\psi} + \dot{\delta} \left( \left(I_1 \cos\delta + (2 I_1 - I_3) \sin\delta \tan\delta\right) \dot{\eta} - I_3 \tan\delta \, \dot{\psi} \right) = -m g c_z \sin\eta \tan\delta

When I30I_3 \to 0, the first two equations devolve exactly to the 2D quotient equations of motion.

4. SymPy Symbolic Verification

We implement the metrics, Christoffel symbol computations, and covariant derivative equations of motion in Python using SymPy. The script verifies all algebraic steps and confirms the correctness of the I30I_3 \to 0 limit against the 2D Euler-Lagrange equations.

so3_gyroscope.py
import sympy as sp

# 1. Define symbolic variables
delta, eta, psi = sp.symbols('delta eta psi', real=True)
d_delta, d_eta, d_psi = sp.symbols('d_delta d_eta d_psi', real=True)
dd_delta, dd_eta, dd_psi = sp.symbols('dd_delta dd_eta dd_psi', real=True)

I1, I3, m, cz, g = sp.symbols('I1 I3 m cz g', positive=True)

coords = [delta, eta, psi]
vels = [d_delta, d_eta, d_psi]
accels = [dd_delta, dd_eta, dd_psi]

# 2. Define the metric tensor g_μν (metric3)
# Row 0: delta
# Row 1: eta
# Row 2: psi
metric = sp.Matrix([
    [I1, 0, 0],
    [0, I1 * sp.cos(delta)**2 + I3 * sp.sin(delta)**2, I3 * sp.sin(delta)],
    [0, I3 * sp.sin(delta), I3]
])

print("--- Metric Tensor g_μν ---")
sp.pprint(metric)

# 3. Compute the inverse metric g^μν
inv_metric = sp.simplify(metric.inv())
print("\n--- Inverse Metric Tensor g^μν ---")
sp.pprint(inv_metric)

# 4. Compute Christoffel symbols of the first kind:
# Γ_αβγ = 0.5 * (dg_{βγ}/dx^α + dg_{αγ}/dx^β - dg_{αβ}/dx^γ)
# Note: we use indices 0, 1, 2 corresponding to delta, eta, psi.
def get_g_first(a, b, c):
    # partial derivatives
    term1 = sp.diff(metric[b, c], coords[a])
    term2 = sp.diff(metric[a, c], coords[b])
    term3 = sp.diff(metric[a, b], coords[c])
    return sp.simplify(0.5 * (term1 + term2 - term3))

# Compute Christoffel symbols of the second kind:
# Γ^μ_αβ = g^μγ * Γ_αβγ
def get_christoffel(mu, a, b):
    val = 0
    for gamma in range(3):
        val += inv_metric[mu, gamma] * get_g_first(a, b, gamma)
    return sp.simplify(val)

# 5. Compute geodesic acceleration term: sum_{a,b} Γ^mu_ab * dot{x}^a * dot{x}^b
geodesic_terms = []
for mu in range(3):
    term = 0
    for a in range(3):
        for b in range(3):
            term += get_christoffel(mu, a, b) * vels[a] * vels[b]
    geodesic_terms.append(sp.simplify(term))

# 6. Define the Potential Energy and compute Potential Forces
# V = m * g * cz * cos(delta) * cos(eta)
V = m * g * cz * sp.cos(delta) * sp.cos(eta)
print(f"\nPotential Energy V: {V}")

# F^μ = -g^μν * dV/dx^ν
dV = sp.Matrix([sp.diff(V, c) for c in coords])
potential_forces = sp.simplify(-inv_metric * dV)

# 7. Equations of motion: ddot{x}^μ + geodesic_term = F^μ
eom = []
for mu in range(3):
    lhs = accels[mu] + geodesic_terms[mu]
    rhs = potential_forces[mu]
    eom.append(sp.Eq(lhs, rhs))

print("\n--- Equations of Motion (3D Gyroscope) ---")
for idx, coord in enumerate(coords):
    print(f"\nCoordinate: {coord}")
    sp.pprint(eom[idx])

# 8. Devolve to 2D case by setting I3 -> 0, I1 -> cz^2, m -> 1
print("\n--- Devolved Equations of Motion (I3 -> 0, I1 -> cz^2, m -> 1) ---")
devol_subs = {I3: 0, I1: cz**2, m: 1}
devol_eom = []
for mu in range(2): # only delta and eta
    # solve the equations for accelerations dd_delta and dd_eta
    eq = eom[mu].subs(devol_subs)
    acc = accels[mu]
    sol = sp.solve(eq, acc)[0]
    devol_eom.append(sp.Eq(acc, sp.simplify(sol)))

for idx, coord in enumerate(coords[:2]):
    print(f"\nDevolved Coordinate: {coord}")
    sp.pprint(devol_eom[idx])

# 9. Verify against 2D Euler-Lagrange equations
# dd_delta == sin(delta) * (g/cz * cos(eta) - cos(delta) * d_eta**2)
# dd_eta == g/cz * sec(delta) * sin(eta) + 2 * tan(delta) * d_delta * d_eta
expected_dd_delta = sp.sin(delta) * ((g / cz) * sp.cos(eta) - sp.cos(delta) * d_eta**2)
expected_dd_eta = (g / cz) * (1 / sp.cos(delta)) * sp.sin(eta) + 2 * sp.tan(delta) * d_delta * d_eta

print("\n--- Verification against 2D Euler-Lagrange ---")
delta_match = sp.simplify(devol_eom[0].rhs - expected_dd_delta) == 0
eta_match = sp.simplify(devol_eom[1].rhs - expected_dd_eta) == 0
print(f"dd_delta matches: {delta_match}")
print(f"dd_eta matches: {eta_match}")

5. Numerical Solution and Visualization

We leave numerical solution and visualization to a future update of this note. Those were accomplished in (the original Wolfram version)[https://community.wolfram.com/groups/-/m/t/3647724?p_p_auth=JjVao8Bx]. We need merely to port them to SymPy and NumPy.

References
  1. Beckman, B. (2026). SO(3) Gauge Theory for Classical Mechanics in Wolfram Mathematica. Wolfram Community Publication. https://community.wolfram.com/groups/-/m/t/3647724
  2. Goldstein, H., Poole, C., & Safko, J. (2002). Classical Mechanics (3rd ed.). Pearson.
  3. Landau, L. D., & Lifshitz, E. M. (1976). Mechanics (3rd ed.). Butterworth-Heinemann.
  4. Arnol’d, V. I. (2013). Mathematical Methods of Classical Mechanics (Vol. 60). Springer Science & Business Media.
  5. Beckman, B. (2026). Euler Diverge Quaternion OK (Screen Recording). Wolfram Community Attachment. https://community.wolfram.com/groups?p_auth=rav9B6lo&p_p_id=19&p_p_lifecycle=1&p_p_state=exclusive&p_p_mode=view&p_p_col_id=column-1&p_p_col_pos=1&p_p_col_count=5&_19_struts_action=%2Fmessage_boards%2Fget_message_attachment&_19_messageId=3656731&_19_attachment=Euler+Diverge+Quaternion+OK+Screen+Recording+2026-03-10+at+12.04.25%E2%80%AFPM.mov
  6. Beckman, B. (2026). Euler and Quaternion Equivalent (Screen Recording). Wolfram Community Attachment. https://community.wolfram.com/groups?p_auth=rav9B6lo&p_p_id=19&p_p_lifecycle=1&p_p_state=exclusive&p_p_mode=view&p_p_col_id=column-1&p_p_col_pos=1&p_p_col_count=5&_19_struts_action=%2Fmessage_boards%2Fget_message_attachment&_19_messageId=3656731&_19_attachment=Euler+and+Quaternion+Equivalent+Screen+Recording+2026-03-10+at+12.03.14%E2%80%AFPM.mov
  7. Shapere, A., & Wilczek, F. (1989). Gauge kinematics of deformable bodies. American Journal of Physics, 57(6), 514–518.
  8. Montgomery, R. (1993). Gauge theory of the falling cat. Dynamics and Control of Mechanical Systems, 1, 193–218.