Open Datseris opened 1 year ago
This is guaranteed wrong; the stroboscopic map exponent depends strongly on d0
which doesn't make sense if d0
is small enoough.
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!
):
function step!(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) || break
end
end
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..