-
Crucial bugfix of the
trajectory
function. While it is documented that the default value ofu
is thecurrent_state(ds)
, the source code was incorrectly usinginitial_state(ds)
. This is now fixed andcurrent_state
is used as was stated. Note thatt0
remains asinitial_time
as this is how it was documented. -
The
initial_state(PoincareMap)
used to return the initial state of the parent system which was almost never on the Poincare plane. Now it properly returns the first state on the Poincare plane, which coincides withcurrent_state(PoincareMap)
right after constructing the map. -
PoincareMap
had extra clarifications in the docstring about what's going on.
Brand new dynamical system CoupledSDEs
that represents stochastic differential equations. It also comes with a dedicated documentation page.
- OrdinaryDiffEq.jl dependency reduced to OrdinaryDiffEqTsit5.jl.
- Updated to StateSpaceSets.jl v2: now the keyword
container
can be given to thetrajectory
function.
A new function jacobian
that generates Jacobian rule for any ds<:CoreDynamicalSystem
via
automatic differentiation with ForwardDiff.jl
.
Even more amazing level of integration with ModelingToolkit.jl!
- Now it is possible to partially set specific state variables by
providing a dictionary or vector of pairs that map indices to variables in
set_state!
orreinit!
. - Partial setting of states via providing a dictionary also works in
reinit!
. - Partial setting of states also works when initializing a
ParallelDynamicalSystem
by providing a vector of dictionaries or vector of pairs. - It was already possible to provide a dictionary of parameter indices to values
in
set_parameters!
, now it was made more clear in the docstring. - bugfix where
reinit!
orset_state!
of continuous time out of place parallel dynamical systems was not working correctly. - Dynamical systems are now broadacastable, e.g., you can do
observe_state.(ds, (a, b, c))
. - Fixed a bug where
set_state!(ds, val, index)
only worked for in-place systems.
Symbolic indices used in observe_state
can now also be used in trajectory
.
It is possible to specify time to observe a state at now.
New convenience functions state_name, parameter_name
for obtaining a name::String
that matches the indexed state/parameter.
Dynamical systems that have been constructed from DEProblem
s that themselves
have been constructed from ModelingToolkit.jl keep a reference to the symbolic
model and all symbolic variables. Accessing a DynamicalSystem
using symbolic variables
is possible via the functions observe_state
, set_state!
,
current_parameter
and set_parameter!
.
The referenced MTK model corresponding to the dynamical system can be obtained with
model = referrenced_sciml_model(ds::DynamicalSystem)
.
See also the online overarching tutorial for an example.
At the moment this is only possible for CoupledODEs
and its derivative systems, as these are the only systems that can be made by a DEProblem
, however it should be easy to allow e.g., DeterministicIteratedMap
to be created by a DiscreteProblem
.
Also:
- Crucial bugfix for
successful_step
that was not working properly for discrete time systems.
Better error handling for diffeq
and CoupledODEs
: passing a keyword was possible but should not have been.
Sorry, I forgot what goes here!
The keyword Dt
can now be used instead of Δt
in trajectory
if access to unicode isn't available.
New error checking functionality added via successful_step
. Returns true
if the last step!
call to ds
was successful, false
otherwise.
For continuous time systems this uses DifferentialEquations.jl error checking,for discrete time it checks if any variable is Inf
or NaN
. Defaults to true
for other types.
Complete rewrite of the package. The DynamicalSystems.jl v3 changelog summarizes the highlights. Here we will list all changes to this specific package.
- The
Discrete/ContinuousDynamicalSystem
constructors no longer accept a Jacobian. Use the dedicatedTangentDynamicalSystem
for something that represents the tangent space and can be given to downstream functions such aslyapunovspectrum
. As a result, none of the predefined systems come with a hand coded Jacobian. The function is still available for manual use nevertheless. - The keyword
diffeq
does not exist anymore and is not given to any downstream functions such aslyapunovspectrum
. The only struct that cares about DifferentialEquations.jl arguments isCoupledODEs
so it is the only one that acceptsdiffeq
keyword. trajectory
now returns the actual trajectory and the time vector:X, t = trajectory(ds, ...)
.- There is no longer a special type for 1D discrete time dynamical systems. You will have to use an 1-element
SVector
for them. - The
Systems
submodule has been completely removed. Now a package PredefinedDynamicalSystems.jl exists. It is untested and it is not recommended to use in any other setting other a demonstrational example. TheDynamicalSystems
module exportsSystems
as an alias toPredefinedDynamicalSystems
, so that should not be breaking if you were usingDynamicalSystems
. - The default ODE solver is now
Tsit5
from OrdinaryDiffEq.jl. SimpleDiffEq.jl is no longer used. It is almost certain that the evolution of all chaotic systems will yield ever-so-slightly different trajectories due to the different default integrator.
DynamicalSystem
now defines a proper, well-thought-out interface that is implemented from all its concrete subtypes. See its docstring for details.- All
DynamicalSystem
implementations are now "integrators": mutable objects that are stepped withstep!
. They need to be deepcopied for parallelizing via threads. ParallelDynamicalSystem
now works for any kind of dynamical system.trajectory
works for any conceivable thing that extends theDynamicalSystem
interface- New struct
ArbitrarySteppable
for linking DynamicalSystems.jl with other libraries like Agents.jl.
DiscreteDynamicalSystem -> DeterministicIteratedMap
ContinuousDynamicalSystem -> CoupledODEs
parallel_integrator -> ParallelDynamicalSystem
tangent_integrator -> TangentDynamicalSystem
stroboscopicmap -> StroboscopicMap
poincaremap -> PoincareMap
- All code related to the poincare map integrator have been moved here from ChaosTools.jl.
- New functions
get_parameters
andget_parameter
that simplify interacting with the parameters of a dynamical system (and drastically simplify source code ofset_parameter!
).
- Integer Δt is now enforced in trajectory calculation of discrete systems. Not doing so led to silently incorrect behavior that the user wouldn't expect.
- Fixed
set_parameter!
not working forprojected_integrator
.
- New function
get_states
that returns an iterator over states contained in aparallel_integrator
.
- Added new
GeneralizedDynamicalSystem
abstract type that is an umbrella term.
- Added new
current_time(integ)
function. - Added
trajectory
forprojected_integrator
andstroboscopicmap
. - Source code of
trajectory
has been expended and generalized. It should now work out of the box for any object that defines the integrator API, as defined in the DynamicalSystems.jl documentation. - Added new boolean function
isdiscretetime
that works for all systems/integrators.
- Added new type of integrator:
stroboscopicmap
. - Added new type of integrator:
projected_integrator
.
- Added several new famous systems.
get_state(parallel_integrator, k)
now returns a view in case the integrator is in-place.
- Fix
set_state!
not working for in-place parallel integrator
- Now
set_parameter!
can also work with parameter containers that are composite types. - Added some new pre-defined systems used in synchronization studies, like the Kuramoto model or coupled Roessler oscillators or nonlinearly coupled logistic maps.
- The integrator
SimpleTsit5
is also exported. This integrator is non-adaptive, while the default integrator of the librarySimpleATsit5
is adaptive.
- The keyword
dt
oftrajectory
has been renamed toΔt
. This keyword had conflicts with the options of DifferentialEquations.jl. No warning can be thrown for this change, and users still usingdt
will have it silently propagated as keyword to the diffeq solvers.
- More performant version of
set_deviations!(integ, Q)
whenQ
is the result of a QR-decomposition.
- Added
grebogi_map
dynamical system.
trajectory
now supports keywordsave_idxs
.
- New system: Thomas cyclically symmetric
- Arbitrary keywords can be propagated into
trajectory
for discrete systems (which are unused, this is simply for unifying syntax with continuous systems)
- Bugfix of
ODEProblem(ContinuousDynamicalSystem)
where the parameters of the system where not passed properly. - Move to Julia 1.5.
- Allow
ODEProblem(cds)
to take a different state optionally
- Critical bugfix/mentioning of how 1-D systems work.
- Added function that provides initial conditions for henon-heiles system at given energy,
Systems.henonheiles_ics(E, n)
- More famous systems and a lot more Jacobians to existing systems (#93)
- added Pomaeu-Manneville map into the famous systems.
- The specialized integrators (tangent & parallel) now implement an internal norm that only evaluates norm of the main state, instead of using the other parallel states or deviation vectors. (#86)
- Bunch of bugfixes and performance improvements (see git history)
In version 1.2
we have moved to SciMLBase 5.0+
. In addition to that we have changed the default integrator to SimpleATsit5
from module SimpleDiffEq
. This is not a breaking change and you can use any of the previous integrators. It must be stated though that numeric results you obtained using the default integrator will now be slightly different.
In addition, be sure that you have version SimpleDiffEq 0.3.0
or greater (which is what DynamicalSystemsBase 1.2.3
guarantees).
- All functionality related to
neighborhood
,reconstruct
andStateSpaceSet
has moved to a new package:DelayEmbeddings
. It is reexported byDynamicalSystemsBase
, which is now (as the name suggests) the basis package for definingDynamicalSystem
.
- First major release (long term stability).
orthonormal
is 100x more performant.- Super duper cool new printing for
DynamicalSystem
. - Added tests etc. and now we are sure we can support Sparse matrix jacobians.
- Testing of specialized integrators with DiffEqCallbacks.
- Parameters are printed in the
DynamicalSystem
.
-
Dropped support of Julia versions < 0.7
-
Reconstruction
does not exist anymore. Instead,reconstruct
is used in it's place. The function now also always returns aStateSpaceSet
. -
In the
reconstruct
function,D
now stands for the number of temporal neighbors which is one less than the dimensionality of the reconstructed space.- This change was done because it is more intuitive and more scalable when considering multiple timeseries or spatio temporal timeseries.
-
Re-worked the internals of
DynamicalSystem
(although the API remained the same): NowDynamicalSystem
only stores what is absolutely necessary and creates directly integrators when need be. A "problem" is not stored anymore. This also lead to re-working of how keyword arguments are handled. I am very happy to say that these changes reduced tremendously the source code!
-
Exported a 3-argument
reinit!(integ, u0::AbstractVector, Q0::AbstractMatrix)
that takesQ0
as the third argument and reinits safely any integrator. -
reconstruct
creates internally a subtype ofAbstractEmbedding
. These objects can be used as functors to create thei
-th reconstructed vector on demand. This also improved the source code clarity significantly. -
tangent_
andparallel_integrator
can now accept callbacks for continuous systems. In general you could pass to the constructors any keyword acceptable byinit
of DiffEq.
some of the following changes are breaking
state
function no longer exists and has been merged intoget_state
.- Created specialized tangent integrator for discrete systems, which is about 20% faster. This is a "breaking" change.
- Created functions
get_state
,get_deviations
,set_state!
andset_deviations!
that always correctly return either the system state or the deviation vectors (in a form of a matrix) from any integrator!!! - Dynamical Systems with matrices as states are no longer available.
- Added note in reconstruction about how many temporal neighbors there are.
- Theiler window is now part of the
neighborhood
function - Methods that estimate parameters for
Reconstruction
have moved back toChaosTools
.
- Multi-dimensional Reconstruction
- Multi-time Reconstruction
- Multi-dimensional, multi-time Reconstruction
- Methods for estimating Reconstruction parameters are now here.
- Reconstruction from StateSpaceSet
- Corrected name
helies -> heiles
- Reconstructions now have field
delay
which is the delay time/times and are instead parameterized on the type of the delay.
- Complete overhaul of all of DynamicalSystems. More details are in the official documentation (because I would had to write 10 pages of changelog otherwise). The constructors also changed signature.
- All
DynamicalSystem
s are now immutable and contain a problem, a jacobian and a jacobian matrix. - Advantage of Multiple dispatch is taken to distinguish between in-place, out of place, continuous, discrete, heaven, hell, whatever.
- All internals use
integrator
andstep!
. variational_integrator
renamed totangent_integrator
.
- Massive performance boost of up to 8x in system evolution of continuous systems.
- increased the interaction between DiffEq and DynamicalSystems.
- A dedicated integrator for discrete systems that is super fast is now employed by default. It follows the same high level DiffEq interface but the implementation is totally internal.
- Out-of-place continuous systems are allowed. All famous systems are actually out of place now.
parallel_integrator
added.
- All system type definitions have changed. See the new documentation strings
or the new docs! We are now having the syntax
eom!(du, u, p, t)
and the parameters are passed directly into the function!!!
- Improved the algorithm that converts a StateSpaceSet to a Matrix. It is now not only faster, but also more clear!
- (Breaking?) Moved
estimate_delay
to ChaosTools.jl - Added
gissinger
system. - Added
columns
function for columns of dataset.
- By default now all
ContinuousDynamicalSystems
are solved usingVern9
as a solver and tolerances of1e-9
, both abstol and reltol.
- Added energy conservation option to the Henon Heiles system
- All
ContinuousDS
evolution now internally passes thrgouh theget_sol
function, which improves the clarity and stability of the ecosystem greatly!!! - Improved stability in propagating
solve
keywords. get_sol
now returns solution and time vector for generality purposes.get_sol
is now also exported.- Internal
ODEProblem
constructor correctly merges different callbacks.
- Bugfix of
eltype
ofReconstruction
. - Added
circlemap
toSystems
. - Bugfix on
StateSpaceSet
that incorrect methods were being called due to missing<:
. - Method
Base.getindex(d::AbstractStateSpaceSet{D,T}, ::Colon, j<:AbstractVector{Int})
now exists! - Added function
evolve!
. - Clearly state that we do not support matrices in the equations of motion.
- Bugfixes regarding ODEProblem.
- Orders of magnitude speed-up in conversions between
Matrix
andStateSpaceSet
, because now methods usetranspose
internally and onlyreinterpret
.
- Added
jacobian
function - Removed
EomVector
nonsense. - Now
trajectory
correctly gives equi-spaced points when the ODEProblem has "special" callbacks.
- The type
ContinuousDS
has been completely overhauled.- Now the type contains an
ODEProblem
instead ofstate
andeom!
. - Now the form of equations of motion is expected as
(t, u, du)
. - We are able to handle non-autonomous systems with "simple" time dependence.
- This also allows to use callbacks natively tied to the system! This means that you can create the simple form of Hybrid systems!
- Now the type contains an
- Added function
minmaxima
that calculates maxima and minima at the same time for datasets.
- Minor docstring improvements and IO improvements.
- Datasets can now be accessed with ranges as well.
- Added the Duffing oscillator in the predefined systems.
- Changed 🐛 where
get_solver
would remove the entry. - Added the possibility to provide a state in all evolving functions.
- Added Shinriki oscillator (chaotic 3D flow with period doubling).
Initial release, see: https://juliadynamics.github.io/DynamicalSystems.jl/v0.8.0/ for the features up to this point.