Skip to content

Commit 61f828d

Browse files
DOC: Add academic use guide, remove dupe content from README.rst
Also add citation.cff
1 parent 5de08f9 commit 61f828d

File tree

5 files changed

+304
-144
lines changed

5 files changed

+304
-144
lines changed

README.rst

Lines changed: 24 additions & 119 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,16 @@ PySINDy
33

44
|BuildCI| |RTD| |PyPI| |Codecov| |JOSS1| |JOSS2| |DOI|
55

6-
**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).
911

1012
System identification
1113
---------------------
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.
1316
Dynamical systems are a flexible, well-studied class of mathematical objects for modeling systems evolving in time.
1417
SINDy is a model discovery method which uses *sparse regression* to infer nonlinear dynamical systems from measurement data.
1518
The resulting models are inherently *interpretable* and *generalizable*.
@@ -48,7 +51,8 @@ The PySINDy package revolves around the ``SINDy`` class which consists of three
4851
* ``feature_library``: specifies the candidate basis functions to be used to construct ``Theta(X)``
4952
* ``optimizer``: implements a sparse regression method for solving for ``Xi``
5053

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.
5256

5357
Example
5458
^^^^^^^
@@ -98,9 +102,8 @@ PySINDy provides numerous other features not shown here. We recommend the `featu
98102
Installation
99103
------------
100104

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.
104107
Pysindy also provides several extras:
105108

106109
cvxpy
@@ -115,114 +118,28 @@ sbr
115118

116119
Documentation
117120
-------------
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!
119128

120129
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:
121130

122131
.. image:: https://github.com/dynamicslab/pysindy/blob/master/docs/JOSS2/Fig3.png
123132

124133
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.
125134

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>`_.
136138

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.
140139

141140
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
204-
Academy of Sciences 113.15 (2016): 3932-3937.
205-
`[DOI] <http://dx.doi.org/10.1073/pnas.1517384113>`__
206-
207-
- Champion, K., Zheng, P., Aravkin, A. Y., Brunton, S. L., & Kutz, J. N. (2020).
208-
*A unified sparse optimization framework to learn parsimonious physics-informed
209-
models from data.* IEEE Access, 8, 169259-169271.
210-
`[DOI] <https://doi.org/10.1109/ACCESS.2020.3023625>`__
211-
212-
- Brunton, Steven L., Joshua L. Proctor, and J. Nathan Kutz.
213-
*Sparse identification of nonlinear dynamics with control (SINDYc).*
214-
IFAC-PapersOnLine 49.18 (2016): 710-715.
215-
`[DOI] <https://doi.org/10.1016/j.ifacol.2016.10.249>`__
216-
217-
- Kaheman, K., Kutz, J. N., & Brunton, S. L. (2020).
218-
*SINDy-PI: a robust algorithm for parallel implicit sparse identification
219-
of nonlinear dynamics.* Proceedings of the Royal Society A, 476(2242), 20200279.
220-
`[DOI] <https://doi.org/10.1098/rspa.2020.0279>`__
221-
222-
- Kaptanoglu, A. A., Callaham, J. L., Aravkin, A., Hansen, C. J., & Brunton, S. L. (2021).
223-
*Promoting global stability in data-driven models of quadratic nonlinear dynamics.*
224-
Physical Review Fluids, 6(9), 094401.
225-
`[DOI] <https://doi.org/10.1103/PhysRevFluids.6.094401>`__
141+
-----------------
142+
See `Academic use <https://pysindy.readthedocs.io/en/latest/academic.html>`_.
226143

227144

228145
Related packages
@@ -232,20 +149,8 @@ Related packages
232149
* `PySINDyGUI <https://github.com/hyumo/pysindy-gui>`_ - A slick-looking GUI for PySINDy.
233150
* `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.
234151
* `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
235153

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!
241-
242-
+-------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+
243-
| `billtubbs <https://github.com/kopytjuk>`_ | Bug fix `#68 <https://github.com/dynamicslab/pysindy/issues/68>`_ |
244-
+-------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+
245-
| `kopytjuk <https://github.com/kopytjuk>`_ | Concatenation feature for libraries `#72 <https://github.com/dynamicslab/pysindy/pull/72>`_ |
246-
+-------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+
247-
| `andgoldschmidt <https://github.com/andgoldschmidt>`_ | `derivative <https://derivative.readthedocs.io/en/latest/>`_ package for numerical differentiation `#85 <https://github.com/dynamicslab/pysindy/pull/85>`_ |
248-
+-------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+
249154

250155
.. |BuildCI| image:: https://github.com/dynamicslab/pysindy/actions/workflows/main.yml/badge.svg
251156
:target: https://github.com/dynamicslab/pysindy/actions/workflows/main.yml?query=branch%3Amaster

citation.cff

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
cff-version: 1.2.0
2+
title: pysindy
3+
message: >-
4+
If you use this software, please cite it using the
5+
metadata from this file.
6+
type: software
7+
authors:
8+
- given-names: Alan
9+
family-names: Kaptanoglu
10+
11+
affiliation: New York University
12+
- given-names: Jacob
13+
family-names: Stevens-Haas
14+
15+
affiliation: University of Washington
16+
orcid: 'https://orcid.org/0000-0003-4142-5550'
17+
- given-names: Kathleen
18+
family-names: Champion
19+
20+
- given-names: Brian
21+
family-names: de Silva
22+
23+
- given-names: Markus
24+
family-names: Quade
25+
26+
repository-code: 'https://github.com/dynamicslab/pysindy'
27+
url: 'https://pysindy.readthedocs.org/'
28+
abstract: >-
29+
PySINDy is a sparse regression package with several
30+
implementations for the Sparse Identification of Nonlinear
31+
Dynamical systems (SINDy) method introduced in Brunton et
32+
al. (2016).
33+
license: MIT

0 commit comments

Comments
 (0)