JuliaDynamics / ChaosTools.jl

Tools for the exploration of chaos and nonlinear dynamics
https://juliadynamics.github.io/DynamicalSystemsDocs.jl/chaostools/stable/
MIT License
188 stars 36 forks source link

Discovering governing equations from data by sparse identification of nonlinear dynamical systems #173

Closed Datseris closed 2 years ago

Datseris commented 3 years ago

Recent data analysis method : https://www.pnas.org/content/113/15/3932

Quoting the abstract:

Extracting governing equations from data is a central challenge in many diverse areas of science and engineering. Data are abundant whereas models often remain elusive, as in climate science, neuroscience, ecology, finance, and epidemiology, to name only a few examples. In this work, we combine sparsity-promoting techniques and machine learning with nonlinear dynamical systems to discover governing equations from noisy measurement data. The only assumption about the structure of the model is that there are only a few important terms that govern the dynamics, so that the equations are sparse in the space of possible functions; this assumption holds for many physical systems in an appropriate basis. In particular, we use sparse regression to determine the fewest terms in the dynamic governing equations required to accurately represent the data. This results in parsimonious models that balance accuracy with model complexity to avoid overfitting. We demonstrate the algorithm on a wide range of problems, from simple canonical systems, including linear and nonlinear oscillators and the chaotic Lorenz system, to the fluid vortex shedding behind an obstacle. The fluid example illustrates the ability of this method to discover the underlying dynamics of a system that took experts in the community nearly 30 years to resolve. We also show that this method generalizes to parameterized systems and systems that are time-varying or have external forcing.

Thankfully for us, there is a full Python implementation that is MIT licensed: https://github.com/dynamicslab/pysindy


(probably a good idea to start group these methods with other related concepts like DyCa and broomhead king )

SudoMishra commented 2 years ago

Is anyone working on this? I am trying to implement this in Julia and add it to ChaosTools.jl

Datseris commented 2 years ago

Ask around in the diff eq channel on Slack. There may be related implementations on uncovering the underlying equations. Isn't this what neural diff eq does, at least partly?

Datseris commented 2 years ago

Perhaps it makes more sense to start a new package like EquationDiscovery.jl

Datseris commented 2 years ago

See also this post: https://discourse.julialang.org/t/genetic-programming-for-predicting-equations-of-motion/8211 about 4 years ago we wanted to do a BSc thesis on this topic.

SudoMishra commented 2 years ago

The first thing that I wanted to do was implement the code here: https://github.com/dynamicslab/pysindy in Julia. I'll ask around in the diffeq channel for some implementations, too.

Datseris commented 2 years ago

Sounds good to me. When you have some kind of codebase implemented we can see whether this should go here or into a new package.

dynamic-queries commented 2 years ago

Perhaps I am late to the discussion, but If I am not wrong https://github.com/SciML/DataDrivenDiffEq.jl has implementations for SINDY and other DMD methods :D.

Datseris commented 2 years ago

Yeap indeed. Closing this as there is now a dedicated Julia package for this kind of business.