top of page

Angular Momentum Display: Three Weighted Rotating Arms

  • Writer: Fellow Traveler
    Fellow Traveler
  • 2 days ago
  • 9 min read

Classical Method vs. Ledger Method



The Physical Setup

System: Three rigid arms connected at pivot joints, free to rotate in a vertical plane.

   ○ Fixed pivot (ceiling/stand)

    |

    ● Mass m₁, arm length L₁, angle θ₁

    |

    ○ Joint 1

    |

    ● Mass m₂, arm length L₂, angle θ₂

    |

    ○ Joint 2

    |

    ● Mass m₃, arm length L₃, angle θ₃


What makes this hard:

  • Each segment's position depends on all previous angles

  • The equations of motion are coupled and nonlinear

  • The system is chaotic—tiny changes in initial conditions produce wildly different trajectories

  • Energy sloshes between segments unpredictably



PART A: Classical Method (Lagrangian Mechanics)



A1. Define Generalized Coordinates

We choose angles measured from vertical:

  • θ₁ = angle of first arm from vertical

  • θ₂ = angle of second arm from vertical (not relative to first arm)

  • θ₃ = angle of third arm from vertical

State vector: (θ₁, θ₂, θ₃, θ̇₁, θ̇₂, θ̇₃)



A2. Position of Each Mass

The position of each mass depends on all previous angles:

Mass 1:

x₁ = L₁ sin(θ₁)

y₁ = -L₁ cos(θ₁)


Mass 2:

x₂ = L₁ sin(θ₁) + L₂ sin(θ₂)

y₂ = -L₁ cos(θ₁) - L₂ cos(θ₂)


Mass 3:

x₃ = L₁ sin(θ₁) + L₂ sin(θ₂) + L₃ sin(θ₃)

y₃ = -L₁ cos(θ₁) - L₂ cos(θ₂) - L₃ cos(θ₃)




A3. Velocities (This Is Where It Gets Ugly)

Differentiate positions with respect to time:

Mass 1:

ẋ₁ = L₁ cos(θ₁) θ̇₁

ẏ₁ = L₁ sin(θ₁) θ̇₁


Mass 2:

ẋ₂ = L₁ cos(θ₁) θ̇₁ + L₂ cos(θ₂) θ̇₂

ẏ₂ = L₁ sin(θ₁) θ̇₁ + L₂ sin(θ₂) θ̇₂


Mass 3:

ẋ₃ = L₁ cos(θ₁) θ̇₁ + L₂ cos(θ₂) θ̇₂ + L₃ cos(θ₃) θ̇₃

ẏ₃ = L₁ sin(θ₁) θ̇₁ + L₂ sin(θ₂) θ̇₂ + L₃ sin(θ₃) θ̇₃




A4. Kinetic Energy

T = ½m₁(ẋ₁² + ẏ₁²) + ½m₂(ẋ₂² + ẏ₂²) + ½m₃(ẋ₃² + ẏ₃²)


Expanding this produces cross-terms like:

T = ½m₁L₁²θ̇₁² 

  + ½m₂[L₁²θ̇₁² + L₂²θ̇₂² + 2L₁L₂cos(θ₁-θ₂)θ̇₁θ̇₂]

  + ½m₃[L₁²θ̇₁² + L₂²θ̇₂² + L₃²θ̇₃² 

       + 2L₁L₂cos(θ₁-θ₂)θ̇₁θ̇₂ 

       + 2L₁L₃cos(θ₁-θ₃)θ̇₁θ̇₃ 

       + 2L₂L₃cos(θ₂-θ₃)θ̇₂θ̇₃]


This is already a wall of symbols, and we haven't even started.



A5. Potential Energy

V = m₁gy₁ + m₂gy₂ + m₃gy₃

  = -m₁gL₁cos(θ₁) 

    - m₂g[L₁cos(θ₁) + L₂cos(θ₂)]

    - m₃g[L₁cos(θ₁) + L₂cos(θ₂) + L₃cos(θ₃)]




A6. Lagrangian and Equations of Motion

Form the Lagrangian:

L = T - V


Apply Euler-Lagrange equations for each coordinate:

d/dt(∂L/∂θ̇ᵢ) - ∂L/∂θᵢ = 0    for i = 1, 2, 3


This produces three coupled second-order nonlinear differential equations.

For a triple pendulum with general masses and lengths, each equation fills most of a page. The terms include:

  • θ̈₁, θ̈₂, θ̈₃ (angular accelerations)

  • Products of angular velocities: θ̇₁θ̇₂, θ̇₁θ̇₃, θ̇₂θ̇₃

  • Trigonometric functions: sin(θᵢ - θⱼ), cos(θᵢ - θⱼ)



