DynamicalSystems
— ModuleDynamicalSystems.jl is an award-winning Julia software library for nonlinear dynamics and nonlinear timeseries analysis. The current repository holds the documentation and exports all packages composing DynamicalSystems.jl.
To install it, run import Pkg; Pkg.add("DynamicalSystems")
.
DynamicalSystems.jl is part of JuliaDynamics, an organization dedicated to creating high quality scientific software.
All further information is provided in the documentation, which you can either find online or build locally by running the docs/make.jl
file.
If you have found this library useful, please consider starring it on GitHub. This gives us an accurate lower bound of the (satisfied) user count.
Introduction
Welcome to the documentation of DynamicalSystems.jl!
- If you have not used the library before, and would like to get started, then please read the overarching tutorial for the library.
- The contents page gives a summary of all packages that are part of the library.
- See the learning resources below to find out more resources about learning the library and using it in scientific research and/or education.
- Besides the formal algorithmic/scientific content of DynamicalSystems.jl (those in the contents) page, the library also provides an extensive suite for interactive or offline animations and visualizations dynamical systems. These are found in the visualizations page.
- The remaining of this introduction page discusses our goals with the library, how to participate as a user or developer, how to cite, and other relevant information (see the sections of the sidebar on the left).
Latest news
DynamicalSystems.jl moved to Julia 1.9+, and now exports visualization and interactive applications automatically once Makie (or Makie backends such as GLMakie) come into scope, using the new package extension system.
The package InteractiveDynamics.jl is now obsolete.
Learning resources
Textbook with DynamicalSystems.jl
We have written an undergraduate level textbook as an introduction to nonlinear dynamics. The text is written in an applied, hands-on manner, while still covering all fundamentals. The book pages are interlaced with real Julia code that uses DynamicalSystems.jl and is published in the Undergraduate Lecture Notes in Physics by Springer Nature:
- Nonlinear Dynamics: A concise introduction interlaced with code by G. Datseris & U. Parlitz.
Additional textbooks on nonlinear dynamics worth having a look are:
- Chaos in Dynamical Systems - E. Ott
- Nonlinear Time series Analysis - H. Kantz & T. Schreiber
Course on applied nonlinear dynamics and complex systems
We are developing a full course (targeting a graduate or undergraduate semester long course) on applied nonlinear dynamics, nonlinear timeseries analysis, and complex systems, using the packages of JuliaDynamics. DynamicalSystems.jl is part of this course.
The materials of the course are on GitHub: https://github.com/JuliaDynamics/NonlinearDynamicsComplexSystemsCourses
Our Goals
DynamicalSystems.jl was created with three goals in mind. The first was to fill the missing gap of a high quality and general purpose software for nonlinear dynamics, which can make the field of nonlinear dynamics accessible and reproducible. The second goal was to create a useful library where students and scientists from different fields may come and learn about methods of nonlinear dynamics.
The third goal was to fundamentally change the perception of the role of code in both scientific education as well as research. It is rarely the case that real, runnable code is shown in the classroom, because it is often long and messy. This is especially hurtful for nonlinear dynamics, a field where computer-assisted exploration is critical. And published work in this field fares even worse, with the overwhelming majority of published research not sharing the code used to create the paper. This makes reproducing these papers difficult, while some times straight-out impossible.
To achieve these goals we made DynamicalSystems.jl so that it is:
- Transparent: extra care is taken so that the source code of all functions is clear and easy to follow, while remaining as small and concise as possible.
- Intuitive: a software simple to use and understand makes experimentation easier.
- Easy to extend: this makes contributions more likely, and can motivate researchers to implement their method here, instead of leaving it in a cryptic script stored in some data server, never-to-be-published with the paper.
- Reliable: the algorithm implementations are tested extensively.
- Well-documented: all implemented algorithms provide a high-level scientific description of their functionality in their documentation string as well as references to scientific papers.
- General: all algorithms work just as well with any system, whether it is a simple continuous chaotic system, like the Lorenz model, or a high dimensional discrete system like coupled standard maps.
- Performant: written entirely in Julia, and taking advantage of some of the best packages within the language, DynamicalSystems.jl is really fast.
Citing
There is a (small) paper associated with DynamicalSystems.jl. If we have helped you in research that led to a publication, please be kind enough to cite it, using the DOI 10.21105/joss.00598
or the following BiBTeX entry:
@article{Datseris2018,
doi = {10.21105/joss.00598},
url = {https://doi.org/10.21105/joss.00598},
year = {2018},
month = {mar},
volume = {3},
number = {23},
pages = {598},
author = {George Datseris},
title = {DynamicalSystems.jl: A Julia software library for chaos and nonlinear dynamics},
journal = {Journal of Open Source Software}
}
however, we would really appreciate it if you also cited the textbook we wrote that DynamicalSystems.jl accompanies:
@book{DatserisParlitz2022,
doi = {10.1007/978-3-030-91032-7},
url = {https://doi.org/10.1007/978-3-030-91032-7},
year = {2022},
publisher = {Springer Nature},
author = {George Datseris and Ulrich Parlitz},
title = "Nonlinear dynamics: A concise introduction interlaced with code",
address = "Cham, Switzerland",
language = "en",
}
Asking questions
There are three options for asking questions:
- Join the official Julia discourse and ask a question under the category Specific Domains > Modelling & Simulations.
- Join our channel
#dynamics-bridged
in the Julia Slack workplace. - Open an issue directly on the GitHub page of DynamicalSystems.jl while providing a Minimal Working Example.
Contributing & Donating
Be sure to visit the Contributor Guide page, because you can help make this package better without having to write a single line of code! Also, if you find this package helpful please consider staring it on GitHub! This gives us an accurate lower bound of users that this package has already helped!
Finally, you can donate for the development of DynamicalSystems.jl. You can do that by adding bounties to existing issues on the GitHub repositories (you can open new issues as well). Every issue has an automatic way to create a bounty using Bountysource, see the first comment of each issue.
Issues with Bounties
Money that DynamicalSystems.jl obtains from awards, sponsors, or donators are converted into bounties for GitHub issues. The full list of issues that have a bounty is available here.
By solving these issues you not only contribute to open source, but you also get some pocket money to boot :)
Maintainers and Contributors
The DynamicalSystems.jl library is maintained by George Datseris, who is also curating and writing this documentation. The software code however is built from the contributions of several individuals. The list is too long to write and constantly update, so the best way to find out these contributions is to visit the GitHub page of each of the subpackages and checkout the "contributors" pages there.
Version numbers
The version of DynamicalSystems
by itself is a bit meaningless, because the module does not have any source code, besides re-exporting other modules. For transparency, the packages and versions used to build the documentation you are reading now are:
using Pkg
Pkg.status([
"DynamicalSystems",
"StateSpaceSets", "DynamicalSystemsBase", "RecurrenceAnalysis", "FractalDimensions", "DelayEmbeddings", "ComplexityMeasures", "TimeseriesSurrogates", "PredefinedDynamicalSystems", "Attractors", "ChaosTools", "CairoMakie",
];
mode = PKGMODE_MANIFEST
)
Status `~/work/DynamicalSystems.jl/DynamicalSystems.jl/docs/Manifest.toml`
[f3fd9213] Attractors v1.9.1
[13f3f980] CairoMakie v0.10.8
[608a59af] ChaosTools v3.1.0
[ab4b797d] ComplexityMeasures v2.8.0
[5732040d] DelayEmbeddings v2.7.3
[61744808] DynamicalSystems v3.2.1 `~/work/DynamicalSystems.jl/DynamicalSystems.jl`
[6e36e845] DynamicalSystemsBase v3.3.0
[4665ce21] FractalDimensions v1.7.2
[31e2f376] PredefinedDynamicalSystems v1.2.0
[639c3291] RecurrenceAnalysis v2.0.5
[40b095a5] StateSpaceSets v1.4.2
[c804724b] TimeseriesSurrogates v2.5.1
Because of the nature of the DynamicalSystems.jl library, the exported API contains hundreds of algorithm implementations, most of which are independent of each other. Our development approach is that breaking changes to these individual algorithms (due to e.g., better API design or better performance implementations or better default keyword arguments) can be done without incrementing any major version numbers. We increment major version numbers only for breaking changes that have wide impact over most of the DynamicalSystems.jl library.
Other NLD-relevant packages
Besides DynamicalSystems.jl, the Julia programming language has a thriving ecosystem with plenty of functionality that is relevant for nonlinear dynamics. We list some useful references below:
- DifferentialEquations.jl - Besides providing solvers for standard ODE systems (infastructure already used in DynamicalSystems.jl), it also has much more features like SDE solvers or uncertainty quantification.
- DiffEqSensitivity.jl - Discrete and continuous local sensitivity analysis, i.e., derivatives of the solutions of ODEs, or functions of the solutions, versus parameters, hosting various forward and adjoint methods as well as methods tailored to chaotic systems.
- GlobalSensitivity.jl Global sensitivity analysis assessing the effect of any input variables over a larger domain on the output.
- BifurcationKit.jl - Featureful toolkit for automated bifurcation analysis.
- NetworkDynamics.jl - Package for easily simulating dynamics on networks and transforming network systems into
ODEProblem
(that can be made directly into aContinuousDynamicalSystem
). - Agents.jl for agent based modelling.