Toda Lattice

The Toda lattice is a prime example of an completely-integrable system, i.e. a Hamiltonian system evolving in $\mathbb{R}^{2n}$ that has $n$ Poisson-commuting invariants of motion (see [3]). It is named after Morikazu Toda who used it to model a one-dimensional crystal [5].

The Hamiltonian of the Toda lattice takes the following form:

\[ H(q, p) = \sum_{n\in\mathbb{Z}}\left( \frac{p_n^2}{2} + \alpha e^{q_n - q_{n+1}} \right).\]

In practice we work with a finite number of particles $N$ and impose periodic boundary conditions:

\[\begin{aligned} q_{n+N} & \equiv q_n \\ p_{n+N} & \equiv p_n. \end{aligned}\]

Hence we have:

\[ H(q, p) = \sum_{n=1}^{N-1} \left( \frac{p_n^2}{2} + \alpha e^{q_n - q_{n+1}} \right) + \frac{p_N^2}{2} + \alpha e^{q_N - q_1}.\]

We can model the evolution of a thin pulse in this system:

problem = GeometricProblems.TodaLattice.hodeproblem(; tspan = (0.0, 2000.))
sol = integrate(problem, ImplicitMidpoint())

time_steps = 0:10:length(sol.q)

fig = Figure()
ax = Axis(fig[1, 1])
mblue = RGBf(31 / 256, 119 / 256, 180 / 256)
lines!(ax, sol.q[0, :], label = "t = $(sol.t[0])", color = mblue)
framerate = 30
mblue =
record(fig, "toda_animation.mp4", time_steps;
    framerate = framerate) do time_step
    empty!(ax)
    lines!(ax, sol.q[time_step, :], label = "t = $(sol.t[time_step])", color = mblue)
    ylims!(ax, 0., 1.)
    axislegend(ax; position = (1.01, 1.5), labelsize = 8)
end
Docs.HTML("""<video mute autoplay loop controls src="toda_animation.mp4" />""")