A7. Numerical Integration

Because these equations are nonlinear and coupled, we solve them numerically:

  1. Rewrite as six first-order equations

  2. Choose initial conditions: (θ₁⁰, θ₂⁰, θ₃⁰, θ̇₁⁰, θ̇₂⁰, θ̇₃⁰)

  3. Use Runge-Kutta or similar integrator

  4. Step forward in time

  5. Record trajectory

What you get:

  • Position of each mass over time

  • Angular velocities over time

  • Total energy (should be conserved in ideal case)

What's implicit or often skipped:

  • Where energy is at any moment (which segment has how much)

  • Why certain trajectories are forbidden

  • What happens when energy transfers between segments

  • Endpoint condition (when does it "settle"?)



PART B: Ledger Method (Same Physics, Different Discipline)



B1. Templates Required

From the Physics Template Library:

#

Template

Role in This Problem

1

Inertial Motion

Default behavior without interaction

2

Force–Acceleration

Gravity acts on each mass

3

Constraint

Joints enforce fixed arm lengths

4

Momentum Conservation

Total angular momentum conserved (if no external torque)

5

Torque & Rotation

Forces at distance from pivot produce angular acceleration

6

Energy Partition

Energy shuffles between segments; total fixed

9

Friction

(If damped) Mechanical → heat

20

Equilibrium

(If damped) When motion stops



B2. The Ledger View of the State

At any instant, the Ledger contains:

Ledger Entry:

  θ₁, θ₂, θ₃         — angles

  θ̇₁, θ̇₂, θ̇₃         — angular velocities

  KE₁, KE₂, KE₃       — kinetic energy per segment

  PE₁, PE₂, PE₃       — potential energy per segment

  E_total             — total mechanical energy


The Ledger doesn't just store the configuration—it stores the energy budget per segment.



B3. Draft Space

Question: What states are allowed at the next instant?

Draft definition: All configurations (θ₁', θ₂', θ₃', θ̇₁', θ̇₂', θ̇₃') such that:

  1. Constraint Template satisfied:

    • Arms remain rigid (L₁, L₂, L₃ unchanged)

    • Joints remain connected

    • Top pivot remains fixed

  2. Energy Partition Template satisfied:

    • E_total remains constant (no Ink in frictionless case)

    • Energy may redistribute among KE₁, KE₂, KE₃, PE₁, PE₂, PE₃

  3. Locality satisfied:

    • Each segment can only directly influence its neighbors

    • No action at a distance within the system

What's forbidden:

  • Arms passing through each other

  • Energy appearing from nowhere

  • Segment 3 directly affecting segment 1 without going through segment 2



B4. Vote: What Selects the Next State?

At each Δt, multiple "Votes" occur simultaneously:

Vote 1: Gravity Each mass experiences F = mg downward. Using Force–Acceleration + Torque & Rotation templates:

τᵢ = rᵢ × Fᵢ

θ̈ᵢ contribution from gravity


Vote 2: Tension at joints Each joint transmits force between segments. Using Constraint Template:

Joint forces adjust to maintain rigid connections

These are "constraint forces"—they do no net work but redirect motion


Vote 3: Angular momentum transfer When segment 1 slows, segment 2 may speed up. Using Momentum Conservation + Torque & Rotation:

Total angular momentum constant (if top pivot allows rotation)

Or: Angular momentum of each segment changes due to internal torques


The Vote is the combination of all these interactions selecting one trajectory from the Draft space.



B5. Ink: What's the Irreversibility Cost?

Case A: Ideal (frictionless) system

No Ink is spent. This is a reversible system.

  • Total mechanical energy is exactly conserved

  • Play the movie backward and it's still valid physics

  • The Ledger updates, but no entropy is produced

This is unusual. Most real processes spend Ink. The ideal pendulum is pedagogically useful precisely because it's an Ink-free limiting case.

Case B: Damped system (friction at joints)

Now Ink is spent at every Vote:

Ink per timestep:

  ΔE_friction = energy dissipated at joints

  

Heat_joint1 += f(θ̇₁, damping_coefficient)

Heat_joint2 += f(θ̇₂, damping_coefficient)

Heat_joint3 += f(θ̇₃, damping_coefficient)


The Ledger must now track:

Ledger Entry (damped):

  θ₁, θ₂, θ₃, θ̇₁, θ̇₂, θ̇₃

  KE₁, KE₂, KE₃

  PE₁, PE₂, PE₃

  E_mechanical (decreasing)

  Heat_total (increasing)

  E_total = E_mechanical + Heat_total (constant)




B6. Energy Budget Per Segment (The Ledger Addition)

This is what the classical method doesn't force you to track.

At each timestep, the Ledger records:

