pyodeint 0.10.8
Python binding for odeint from boost.
License: BSD

pyodeint
========

.. image:: http://hackspett.bjodah.se/api/badges/6/status.svg
   :target: http://hackspett.bjodah.se/repos/6
   :alt: Build status
.. image:: https://img.shields.io/pypi/v/pyodeint.svg
   :target: https://pypi.python.org/pypi/pyodeint
   :alt: PyPI version
.. image:: https://img.shields.io/pypi/l/pyodeint.svg
   :target: https://github.com/bjodah/pyodeint/blob/master/LICENSE
   :alt: License
.. image:: http://hera.physchem.kth.se/~pyodeint/branches/master/htmlcov/coverage.svg
   :target: http://hera.physchem.kth.se/~pyodeint/branches/master/htmlcov
   :alt: coverage
.. image:: https://zenodo.org/badge/41257136.svg
   :target: https://zenodo.org/badge/latestdoi/41257136

`pyodeint <https://github.com/bjodah/pyodeint>`_ provides a
`Python <http://www.python.org>`_ binding to `odeint <http://www.odeint.com>`_.
Currently, the following steppers are exposed:

- ``rosenbrock4``: 4th order Rosenbrock (implicit multistep) stepper
- ``dopri5``: 5th order DOPRI5 (explicit runge-kutta)
- ``bs``: Bulirsch-Stoer stepper (modified midpoint rule).

The Rosenbrock4 stepper requires that the user provides a routine for
calculating the Jacobian.

You may also want to know that you can use ``pyodeint`` from
`pyodesys <https://github.com/bjodah/pyodesys>`_
which can e.g. derive the Jacobian analytically for you (pyodesys also provides
plotting functions, C++ code-generation and more).

Documentation
-------------
Autogenerated API documentation for latest stable release is found here:
`<https://bjodah.github.io/pyodeint/latest>`_
(and the development version for the current master branch are found here:
`<http://hera.physchem.kth.se/~pyodeint/branches/master/html>`_).


Installation
------------
Simplest way to install is to use the `conda package manager <http://conda.pydata.org/docs/>`_:

::

   $ conda install -c conda-forge pyodeint pytest
   $ python -m pytest --pyargs pyodeint

tests should pass.

Binary distribution is available here:
`<https://anaconda.org/bjodah/pyodeint>`_

Source distribution is available here:
`<https://pypi.python.org/pypi/pyodeint>`_

here is an example of how to build from source::

   $ CPATH=/opt/boost_1_65_0/include python3 setup.py build_ext -i


Examples
--------
The classic van der Pol oscillator (see `examples/van_der_pol.py <examples/van_der_pol.py>`_)

.. code:: python

   >>> from pyodeint import integrate_adaptive  # also: integrate_predefined
   >>> mu = 1.0
   >>> def f(t, y, dydt):
   ...     dydt[0] = y[1]
   ...     dydt[1] = -y[0] + mu*y[1]*(1 - y[0]**2)
   ... 
   >>> def j(t, y, Jmat, dfdt, fy=None):
   ...     Jmat[0, 0] = 0
   ...     Jmat[0, 1] = 1
   ...     Jmat[1, 0] = -1 -mu*2*y[1]*y[0]
   ...     Jmat[1, 1] = mu*(1 - y[0]**2)
   ...     dfdt[0] = 0
   ...     dfdt[1] = 0
   ...
   >>> y0 = [1, 0]; tend=10.0; dt0=1e-8; t0=0.0; atol=1e-8; rtol=1e-8
   >>> tout, yout, info = integrate_adaptive(f, j, y0, t0, tend, dt0, atol, rtol,
   ...                                       method='rosenbrock4', nsteps=1000)
   >>> import matplotlib.pyplot as plt
   >>> series = plt.plot(tout, yout)
   >>> plt.show()  # doctest: +SKIP


.. image:: https://raw.githubusercontent.com/bjodah/pyodeint/master/examples/van_der_pol.png

For more examples see `examples/ <https://github.com/bjodah/pyodeint/tree/master/examples>`_, and rendered jupyter notebooks here:
`<http://hera.physchem.kth.se/~pyodeint/branches/master/examples>`_

See also
--------
`pyodesys <https://github.com/bjodah/pyodesys>`_ for how to automatically
generate the jacobian callback function (and easily swtich to other solvers).

License
-------
The source code is Open Source and is released under the very permissive
"simplified (2-clause) BSD license". See ``LICENSE`` for further details.
Contributors are welcome to suggest improvements at https://github.com/bjodah/pyodeint

Author
------
Björn I. Dahlgren, contact:

- gmail address: bjodah