Closed JonasKoziorek closed 1 month ago
In our last call, have we decided that minimal period should always be called by periodic orbit returning algorithms? Or not, and we leave it to the user to call it?
We have decided to always complete the orbit on creation and also always check the local stability. Doing minimal period check shouldn't introduce too much overhead.
I think that minimal period should be called by default on creation. We can add a keyword argument to enable the user to disable this (and the local stability check).
In a different PR, I will allow the user to enable/disable minimal period check and stability check.
I am thinking whether it is useful to have function minimal_period -> minT_PO
that returns a new PO with the minimal period or whether it would be enough to have minimal_period -> minT
that just returns the minimal period (right now there are both but the second is not exported). If the period is minimal by default in the constructor, the user will not have the need to ever call the first function. What do you think is the best for the user?
I think minimal_period -> minT_PO
makes more sense. Since the struct is immutable and it references the inner vectors, constructing a new version is practically zero cost. In any case, this doesn't matter so much, since we agreed that this function is called internally, so it is not much use for the user to call it. However, it is important to allow to disable the call for performance (which we can do in a different PR).
In a different PR we can make a high level function periodic_orbit
and separate a low level function _periodic_orbit
. The latter just finds the orbit. While, periodic_orbit
first calls _periodic_orbit
and then calls both the stability function and the minimal period function. This allows us to detach the internal implementations from the estimation of stability and minimal period. We can do something like:
function _periodic_orbit(...)
return PO, stability, minimalperiod
for the internal function. By default stability, minimalperiod
can be both missing
. The high level function periodic_orbit
then checks and computes the stability and minimal period. This allows the internal algorithms to communitcate the stability of the orbit, if it is known/found while finding the orbit, but also not communicate it if it isn't.
oh, by the way, I think in most literature what we call "minimal period" is called "principal period". I like minimal more, but we should just put a quick note in the docstring of minimal_period
about this.
oh, by the way, I think in most literature what we call "minimal period" is called "principal period". I like minimal more, but we should just put a quick note in the docstring of minimal_period about this.
I mentioned prime, principal and fundamental period.
fantastic
I reuse the Poincare map
current_crossing_time
to compute the minimal period of a PO. I create the hyperplane by stepping shortly along the trajectory and using the difference as a normal vector.