Releases: dynamicslab/pysindy
Fixed small bug with Generalized Library
The GeneralizedLibrary class had a bug if libraries were tensored together while using the ensembling functionality. This small patch fixes that issue.
Finalized second PySINDy JOSS paper
This is PySINDy's second major release, representing new source code, documentation-generating scripts, examples, unit tests, and a markdown version of the new PySINDy JOSS submission openjournals/joss-reviews#3994. There is already a DOI via Zenodo, .
Verbose option for optimizers and other fixes
This minor release adds a verbose option to all the optimizers so users can optionally track the error terms in the various optimization problems. See example Jupyter notebook 1 for a simple use case. It also makes some minor fixes, including:
- Fixed a minor test error (see Issue #149)
- Fixed an issue when using multiple_trajectories or ensemble flags with PDEs and Weak PDEs, see Issue #148
- Added Matplotlib to the dependencies so that (hopefully) the binder notebooks are now working properly online.
- Fixed some math notation in the optimizer documentations.
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
TensoredLibraryclass 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
GeneralizedLibraryclass 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_columnsparameter, 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
normalizeoption previously provided by our optimizers is deprecated. Please use thenormalize_columnsargument 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
odeinttosolve_ivp. Note thatsolve_ivpdefaults to the RK45 numerical solver. To reproduce old examples that usedodeint, usesolve_ivpwith the following argument: method='LSODA',atolandrtolbelow 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.simulatefor discrete systems with multiple control inputs