Segment

KE

PE

Total

Arm 1

½I₁θ̇₁²

m₁gy₁

KE₁ + PE₁

Arm 2

½m₂v₂²

m₂gy₂

KE₂ + PE₂

Arm 3

½m₃v₃²

m₃gy₃

KE₃ + PE₃

System

ΣKE

ΣPE

E_total

Why this matters:

You can now see the energy sloshing:

  • Segment 1 slows → its KE drops

  • Segment 3 speeds up → its KE rises

  • The PE of each segment rises and falls with height

  • Total is constant (or decreasing if damped)

Classical mechanics allows you to compute this, but doesn't require it. Ledger mechanics requires it—the Energy Partition Template won't validate without it.



B7. Constraint Template: Why the Arms Don't Fly Apart

Classical mechanics buries this in "constraint forces" that are solved implicitly through the Lagrangian.

Ledger mechanics makes it explicit:

Constraint Template applied:

For each joint j:

  |position(mass_j) - position(pivot_j)| = Lⱼ   # arm length fixed

  

  If violated:

    project back to allowed configuration

    constraint force = whatever is needed to maintain this


The Constraint Template prunes the Draft space. It removes all configurations where arms stretch, compress, or disconnect.

This is the same physics, but now the constraint is visible as a first-class citizen rather than hidden in the mathematics.



B8. Equilibrium Template: When Is It "Done"?

Classical answer: In ideal case, never. The system oscillates forever.

Ledger answer (damped case):

Apply Equilibrium Template:

function isInEquilibrium(system):

  if max(|θ̇₁|, |θ̇₂|, |θ̇₃|) > ε: return false

  if mechanical_energy > E_min + ε: return false

  return true


Equilibrium means:

  • All angular velocities ≈ 0

  • All arms hanging straight down (minimum PE configuration)

  • No gradients driving further motion

  • All mechanical energy converted to heat

The Ledger endpoint is richer than "motion stopped."



B9. Numerical Implementation: Side by Side

Classical Implementation

def simulate_triple_pendulum_classical(θ₀, θ̇₀, T, dt):

    """

    Standard Lagrangian approach

    """

    state = [θ₀[0], θ₀[1], θ₀[2], θ̇₀[0], θ̇₀[1], θ̇₀[2]]

    trajectory = [state]

    

    for t in range(0, T, dt):

        # Compute θ̈ from equations of motion (the messy part)

        θ̈ = compute_accelerations(state)  # Pages of algebra inside

        

        # Update state

        state = runge_kutta_step(state, θ̈, dt)

        trajectory.append(state)

    

    return trajectory


What you track: θ₁, θ₂, θ₃, θ̇₁, θ̇₂, θ̇₃

Ledger Implementation

def simulate_triple_pendulum_ledger(θ₀, θ̇₀, T, dt, damping=0):

    """

    Same physics, Ledger bookkeeping

    """

    # Initialize Ledger

    ledger = {

        'θ': list(θ₀),

        'θ̇': list(θ̇₀),

        'KE': compute_KE_per_segment(θ₀, θ̇₀),

        'PE': compute_PE_per_segment(θ₀),

        'E_mech': None,

        'Heat': [0, 0, 0],  # Per joint

        'E_total': None

    }

    ledger['E_mech'] = sum(ledger['KE']) + sum(ledger['PE'])

    ledger['E_total'] = ledger['E_mech']

    

    history = [copy(ledger)]

    

    for t in range(0, T, dt):

        # === DRAFT ===

        # All configurations reachable in dt that satisfy:

        # - Constraint Template (arms rigid)

        # - Energy Partition Template (E_total constant or decreasing)

        

        # === VOTE ===

        # Gravity + joint tensions + damping select actual trajectory

        θ̈ = compute_accelerations(ledger['θ'], ledger['θ̇'])

        

        # Apply damping (if any)

        if damping > 0:

            θ̈_damped, ΔE_friction = apply_damping(ledger['θ̇'], damping)

            θ̈ = θ̈_damped

        else:

            ΔE_friction = [0, 0, 0]

        

        # === INK ===

        # Record irreversible energy loss (if damped)

        for i in range(3):

            ledger['Heat'][i] += ΔE_friction[i]

        

        # === LEDGER UPDATE ===

        # Update angles and velocities

        ledger['θ'], ledger['θ̇'] = integrate_step(

            ledger['θ'], ledger['θ̇'], θ̈, dt

        )

        

        # Update energy budget per segment

        ledger['KE'] = compute_KE_per_segment(ledger['θ'], ledger['θ̇'])

        ledger['PE'] = compute_PE_per_segment(ledger['θ'])

        ledger['E_mech'] = sum(ledger['KE']) + sum(ledger['PE'])

        

        # === VALIDATION ===

        # Energy Partition Template check

        E_check = ledger['E_mech'] + sum(ledger['Heat'])

        assert abs(E_check - ledger['E_total']) < ε, "Ledger violation!"

        

        history.append(copy(ledger))

    

    return history


