Skip to content

Systems · Continuous

Continuous systems

The largest family: 118 ODE systems, all subclasses of ContinuousSystem. Each declares its parameters and dimension at class level and defines the vector field in one symbolic _equations method; JiTCODE compiles it to C on first use and the binary is cached across sessions (see the compilation pipeline).

import tsdynamics as ts

ross = ts.Rossler()                              # a=0.2, b=0.2, c=5.7
traj = ross.integrate(final_time=200.0, dt=0.02)
traj["x"]                                        # named components

Categories

Category Count Flavor
chaotic_attractors 47 The classics: Lorenz, Rössler, Chen, Chua, Sprott flows, Duffing, Thomas, ...
chem_bio_systems 14 Chemical oscillators and excitable media: Brusselator, FitzHugh–Nagumo, ...
climate_geophysics 9 Atmosphere and geodynamo models: Lorenz-84, Lorenz-96, Rikitake, ...
coupled_systems 14 Coupled and driven oscillator networks
exotic_systems 15 Hyperchaos, multiscroll, and other unusual flows
oscillatory_systems 8 Tori, Lissajous figures, stick–slip and relaxation oscillators
physical_systems 8 Mechanical and electrical models: pendula, circuits
population_dynamics 3 Ecological flows: predator–prey and competition models

Each system has its own generated page in this section with equations, defaults, and a phase portrait.

Integrating

sys.integrate(
    final_time=100.0,    # end of the window
    dt=0.02,             # OUTPUT grid only — the stepper is adaptive
    t0=0.0,              # start time (warm restarts allowed)
    ic=None,             # initial state; falls back to self.ic, then random
    method="RK45",       # "RK45"/"dopri5", "DOP853", "LSODA", "VODE"
    rtol=1e-6, atol=1e-9,
) -> Trajectory

lyapunov_spectrum(final_time=200.0, dt=0.1, burn_in=50.0, n_exp=None, ...) computes the spectrum from compiled variational equations — see Lyapunov spectra.

Variable-dimension systems

A few systems (Lorenz-96, Kuramoto–Sivashinsky, MultiChua) have a parameter that sets the number of equations. Such parameters are structural — baked into the compiled binary rather than adjustable at runtime:

l96 = ts.Lorenz96(N=10, f=8.0)     # N is structural; f is a control param

Changing f is free; changing N triggers one compile per new value (each cached separately).

See also