You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
**PySINDy** is a sparse regression package with several implementations for the Sparse Identification of Nonlinear Dynamical systems (SINDy) method introduced in Brunton et al. (2016a), including the unified optimization approach of Champion et al. (2019), SINDy with control from Brunton et al. (2016b), Trapping SINDy from Kaptanoglu et al. (2021), SINDy-PI from Kaheman et al. (2020), PDE-FIND from Rudy et al. (2017), and so on. A comprehensive literature review is given in de Silva et al. (2020) and Kaptanoglu, de Silva et al. (2021).
7
-
8
-
.. contents:: Table of contents
6
+
**PySINDy** is a sparse regression package with several implementations for the
7
+
Sparse Identification of Nonlinear Dynamical systems (SINDy) method introduced
8
+
in Brunton et al. (2016a).
9
+
It also includes a variety of other methods from related literature.
10
+
A comprehensive literature review is given in de Silva et al. (2020) and Kaptanoglu, de Silva et al. (2021).
9
11
10
12
System identification
11
13
---------------------
12
-
System identification refers to the process of leveraging measurement data to infer governing equations, in the form of dynamical systems, describing the data. Once discovered, these equations can make predictions about future states, can inform control inputs, or can enable the theoretical study using analytical techniques.
14
+
System identification refers to the process of leveraging measurement data to infer governing equations, in the form of dynamical systems, describing the data.
15
+
Once discovered, these equations can make predictions about future states, can inform control inputs, or can enable the theoretical study using analytical techniques.
13
16
Dynamical systems are a flexible, well-studied class of mathematical objects for modeling systems evolving in time.
14
17
SINDy is a model discovery method which uses *sparse regression* to infer nonlinear dynamical systems from measurement data.
15
18
The resulting models are inherently *interpretable* and *generalizable*.
@@ -48,7 +51,8 @@ The PySINDy package revolves around the ``SINDy`` class which consists of three
48
51
* ``feature_library``: specifies the candidate basis functions to be used to construct ``Theta(X)``
49
52
* ``optimizer``: implements a sparse regression method for solving for ``Xi``
50
53
51
-
Once a ``SINDy`` object has been created it must be fit to measurement data, similar to a ``scikit-learn`` model. It can then be used to predict derivatives given new measurements, evolve novel initial conditions forward in time, and more. PySINDy has been written to be as compatible with ``scikit-learn`` objects and methods as possible.
54
+
Once a ``SINDy`` object has been created it must be fit to measurement data, similar to a ``scikit-learn`` model.
55
+
It can then be used to predict derivatives given new measurements, evolve novel initial conditions forward in time, and more.
52
56
53
57
Example
54
58
^^^^^^^
@@ -98,9 +102,8 @@ PySINDy provides numerous other features not shown here. We recommend the `featu
98
102
Installation
99
103
------------
100
104
101
-
The preferred way to install is with pip or conda e.g. ``pip install pysindy``
102
-
103
-
You may have to add ``--user`` option to the above lines.
105
+
The preferred way to install is with pip or conda e.g. ``pip install pysindy``.
106
+
You may have to add ``--user`` option.
104
107
Pysindy also provides several extras:
105
108
106
109
cvxpy
@@ -115,114 +118,28 @@ sbr
115
118
116
119
Documentation
117
120
-------------
118
-
The documentation site for PySINDy can be found `here <https://pysindy.readthedocs.io/en/latest/>`__. There are numerous `examples <https://pysindy.readthedocs.io/en/latest/examples/index.html>`_ of PySINDy in action to help you get started. Examples are also available as `Jupyter notebooks <https://github.com/dynamicslab/pysindy/tree/master/examples>`__. A video overview of PySINDy can be found on `Youtube <https://www.youtube.com/watch?v=DvbbXX8Bd90>`__. We have also created a `video playlist <https://www.youtube.com/playlist?list=PLN90bHJU-JLoOfEk0KyBs2qLTV7OkMZ25>`__ with practical PySINDy tips.
121
+
The documentation site for PySINDy can be found `here <https://pysindy.readthedocs.io/en/latest/>`__.
122
+
There are numerous `examples <https://pysindy.readthedocs.io/en/latest/examples/index.html>`_ of PySINDy in action to help you get started.
123
+
Examples are also available as `Jupyter notebooks <https://github.com/dynamicslab/pysindy/tree/master/examples>`__.
124
+
A video overview of PySINDy can be found on `Youtube <https://www.youtube.com/watch?v=DvbbXX8Bd90>`__.
125
+
We have also created a `video playlist <https://www.youtube.com/playlist?list=PLN90bHJU-JLoOfEk0KyBs2qLTV7OkMZ25>`__ with practical PySINDy tips.
126
+
127
+
If something is unclear, please open an issue. To discuss your particular dynamics problem, open a discussion. Make sure to format your example as python code in github!
119
128
120
129
PySINDy implements a lot of advanced functionality that may be overwhelming for new users or folks who are unfamiliar with these methods. Below (see here if image does not render https://github.com/dynamicslab/pysindy/blob/master/docs/JOSS2/Fig3.png), we provide a helpful flowchart for figuring out which methods to use, given the characteristics of your dataset:
This flow chart summarizes how ``PySINDy`` users can start with a dataset and systematically choose the proper candidate library and sparse regression optimizer that are tailored for a specific scientific task. The ``GeneralizedLibrary`` class allows for tensoring, concatenating, and otherwise combining many different candidate libraries.
125
134
126
-
Community guidelines
127
-
--------------------
128
-
129
-
Contributing
130
-
^^^^^^^^^^^^^^^^^^^^^
131
-
See `Contributor guide <https://pysindy.readthedocs.io/en/latest/contributing.html>`_
132
-
133
-
Reporting issues or bugs
134
-
^^^^^^^^^^^^^^^^^^^^^^^^
135
-
If you find a bug in the code or want to request a new feature, please open an issue.
135
+
Contributions:
136
+
-----------------------------
137
+
See `Contributor guide <https://pysindy.readthedocs.io/en/latest/contributing.html>`_.
136
138
137
-
Getting help
138
-
^^^^^^^^^^^^
139
-
For help using PySINDy please consult the `documentation <https://pysindy.readthedocs.io/en/latest/>`__ and/or our `examples <https://github.com/dynamicslab/pysindy/tree/master/examples>`__, or create an issue.
140
139
141
140
Citing PySINDy
142
-
--------------
143
-
PySINDy has been published in the Journal of Open Source Software (JOSS). The paper can be found `here <https://joss.theoj.org/papers/10.21105/joss.02104>`__.
144
-
145
-
If you use PySINDy in your work, please cite it using the following two references:
146
-
147
-
Brian M. de Silva, Kathleen Champion, Markus Quade, Jean-Christophe Loiseau, J. Nathan Kutz, and Steven L. Brunton., (2020). *PySINDy: A Python package for the sparse identification of nonlinear dynamical systems from data.* Journal of Open Source Software, 5(49), 2104, https://doi.org/10.21105/joss.02104
148
-
149
-
Kaptanoglu et al., (2022). PySINDy: A comprehensive Python package for robust sparse system identification. Journal of Open Source Software, 7(69), 3994, https://doi.org/10.21105/joss.03994
150
-
151
-
Bibtex:
152
-
153
-
.. code-block:: text
154
-
155
-
@article{desilva2020,
156
-
doi = {10.21105/joss.02104},
157
-
url = {https://doi.org/10.21105/joss.02104},
158
-
year = {2020},
159
-
publisher = {The Open Journal},
160
-
volume = {5},
161
-
number = {49},
162
-
pages = {2104},
163
-
author = {Brian de Silva and Kathleen Champion and Markus Quade and Jean-Christophe Loiseau and J. Kutz and Steven Brunton},
164
-
title = {PySINDy: A Python package for the sparse identification of nonlinear dynamical systems from data},
165
-
journal = {Journal of Open Source Software}
166
-
}
167
-
168
-
Bibtex:
169
-
170
-
.. code-block:: text
171
-
172
-
@article{Kaptanoglu2022,
173
-
doi = {10.21105/joss.03994},
174
-
url = {https://doi.org/10.21105/joss.03994},
175
-
year = {2022},
176
-
publisher = {The Open Journal},
177
-
volume = {7},
178
-
number = {69},
179
-
pages = {3994},
180
-
author = {Alan A. Kaptanoglu and Brian M. de Silva and Urban Fasel and Kadierdan Kaheman and Andy J. Goldschmidt and Jared Callaham and Charles B. Delahunt and Zachary G. Nicolaou and Kathleen Champion and Jean-Christophe Loiseau and J. Nathan Kutz and Steven L. Brunton},
181
-
title = {PySINDy: A comprehensive Python package for robust sparse system identification},
182
-
journal = {Journal of Open Source Software}
183
-
}
184
-
185
-
186
-
References
187
-
----------------------
188
-
- de Silva, Brian M., Kathleen Champion, Markus Quade,
189
-
Jean-Christophe Loiseau, J. Nathan Kutz, and Steven L. Brunton.
190
-
*PySINDy: a Python package for the sparse identification of
191
-
nonlinear dynamics from data.* arXiv preprint arXiv:2004.08424 (2020)
192
-
`[arXiv] <https://arxiv.org/abs/2004.08424>`__
193
-
194
-
- Kaptanoglu, Alan A., Brian M. de Silva, Urban Fasel, Kadierdan Kaheman, Andy J. Goldschmidt
195
-
Jared L. Callaham, Charles B. Delahunt, Zachary G. Nicolaou, Kathleen Champion,
196
-
Jean-Christophe Loiseau, J. Nathan Kutz, and Steven L. Brunton.
197
-
*PySINDy: A comprehensive Python package for robust sparse system identification.*
198
-
arXiv preprint arXiv:2111.08481 (2021).
199
-
`[arXiv] <https://arxiv.org/abs/2111.08481>`__
200
-
201
-
- Brunton, Steven L., Joshua L. Proctor, and J. Nathan Kutz.
202
-
*Discovering governing equations from data by sparse identification
203
-
of nonlinear dynamical systems.* Proceedings of the National
See `Academic use <https://pysindy.readthedocs.io/en/latest/academic.html>`_.
226
143
227
144
228
145
Related packages
@@ -232,20 +149,8 @@ Related packages
232
149
* `PySINDyGUI <https://github.com/hyumo/pysindy-gui>`_ - A slick-looking GUI for PySINDy.
233
150
* `SEED <https://github.com/M-Vause/SEED2.0>`_ - Software for the Extraction of Equations from Data: a GUI for many of the methods provided by PySINDy.
234
151
* `SymINDy <https://github.com/andreikitaitsev/SymINDy/>`_ - A Python package combining SINDy with genetic programming-based symbolic regression, used for the functions library optimization.
152
+
* `derivative <https://derivative.readthedocs.io/en/latest/>`_ - A Python package for differentiating (and optionally, smoothing) data, used by pysindy
235
153
236
-
Contributors
237
-
------------
238
-
This repository is a fork from `original work <https://github.com/Ohjeah/sparsereg>`_ by `Markus Quade <https://github.com/Ohjeah>`_.
239
-
240
-
Thanks to the members of the community who have contributed to PySINDy!
0 commit comments