Imports
/- Copyright (c) 2026 Giuseppe Sorge. All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. Authors: Giuseppe Sorge -/ module public import Physlib.ClassicalMechanics.RigidBody.Basic public import Physlib.Mathematics.CrossProduct

Angular momentum of a rigid body

For a rigid body rotating with angular velocity ω about its reference point, each body point at position r moves with velocity ω × r, so the body's angular momentum about that point is L = ∫ r × (ω × r) dm. Expanding the double cross product, r × (ω × r) = |r|² ω − (r · ω) r, shows that L is linear in ω with matrix the inertia tensor: L = I ω.

References

    Landau and Lifshitz, Mechanics, Section 32.

@[expose] public section

The angular momentum of a rigid body equals its inertia tensor applied to the angular velocity: L = I ω.

R:RigidBody 3ω:Fin 3 i:Fin 3hsmul: (j : Fin 3), R.ρ fun x => (if i = j then 1 else 0) * k, x.val 3 k ^ 2 - x.val 3 i * x.val 3 j, * ω j = R.ρ (ω j fun x => (if i = j then 1 else 0) * k, x.val 3 k ^ 2 - x.val 3 i * x.val 3 j, )x:Space(∑ k, x.val 3 k ^ 2) * ω i - (∑ j, x.val 3 j * ω j) * x.val 3 i = c, ContMDiffMap.coeFnAddMonoidHom (ω c fun x => (if i = c then 1 else 0) * k, x.val 3 k ^ 2 - x.val 3 i * x.val 3 c, ) x R:RigidBody 3ω:Fin 3 i:Fin 3hsmul: (j : Fin 3), R.ρ fun x => (if i = j then 1 else 0) * k, x.val 3 k ^ 2 - x.val 3 i * x.val 3 j, * ω j = R.ρ (ω j fun x => (if i = j then 1 else 0) * k, x.val 3 k ^ 2 - x.val 3 i * x.val 3 j, )x:Space(∑ k, x.val 3 k ^ 2) * ω i - (∑ j, x.val 3 j * ω j) * x.val 3 i = x_1, ω x_1 * ((if i = x_1 then 1 else 0) * k, x.val 3 k ^ 2 - x.val 3 i * x.val 3 x_1) R:RigidBody 3ω:Fin 3 x:Spacehsmul: (j : Fin 3), R.ρ fun x => (if (fun i => i) 0, = j then 1 else 0) * k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) 0, ) * x.val 3 j, * ω j = R.ρ (ω j fun x => (if (fun i => i) 0, = j then 1 else 0) * k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) 0, ) * x.val 3 j, )(∑ k, x.val 3 k ^ 2) * ω ((fun i => i) 0, ) - (∑ j, x.val 3 j * ω j) * x.val 3 ((fun i => i) 0, ) = x_1, ω x_1 * ((if (fun i => i) 0, = x_1 then 1 else 0) * k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) 0, ) * x.val 3 x_1)R:RigidBody 3ω:Fin 3 x:Spacehsmul: (j : Fin 3), R.ρ fun x => (if (fun i => i) 1, = j then 1 else 0) * k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) 1, ) * x.val 3 j, * ω j = R.ρ (ω j fun x => (if (fun i => i) 1, = j then 1 else 0) * k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) 1, ) * x.val 3 j, )(∑ k, x.val 3 k ^ 2) * ω ((fun i => i) 1, ) - (∑ j, x.val 3 j * ω j) * x.val 3 ((fun i => i) 1, ) = x_1, ω x_1 * ((if (fun i => i) 1, = x_1 then 1 else 0) * k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) 1, ) * x.val 3 x_1)R:RigidBody 3ω:Fin 3 x:Spacehsmul: (j : Fin 3), R.ρ fun x => (if (fun i => i) 2, = j then 1 else 0) * k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) 2, ) * x.val 3 j, * ω j = R.ρ (ω j fun x => (if (fun i => i) 2, = j then 1 else 0) * k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) 2, ) * x.val 3 j, )(∑ k, x.val 3 k ^ 2) * ω ((fun i => i) 2, ) - (∑ j, x.val 3 j * ω j) * x.val 3 ((fun i => i) 2, ) = x_1, ω x_1 * ((if (fun i => i) 2, = x_1 then 1 else 0) * k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) 2, ) * x.val 3 x_1) R:RigidBody 3ω:Fin 3 x:Spacehsmul: (j : Fin 3), R.ρ fun x => (if (fun i => i) 0, = j then 1 else 0) * k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) 0, ) * x.val 3 j, * ω j = R.ρ (ω j fun x => (if (fun i => i) 0, = j then 1 else 0) * k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) 0, ) * x.val 3 j, )(∑ k, x.val 3 k ^ 2) * ω ((fun i => i) 0, ) - (∑ j, x.val 3 j * ω j) * x.val 3 ((fun i => i) 0, ) = x_1, ω x_1 * ((if (fun i => i) 0, = x_1 then 1 else 0) * k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) 0, ) * x.val 3 x_1)R:RigidBody 3ω:Fin 3 x:Spacehsmul: (j : Fin 3), R.ρ fun x => (if (fun i => i) 1, = j then 1 else 0) * k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) 1, ) * x.val 3 j, * ω j = R.ρ (ω j fun x => (if (fun i => i) 1, = j then 1 else 0) * k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) 1, ) * x.val 3 j, )(∑ k, x.val 3 k ^ 2) * ω ((fun i => i) 1, ) - (∑ j, x.val 3 j * ω j) * x.val 3 ((fun i => i) 1, ) = x_1, ω x_1 * ((if (fun i => i) 1, = x_1 then 1 else 0) * k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) 1, ) * x.val 3 x_1)R:RigidBody 3ω:Fin 3 x:Spacehsmul: (j : Fin 3), R.ρ fun x => (if (fun i => i) 2, = j then 1 else 0) * k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) 2, ) * x.val 3 j, * ω j = R.ρ (ω j fun x => (if (fun i => i) 2, = j then 1 else 0) * k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) 2, ) * x.val 3 j, )(∑ k, x.val 3 k ^ 2) * ω ((fun i => i) 2, ) - (∑ j, x.val 3 j * ω j) * x.val 3 ((fun i => i) 2, ) = x_1, ω x_1 * ((if (fun i => i) 2, = x_1 then 1 else 0) * k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) 2, ) * x.val 3 x_1) R:RigidBody 3ω:Fin 3 x:Spacehsmul: (j : Fin 3), R.ρ fun x => (if (fun i => i) 2, = j then 1 else 0) * k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) 2, ) * x.val 3 j, * ω j = R.ρ (ω j fun x => (if (fun i => i) 2, = j then 1 else 0) * k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) 2, ) * x.val 3 j, )(x.val 3 0 ^ 2 + x.val 3 1 ^ 2 + x.val 3 2 ^ 2) * ω 2 - (x.val 3 0 * ω 0 + x.val 3 1 * ω 1 + x.val 3 2 * ω 2) * x.val 3 2 = -(ω 0 * (x.val 3 2 * x.val 3 0)) + -(ω 1 * (x.val 3 2 * x.val 3 1)) + ω 2 * (x.val 3 0 ^ 2 + x.val 3 1 ^ 2 + x.val 3 2 ^ 2 - x.val 3 2 * x.val 3 2) R:RigidBody 3ω:Fin 3 x:Spacehsmul: (j : Fin 3), R.ρ fun x => (if (fun i => i) 0, = j then 1 else 0) * k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) 0, ) * x.val 3 j, * ω j = R.ρ (ω j fun x => (if (fun i => i) 0, = j then 1 else 0) * k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) 0, ) * x.val 3 j, )(x.val 3 0 ^ 2 + x.val 3 1 ^ 2 + x.val 3 2 ^ 2) * ω 0 - (x.val 3 0 * ω 0 + x.val 3 1 * ω 1 + x.val 3 2 * ω 2) * x.val 3 0 = ω 0 * (x.val 3 0 ^ 2 + x.val 3 1 ^ 2 + x.val 3 2 ^ 2 - x.val 3 0 * x.val 3 0) + -(ω 1 * (x.val 3 0 * x.val 3 1)) + -(ω 2 * (x.val 3 0 * x.val 3 2))R:RigidBody 3ω:Fin 3 x:Spacehsmul: (j : Fin 3), R.ρ fun x => (if (fun i => i) 1, = j then 1 else 0) * k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) 1, ) * x.val 3 j, * ω j = R.ρ (ω j fun x => (if (fun i => i) 1, = j then 1 else 0) * k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) 1, ) * x.val 3 j, )(x.val 3 0 ^ 2 + x.val 3 1 ^ 2 + x.val 3 2 ^ 2) * ω 1 - (x.val 3 0 * ω 0 + x.val 3 1 * ω 1 + x.val 3 2 * ω 2) * x.val 3 1 = -(ω 0 * (x.val 3 1 * x.val 3 0)) + ω 1 * (x.val 3 0 ^ 2 + x.val 3 1 ^ 2 + x.val 3 2 ^ 2 - x.val 3 1 * x.val 3 1) + -(ω 2 * (x.val 3 1 * x.val 3 2))R:RigidBody 3ω:Fin 3 x:Spacehsmul: (j : Fin 3), R.ρ fun x => (if (fun i => i) 2, = j then 1 else 0) * k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) 2, ) * x.val 3 j, * ω j = R.ρ (ω j fun x => (if (fun i => i) 2, = j then 1 else 0) * k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) 2, ) * x.val 3 j, )(x.val 3 0 ^ 2 + x.val 3 1 ^ 2 + x.val 3 2 ^ 2) * ω 2 - (x.val 3 0 * ω 0 + x.val 3 1 * ω 1 + x.val 3 2 * ω 2) * x.val 3 2 = -(ω 0 * (x.val 3 2 * x.val 3 0)) + -(ω 1 * (x.val 3 2 * x.val 3 1)) + ω 2 * (x.val 3 0 ^ 2 + x.val 3 1 ^ 2 + x.val 3 2 ^ 2 - x.val 3 2 * x.val 3 2) All goals completed! 🐙