SideBySideAnimator: physical space + phase/energy diagnostics, live#

The three animation helpers in physicskit.classical.visualizers.animations and physicskit.classical.visualizers.modal_analysis, applied to three already-familiar conservative systems, each paired with a live diagnostic of its own governing physics: a double pendulum (DoublePendulum, governed by its Euler-Lagrange equations of motion) shown with its physical rods next to a growing \((\theta_1, \dot\theta_1)\) phase trace; a precessing Kepler orbit (KeplerSystem, whose post-Newtonian term \(c_\mathrm{pn}/r^3\) in \(V(r)\) drives the precession) shown with its orbital path next to a growing energy trace; and a non-linear lattice chain (FPUTChain) shown via its live modal-energy bar chart \(E_k(t)\).

from physicskit.classical.systems.chains import FPUTChain
from physicskit.classical.systems.lagrangian import DoublePendulum
from physicskit.classical.systems.newtonian import KeplerSystem
from physicskit.classical.visualizers.animations import orbit_trace_animation, pendulum_animation
from physicskit.classical.visualizers.modal_analysis import animate_modal_energies


def build_pendulum_animation(stride=500):
    pendulum = DoublePendulum([2.0, 1.0], [0.5, -0.3])
    result = pendulum.integrate((0, 3.0), dt=1e-1, method="implicit_midpoint")
    side_by_side = pendulum_animation(result, pendulum.positions, mode="phase", stride=stride, figsize=(9, 4))
    return side_by_side.build(interval=30)


def build_orbit_animation(stride=20):
    kepler = KeplerSystem.from_orbital_elements(a=1.0, e=0.4)
    result = kepler.integrate((0, 20), dt=1e-1, method="yoshida4")
    side_by_side = orbit_trace_animation(result, mode="energy", stride=stride, figsize=(9, 4))
    return side_by_side.build(interval=30)


def build_modal_energy_animation(stride=10):
    chain = FPUTChain(n=16, beta=0.7, mode=1, amplitude=0.5)
    result = chain.integrate((0, 400), dt=0.1, method="yoshida4")
    return animate_modal_energies(chain, result, stride=stride)

Double pendulum: physical rods + growing phase trace#

pendulum_anim = build_pendulum_animation()

Precessing Kepler orbit: orbital path + growing energy trace#

orbit_anim = build_orbit_animation()

Lattice chain: live modal-energy bar chart#

modal_anim = build_modal_energy_animation()

Total running time of the script: (0 minutes 20.551 seconds)

Gallery generated by Sphinx-Gallery