System Identification for Noisy Data and PDEs
This release introduces a wide range of new and advanced functionality for PySINDy users, which enables the identification of implicit differential equations (SINDy-PI), partial differential equations (PDE-FIND), and weak-formulation differential equations for both ODEs and PDEs. Several new sparse regression optimizers are added, system identification with inequality constraints is now implemented, and ensembling methods are available with all the optimizers, significantly improving performance on noisy data. We include several new Jupyter notebook examples where these advanced features are explained and used for system identification, and additionally revamp a number of existing example notebooks.
References
- Please see this paper for an overview of all the new tools available in this new release.
- See this Youtube playlist for tips on using pysindy in practice and examples of new functionality.
Other updates
- Added a
TensoredLibrary
class which allows one to combine two feature libraries together by taking all possible pairs of terms and use multiplication syntax likePolynomialLibrary() * FourierLibrary()
. - Additionally, we implement a
GeneralizedLibrary
class for concatenating and tensoring N different feature libraries together. Also allows each of the feature libraries to only use a subset of the input variables, and users can specify which of the libraries to tensor product together, for maximum flexibility (see Issue #134). - All optimizers now have the
normalize_columns
parameter, which normalizes each column of the feature library to magnitude 1 before performing the optimization. This often helps on systems with a wide range of scales. - The scikit-learn bug mentioned in Issues #124, #129, #130, and #131 is now fixed, so users can use PySINDy with scikit-learn versions >= 1.0.
- The
normalize
option previously provided by our optimizers is deprecated. Please use thenormalize_columns
argument instead. - A large number of common ODEs have been added to the utils/odes.py file for reuse, and we would be happy if users would like to add additional systems.
- PySINDy has switched default ODE solvers from
odeint
tosolve_ivp
. Note thatsolve_ivp
defaults to the RK45 numerical solver. To reproduce old examples that usedodeint
, usesolve_ivp
with the following argument: method='LSODA',atol
andrtol
below 1e-12. This is the default behavior when callingSINDy.simulate
.