pysindy

A package for the sparse identification of nonlinear dynamical systems from data

OTHER License

Downloads
42.1K
Stars
1.3K
Committers
20

Bot releases are hidden (Show)

pysindy - Small fixes to docs and scs version Latest Release

Published by akaptano over 1 year ago

What's Changed

  • Think we have now actually fixed the example notebook documentation building so that they should all render properly on the readthedocs documentation site.
  • Fixed the SCS version requirements to avoid errors in TrappingSR3 with certain versions of Python.
  • Switched CI to test newer Python version 3.8, 3.9, 3.10.
pysindy - Small doc fixes

Published by akaptano over 1 year ago

What's Changed

  • Made fixes to the example notebook documentation building so that they should all render properly on the readthedocs documentation site.
pysindy - Parametric library and benchmarks

Published by akaptano over 1 year ago

What's Changed

pysindy - v1.7.2

Published by akaptano about 2 years ago

What's Changed

Added new mixed-integer optimization algorithm called MIOSR.
Added new external unit tests of all the jupyter notebook examples.
Made Gurobipy and cvxpy optional dependencies. Gurobipy is required for using MIOSR and cvxpy is needed for using inequality-constrained optimizers, the trapping SINDy algorithm, or the SINDy-PI algorithm.
Ensembling functionality moved to the "EnsembleOptimizer", see updated Example 1 notebook for this.

pysindy - v1.7.1

Published by Jacob-Stevens-Haas about 2 years ago

Should fix the compatibility errors with scikit-learn >= 1.0

What's Changed

pysindy - AxesArray and EnsemblingOptimizer

Published by Jacob-Stevens-Haas over 2 years ago

This is a pre-release of major version 2 of SINDY

This pre-release preserves a significant amount of backwards compatibility that
will be removed in 2.0.0.

Internal array structure is made explicit via the
AxesArray class. AxesArray objects carry axis label attributes, such as
arr.ax_time, as well as shape attributes, such as arr.n_spatial.
Currently, these attributes are incorrect when slicing, but are preserved in
nearly all other operations.

This release also adds an EnsemblingOptimizer class to handle data and library
bagging. While passing ensembling parameters via feature libraries and SINDy
objects is still supported, they simply dispatch to an EnsemblingOptimizer.
Stable versions of 2.x will remove this backwards compatibility, forcing the
use of the EnsemblingOptimizer. In addition, ensembling both data and
library terms creates each ensemble member from one data bag and one library
bag. Previously, each ensemble member came from one library bag and another
ensemble of data bags, which required nested loops and $O(n_{bags}^2)$ run
time.

Problems that might be fixed before 2.0.0:

  • Allow passing AxesArray objects to pysindy directly
  • add __getitem__ and __setitem__ to AxesArray to handle slicing correctly and
    re-enable AxesWarnings when trying to create an AxesArray with missing or
    incompatible axes labels.
  • Fix binder links to example documentation
    Additional changes possible in version 2.0.0:
  • New method for SINDyPI?
  • Derivative methods now also return smoothed X values.
pysindy - Revamped weak SINDy

Published by akaptano over 2 years ago

We have implemented new techniques for computing the weak formulation of SINDy, reducing the runtime by at least an order of magnitude. The "num_pts_per_domain" option in the weak formulation is now deprecated, and see the revamped Example 12 notebook for the new performance. This release also addresses Issues #155 #158 #159 #164. We have some minor fixes planned for the future, and hope to have a version of model.predict and model.simulate working for the weak formulation in the coming few months.

pysindy - Fixed small bug with Generalized Library

Published by akaptano over 2 years ago

The GeneralizedLibrary class had a bug if libraries were tensored together while using the ensembling functionality. This small patch fixes that issue.

pysindy - Finalized second PySINDy JOSS paper

Published by akaptano over 2 years ago

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, DOI.

pysindy - Verbose option for optimizers and other fixes

Published by akaptano almost 3 years ago

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:

  1. Fixed a minor test error (see Issue #149)
  2. Fixed an issue when using multiple_trajectories or ensemble flags with PDEs and Weak PDEs, see Issue #148
  3. Added Matplotlib to the dependencies so that (hopefully) the binder notebooks are now working properly online.
  4. Fixed some math notation in the optimizer documentations.
pysindy - PDE-FIND and weak SINDy in arbitrary dimensions

Published by akaptano almost 3 years ago

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.
pysindy - System Identification for Noisy Data and PDEs+

Published by briandesilva almost 3 years ago

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

pysindy - System Identification for Noisy Data and PDEs

Published by briandesilva almost 3 years ago

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.
pysindy - Add cvxpy to requirements

Published by briandesilva over 3 years ago

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

pysindy - Trapping SINDy++

Published by briandesilva over 3 years ago

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

pysindy - Trapping SINDy+

Published by briandesilva over 3 years ago

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

pysindy - Trapping SINDy

Published by briandesilva over 3 years ago

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
pysindy - Constrained SR3

Published by briandesilva almost 4 years ago

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
pysindy - [Bug fix] Simulate with control inputs

Published by briandesilva about 4 years ago

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

pysindy - Scikit-time objects

Published by briandesilva about 4 years ago

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