# Introduction

DynamicalSystems.jl is a Julia software library for the exploration of chaos and nonlinear dynamics.

The current documentation was built with the following versions

 * DelayEmbeddings ........... 0.2.0
* RecurrenceAnalysis ........ 0.5.1
* DynamicalSystemsBase ...... 1.1.0
* ChaosTools ................ 1.3.0


See the News page for recent updates!

Introductory textbooks

Our library assumes some basic knowledge of nonlinear dynamics and complex systems.

If you are new to the field but want to learn more, we can suggest the following textbooks as introductions:

• Nonlinear Dynamics And Chaos - S. Strogatz
• An Exploration of Dynamical Systems and Chaos - J. Argyris et al.
• Chaos in Dynamical Systems - E. Ott

Jupyter Notebooks / Tutorials

In this repository you can find various Jupyter notebooks that have been used as introductory tutorials for DynamicalSystems.jl!

## Contents

### Dynamical Systems

Under the package DynamicalSystemsBase:

• Intuitive, consistent APIs for the definition of general dynamical systems, under a unified struct DynamicalSystem. The following combinations are possible:

• Continuous or Discrete systems. Continuous systems use DifferentialEquations.jl for solving the ODE problem.
• In-place or out-of-place (large versus small systems).
• Auto-differentiated or not (for the Jacobian function).
• Automatic "completion" of the dynamics of the system with numerically computed Jacobians, in case they are not provided by the user.
• Robust implementations of all kinds of integrators, that evolve the system, many states of the system, or even deviation vectors. See the advanced documentation for this.
• Library of predefined well-known dynamical systems that have been used extensively in scientific research.

### ChaosTools

ChaosTools is a package that has many algorithms for chaotic dynamical systems. All algorithms are independent of each other but they are also not expansive enough to be a standalone package.

Please see the overview section for a full list of features. Here is a quick summary:

• Poincare S.O.S. and orbit diagrams
• Lyapunov Exponents
• Entropies and Dimensions
• Lyapunov exponent of a timeseries (numerical data)
• Finding Fixed Points of Maps
• GALI (Generalized Alignment Index) for distinguishing chaotic and regular behavior
• Nonlinear timeseries analysis

### Delay Coordinates Embedding

Under the package DelayEmbeddings:

### RecurrenceAnalysis

RecurrenceAnalysis offers tools to compute and analyze Recurrence Plots, a field called Recurrence Quantification Analysis.

## Our Goals

The ultimate goal for DynamicalSystems.jl is to be a useful software library for students and scientists working on chaos, nonlinear dynamics and in general dynamical systems. The word "library" is intended in the literal sense: a place where people go to learn things.

With DynamicalSystems.jl we try to

1. Be concise, intuitive, and general. All functions we offer work just as well with any system, whether it is a simple continuous chaotic system, like the Lorenz attractor, or a high dimensional discrete map like coupled standard maps.
2. Be accurate, reliable and performant.
3. Be transparent with respect to what is happening "under the hood", i.e. be clear about exactly what each function call does. We take care of this aspect in many ways; by being well-documented, giving references to scientific papers and having clear source code.

## Installation

Simply use ]add DynamicalSystems to install everything.

For more advanced users, you can choose which packages to install and use at a high level. The package DynamicalSystems serves two purposes: it re-exports everything under a single module DynamicalSystems and it also builds the documentation.

All packages depend on DelayEmbeddings which defines core numeric data structures and methods. For example RecurrenceAnalysis and TimeseriesPrediction depend only on DelayEmbeddings. Packages that require equations of motion also depend on DynamicalSystemsBase, like for example ChaosTools.

If you only need functionality of a specific package you can install only that one, e.g. ]add RecurrenceAnalysis and only the minimum amount of requirements will be installed.

## Citing

There is a (very 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}
}