Skip to content

Releases: dynamicslab/pysindy

PDE-FIND and weak SINDy in arbitrary dimensions

06 Jan 05:54
6d908c3
Compare
Choose a tag to compare

This release allows for differentiation along specific axes, revamps the PDE-FIND and weak SINDy functionalities to work in arbitrary spatial dimensions, and moves all the array-reshaping to the internal code so the user-interface is easier. Finite difference coefficients are now computed on the fly depending on the derivative order "d" and accuracy order "order", i.e. finite differences now work for arbitrarily high derivative and accuracy order.

References

Other updates

  • Added a SpectralDerivative() class for spectral differentiation at faster speed than is available with the "derivative" python package.
  • Finite Differences now have periodic boundary condition support.
  • Cleaned up the example notebooks a bit.

System Identification for Noisy Data and PDEs+

05 Dec 19:38
01a0bf9
Compare
Choose a tag to compare

This release fixes a minor bug in the README file which prevented the previous release from being properly deployed to PyPI.

System Identification for Noisy Data and PDEs

05 Dec 19:29
c80e50f
Compare
Choose a tag to compare

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.

Add cvxpy to requirements

08 Jul 02:34
Compare
Choose a tag to compare

This release simply moves cvxpy from an optional dependency to a required one. This package is needed to use the TrappingSR3 optimizer.

Trapping SINDy++

08 Jun 02:04
Compare
Choose a tag to compare

This version removes auxiliary data files needed only for examples to make PySINDy small enough to deploy on PyPI.

Trapping SINDy+

07 Jun 14:33
db705ba
Compare
Choose a tag to compare

This release fixes a minor bug in the README file which prevented the previous release from being properly deployed to PyPI.

Trapping SINDy

06 Jun 22:38
72dde9a
Compare
Choose a tag to compare

This release introduces the TrappingSINDy optimizer, which "enables the identification of models that, by construction, only produce bounded trajectories." To use TrappingSINDy you will need to install the cvxpy package.
It includes a new notebook where TrappingSINDy is applied to standard fluid dynamics problems.

Please see this paper for more details about the new method.

Starting with this release, PySINDy will begin requiring Python 3.7 or above.

Other updates

  • Bug fix for SINDy.simulate for discrete systems with multiple control inputs

Constrained SR3

09 Dec 03:05
Compare
Choose a tag to compare

Major changes

This release introduces the ConstrainedSR3 optimizer. This is an enhanced version of the SR3 optimizer which allows one to specify linear equality constraints on the learned coefficients.

For example, if you know that the equations you are trying to learn look like

x' = a + by
y' = c - bx

(i.e. that the coefficient on y should be the negative of the coefficient on x), you could enforce that constraint using ConstrainedSR3.

Additionally, ConstrainedSR3 allows you to specify a different threshold parameter for each library function coefficient. This is an improvement on our other optimizers which all take a fixed regularization constant that is applied uniformly to all coefficients. You can use this feature to choose a higher threshold for, say, quadratic interaction terms like x*x or x*y than you do for linear terms, for example.

We also have added a notebook demonstrating these new features on a real world plasma dataset.

Other Updates

  • Fix bug with extrapolating control inputs outside of original time domain with SINDy.simulate
  • It is now possible to specify an initial guess for coefficients with the STLSQ and SR3 optimizers
  • Added some fancy plots to the differentiation notebook
  • Minor bug fixes

[Bug fix] Simulate with control inputs

02 Oct 03:36
f6cac08
Compare
Choose a tag to compare

This release fixes a minor issue causing SINDy.simulate to fail when vectors of control inputs are passed in (see #94).

Scikit-time objects

19 Sep 00:52
Compare
Choose a tag to compare

The main update in this release is the addition of two objects meant to conform to the API for Sckit-time: SINDyEstimator and SINDyModel. We also added a notebook showing how these two objects may be used.

We also made some other minor changes:

  • Add support for vector arguments for control inputs to SINDy.simulate (previously control inputs had to be callable)
  • Removed extraneous n_jobs parameter from the SINDy class
  • Added tests for SR3 trimming options
  • Updated some docstrings
  • Restructure examples/README content
  • Minor formatting updates for the new version of black