What you track: θ, θ̇, KE per segment, PE per segment, Heat per joint, E_total



B10. What the Ledger Method Adds

Aspect

Classical Only

Classical + Ledger

Equations

Same

Same

Trajectory

Same

Same

Energy total

Can compute

Must compute

Energy per segment

Optional

Required

Constraints

Implicit (Lagrange multipliers)

Explicit (Template)

Irreversibility

Hidden in damping term

Explicit as Ink

Endpoint

"Motion stops"

"No gradients, energy fully dissipated"

Debugging

Check E_total

Check E_total AND segment budgets AND Ink trail

Forbidden states

Implicit in math

Explicit in Draft pruning



B11. Visualization: The Energy Sloshing

Classical visualization: Plot θ₁(t), θ₂(t), θ₃(t)

Ledger visualization: Plot energy budget over time

Time →

        

KE₁    ████░░░░░████░░░░░████░░░░░░░░

KE₂    ░░░░████░░░░░████░░░░░████░░░░

KE₃    ░░░░░░░░██░░░░░░░░██░░░░░░░██░

PE     ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓

Heat   ░░░░░░░░░░░░░░░░░░░░░░░░░░████ (damped case)

       ─────────────────────────────

E_tot  ════════════════════════════════ (constant line)


You can literally see energy flowing between segments, and in the damped case, draining into heat.



B12. The Chaos Question

Classical observation: Triple pendulum is chaotic. Tiny changes in initial conditions lead to wildly different trajectories.

Ledger interpretation:

The Draft space at each instant is enormous—many trajectories are allowed by the constraints. The Vote (gravity + tensions) selects one. But the selection is exquisitely sensitive to the exact state.

In Ledger terms:

  • The Draft space is well-defined (all configurations satisfying constraints and energy budget)

  • The Vote mechanism is deterministic (same physics every time)

  • But the input to the Vote (exact current state) determines which allowed trajectory is selected

  • Measurement uncertainty in initial conditions means we can't predict which Draft will be Voted into the Ledger

Chaos is not randomness. It's deterministic Vote selection operating on a state we can't measure precisely enough.



B13. Exercise for the Student

Task: Consider the three-segment system with:

  • m₁ = m₂ = m₃ = 1 kg

  • L₁ = L₂ = L₃ = 1 m

  • Initial condition: θ₁ = 90°, θ₂ = θ₃ = 0°, all θ̇ = 0

  • Light damping at each joint

Questions:

  1. What is the initial Draft space? What configurations are allowed at t = 0 + dt?

  2. What Votes occur during the first timestep? (List the interactions.)

  3. Where does Ink accumulate? Draw a rough sketch of Heat_joint1, Heat_joint2, Heat_joint3 over time.

  4. What is the Equilibrium state? What does the Ledger contain when the system is "done"?

  5. If your simulation shows E_total drifting upward, which Canon constraint is violated? What's wrong with your model?



B14. Meta-Reflection

The triple pendulum is a perfect test case because:

  1. The classical math is genuinely hard. Pages of Lagrangian algebra. This isn't a toy problem.

  2. The Ledger method doesn't simplify the math. The same coupled differential equations must be solved.

  3. But the Ledger method changes what you're obligated to track. Energy per segment. Ink per joint. Explicit constraints. Validation checks.

  4. And it changes what you can debug. When something goes wrong, you know where in the system the problem is—not just "energy isn't conserved" but "segment 2 is gaining energy it shouldn't have."

  5. And it transfers. Once you've done this for a triple pendulum, the same reasoning applies to:

    • Molecular dynamics (atoms connected by bonds)

    • Robotic arms (actuated multi-segment systems)

    • Supply chains (connected flows with constraints)

    • Neural pathways (signals propagating through connected nodes)

The grammar is the same. Draft → Vote → Ink → Ledger. The templates change. The discipline doesn't.



Henry, want me to generate actual simulation code (Python) that implements both approaches side by side, with visualization of the energy sloshing?


 
 
 

Recent Posts

See All
THE LEDGER MODEL — A Teaching Dialogue

Alex:  Okay, someone told me I need to understand this "Ledger Model" thing. But honestly? I'm skeptical. There are already a hundred frameworks for understanding reality. Why do I need another one? C

 
 
 

Comments

Rated 0 out of 5 stars.
No ratings yet

Add a rating

©2023 by The Road to Cope. Proudly created with Wix.com

bottom of page