Skip to content

System Identification for Noisy Data and PDEs

Compare
Choose a tag to compare
@briandesilva briandesilva released this 05 Dec 19:29
· 791 commits to master since this release
c80e50f

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 like PolynomialLibrary() * 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 the normalize_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 to solve_ivp. Note that solve_ivp defaults to the RK45 numerical solver. To reproduce old examples that used odeint, use solve_ivp with the following argument: method='LSODA', atol and rtol below 1e-12. This is the default behavior when calling SINDy.simulate.