JuliaDynamics / DynamicalSystems.jl

Award winning software library for nonlinear dynamics and nonlinear timeseries analysis

Home Page:https://juliadynamics.github.io/DynamicalSystemsDocs.jl/dynamicalsystems/dev/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Question on Lyapunov exponent implementation

bojohnson5 opened this issue · comments

I've been reading through the papers cited in the Lyapunov section of the docs and was wondering if I could get some clarification. From my understanding, the parallelepiped in tangent space is from the tangent space of the manifold formed from the equations of motion. It's also my understanding that the manifold is formed from just the coordinates of the system q. For a system I'm working with, I have first derivatives of the position coordinates q but also that of the conjugate momenta p. Does the implementation of Lyapunov exponents for DynamicalSystems.jl make sense in finding these values for conjugate momenta as well as the position coordinates?

In Hamiltonian mechanics q and p are independent variables. There is no difference whatsoever regarding the algorithm implementation. Imagine that instead of xdot, ydot, zdot you have xdot, pdot. Its just two variables whose rate of change forms the equations of motion.

The conjugacy has implications on the symmetries and dimensionality of the phase space, but this is of no concern for the algorithm.

From my understanding, the parallelepiped in tangent space is from the tangent space of the manifold formed from the equations of motion.

That is correct.

It's also my understanding that the manifold is formed from just the coordinates of the system q.

That is incorrect. The manifold exists on the phase space, not the coordinate space (which is a strict subset of the phase space).

(for example, the implication of the conjugacy on the exponents is that the set of the Lyapunov exponents is symmetric around zero. For every positive exponent +λ you also have a negative one -λ)

I appreciate the feedback, that's very helpful!

Anytime. If you have more questions, just hit us up here or in the Slack channel.

Here is an example:

julia> using DynamicalSystems

julia> ds = Systems.henonheiles()
4-dimensional continuous dynamical system
 state:       [0.0, -0.25, 0.42081, 0.0]
 e.o.m.:      hheom!
 in-place?    true
 jacobian:    hhjacob!
 parameters:  nothing

julia> lyapunovs(ds, 5000)
4-element Array{Float64,1}:
  0.061825186004956935
  0.0011905278004693503
 -0.0012976825745669985
 -0.06171814846400695

Henon Heiles is a Hamiltonian system: https://juliadynamics.github.io/DynamicalSystems.jl/dev/ds/predefined/#DynamicalSystemsBase.Systems.henonheiles