I have recently started on a journey to create a package
ChaosTools.jl that has common useful tools used in the study of nonlinear dynamics and chaos, like e.g. lyapunov exponents, attractor dimension estimation and other things.
I quickly realized that there wasn’t any API around that had a clear and intuitive way to create and explore Dynamical Systems, which gave me the idea to create a unifying package (
DynamicalSystems.jl) to provide this API. This would allow other people from other fields to use it as a base and create other kind of packages for the exploration of other dynamical systems. (Notice, both my repos are currently on a very basic state)
However, so far I have been developing by myself, and I am not sure about how to divide functionality, what functionality I should attribute to where and so on and so forth. For example, The DynamicalSystems.jl has a type
ContinuousDynamicalSystem which contains the system state, the equations of motion as well as the Jacobian function (and matrix). I chose to include the latter because the Jacobian is the second most used quantity in any kind of calculation involving a continuous dynamical system (standard example: lyapunov exponents).
Another example is that any calculation of lyapunov exponents will be in ChaosTools. Such a calculation requires for example the tangent dynamics of the vector field. Where should this tangent dynamics information be? At
With this post I would like to:
- invite people to collaborate on the projects and participate on the decisions on what should be the core types and/or what should they contain.
- Discuss with other developers about their opinions on how such a feat should be done. Should everything become a single package? Should the functionality be divided into 2 (or more)? I am personally leaning towards the idea of having this
DynamicalSystemsas some “core” and using the module
Reexportin the other one.
I really appreciate any feedback!