Releases: dynamicslab/pysindy
PDE-FIND and weak SINDy in arbitrary dimensions
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
- See this Youtube playlist for tips on using pysindy in practice and examples of new functionality.
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+
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
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
.
Add cvxpy to requirements
This release simply moves cvxpy
from an optional dependency to a required one. This package is needed to use the TrappingSR3
optimizer.
Trapping SINDy++
This version removes auxiliary data files needed only for examples to make PySINDy small enough to deploy on PyPI.
Trapping SINDy+
This release fixes a minor bug in the README file which prevented the previous release from being properly deployed to PyPI.
Trapping SINDy
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
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
andSR3
optimizers - Added some fancy plots to the differentiation notebook
- Minor bug fixes
[Bug fix] Simulate with control inputs
This release fixes a minor issue causing SINDy.simulate
to fail when vectors of control inputs are passed in (see #94).
Scikit-time objects
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 theSINDy
class - Added tests for SR3 trimming options
- Updated some docstrings
- Restructure examples/README content
- Minor formatting updates for the new version of black