Skip to content

JuliaDynamics/CriticalTransitions.jl

Repository files navigation

CriticalTransitions.jl

Tests

Code Style: Blue Aqua QA JET

A Julia package for the numerical investigation of noise- and rate-induced transitions in dynamical systems.

Building on DynamicalSystems.jl and DifferentialEquations.jl, this package aims to provide a toolbox for dynamical systems under time-dependent forcing, with a focus on tipping phenomena and metastability.

Usage

See package documentation.

Check out the new RateSystem type for nonautonomous dynamics, released with v0.7! 🚀

Example: Bistable FitzHugh-Nagumo model

using CriticalTransitions

# Define your system dynamics
function fitzhugh_nagumo(u, p, t)
    x, y = u
    ϵ, β = p

    dx = (-x^3 + x - y)/ϵ
    dy = -β*y + x

    return SVector{2}([dx, dy])
end

# System parameters (ε, β)
params = [0.1, 3.0]
noise_strength = 0.02
initial_state = zeros(2)

# Construct a stochastic system
# (here with isotropic Gaussian noise)
sys = CoupledSDEs(fitzhugh_nagumo, initial_state, params; noise_strength)

# Run a sample trajectory
traj = trajectory(sys, 10.0)

# Compute minimum action path using gMAM algorithm
instanton = geometric_min_action_method(sys, initial_state, current_state(sys))

# Turn into a non-autonomous dynamical system
# where the parameter β changes in time
forcing = ForcingProfile(:tanh)
sys_t = RateSystem(sys, forcing, 2; forcing_duration=5.0)

# ... and more, check out the documentation!

Developers: Reyk Börner, Orjan Ameye, Ryan Deeley, Raphael Römer and George Datseris

Thanks to Jeroen Wouters, Calvin Nesbitt, Tobias Grafke and Oliver Mehling

This package was created as part of the CriticalEarth project.