A package for the sparse identification of nonlinear dynamical systems from data
OTHER License
Bot releases are hidden (Show)
Published by akaptano over 1 year ago
Published by akaptano over 1 year ago
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.
Published by Jacob-Stevens-Haas about 2 years ago
Should fix the compatibility errors with scikit-learn >= 1.0
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:
AxesArray
objects to pysindy directly__getitem__
and __setitem__
to AxesArray
to handle slicing correctly andAxesWarning
s when trying to create an AxesArray
with missing orPublished 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.
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.
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, .
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:
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.
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.
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.
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()
.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).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.normalize
option previously provided by our optimizers is deprecated. Please use the normalize_columns
argument instead.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
.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.
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.
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.
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.
SINDy.simulate
for discrete systems with multiple control inputsPublished by briandesilva almost 4 years ago
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.
SINDy.simulate
STLSQ
and SR3
optimizersPublished 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).
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:
SINDy.simulate
(previously control inputs had to be callable)n_jobs
parameter from the SINDy
class