You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Alright, with new design of DynamicalSystems.jl v3 it is rather straightforward to compute the maximum lyapunov exponent of arbitrary dynamical systems. Below, I am attaching a code that computes the Lyapunov exponent of the duffing oscillator first as a normal system and then as a stroboscopic map:
Now, as you see above, the exponent we get from the stroboscopic map does not match the period times the exponent of the normal system. Theory says it "should". I am attaching here two pages form the book of Politi and Pikovsky
where they say that for a stroboscopic map one expects that the Lyapunov exponent is the period times the exponent of the normal time system.
However, I've checked the code extensively and I am not sure there is a mistake. The code does what its supposed to do, treating the stroboscopic map as a deterministic iterated map. I hope there is some easy to find bug somewhere so that we don't have to dig deep into theory to check if the statement of the book is actually correct..
The text was updated successfully, but these errors were encountered:
It is probably the internal integrator. If I use Vern9 with tolerance 1e-15 the result is correct. In this case the integrator takes tiny tiny steps and hence does not miss the stroboscopic poincare plane by any meaningful amount. In small tolerances the integrator exceeds the plane by a lot.
I believe that either I don't understand what step!(integ, T, true) does, or that it is not do what I think it does: step, and stop, the integrator at exactly T.
I also had some problems with step! when the default time step is too big. What does the integrator is iterating with small steps until a stopping condition is met (in add_tstop!):
functionstep!(integ::DEIntegrator, dt, stop_at_tdt =false)
(dt * integ.tdir) <0*oneunit(dt) &&error("Cannot step backward.")
t = integ.t
next_t = t + dt
stop_at_tdt &&add_tstop!(integ, next_t)
while integ.t * integ.tdir < next_t * integ.tdir
step!(integ)
integ.sol.retcode in (ReturnCode.Default, ReturnCode.Success) ||breakendend
I do not remember the system, but the add_tstop! condition was systematically ignored. Maybe it depends on the solver. In any case, it seems that OrdinaryDiffEq does the job of checking that it stops exactly at T in the function handle_tstop!(integrator) .
It is worth having a look at what is going on with the precision. This way we can also give some guideline on the parameters that should be set for some systems.
Alright, with new design of DynamicalSystems.jl v3 it is rather straightforward to compute the maximum lyapunov exponent of arbitrary dynamical systems. Below, I am attaching a code that computes the Lyapunov exponent of the duffing oscillator first as a normal system and then as a stroboscopic map:
The output is:
Now, as you see above, the exponent we get from the stroboscopic map does not match the period times the exponent of the normal system. Theory says it "should". I am attaching here two pages form the book of Politi and Pikovsky
Lyapunov_exponents.pdf
where they say that for a stroboscopic map one expects that the Lyapunov exponent is the period times the exponent of the normal time system.
However, I've checked the code extensively and I am not sure there is a mistake. The code does what its supposed to do, treating the stroboscopic map as a deterministic iterated map. I hope there is some easy to find bug somewhere so that we don't have to dig deep into theory to check if the statement of the book is actually correct..
The text was updated successfully, but these errors were encountered: