Skip to main content

Finite difference weights for any derivative order on arbitrarily spaced grids.

Project description

finitediff
==========
.. image:: http://hera.physchem.kth.se:9090/api/badges/bjodah/finitediff/status.svg
:target: http://hera.physchem.kth.se:9090/bjodah/finitediff
:alt: Build status
.. image:: https://img.shields.io/pypi/v/finitediff.svg
:target: https://pypi.python.org/pypi/finitediff
:alt: PyPI version
.. image:: https://img.shields.io/badge/python-2.7,3.4,3.5-blue.svg
:target: https://www.python.org/
:alt: Python version
.. image:: https://img.shields.io/pypi/l/finitediff.svg
:target: https://github.com/bjodah/finitediff/blob/master/LICENSE
:alt: License
.. image:: http://hera.physchem.kth.se/~finitediff/branches/master/htmlcov/coverage.svg
:target: http://hera.physchem.kth.se/~finitediff/branches/master/htmlcov
:alt: coverage

``finitediff`` containts two implementations (`Fortran 90
<src/finitediff_fort.f90>`_ and `C++ <include/finitediff_templated.hpp>`_) version of Begnt Fornberg's
formulae for generation of finite difference weights on aribtrarily
spaced one dimensional grids. The finite difference weights can be
used for optimized inter-/extrapolation data series for up to
arbitrary derivative order. Python_ bindings are provided.

.. _Python: https://www.python.org
.. _finitediff: https://github.com/bjodah/finitediff


Capabilities
============
finitediff currently provides callbacks for estimation of derivatives
or interpolation either at a single point or over an array (available
from the Python bindings).

The user may also manually generate the corresponding weights. (see
``populate_weights``)


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

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

::

$ conda install -c bjodah finitediff pytest

alternatively you may also use `pip`:

::

$ python -m pip install --user finitediff

(you can skip the ``--user`` flag if you have got root permissions), to run the
tests you need ``pytest`` too:

::

$ python -m pip install --user --upgrade pytest
$ python -m pytest --pyargs finitediff


Dependencies
============
You need either a C++ or a Fortran 90 compiler. On a debian based
linux system you can install it easily by typing:
``$ sudo apt-get install gfortran g++``

Optional dependencies (for Python bindings):

- Python header files (``sudo apt-get install python-dev``)
- Python_ (tested with 2.7)
- NumPy_
- Cython_
- pycompilation_ (optional: enables use from python)
- pytest_ (``sudo apt-get install python-pytest``)
- matplotlib_ (``sudo apt-get install python-matplotlib``)

See `requirements.txt <requirements.txt>`_ for detailed information of versions tested for.

For all dependencies the following command may be issued on a debian
based system:

::

$ sudo apt-get install gfortran g++ python2.7 libpython2.7-dev
python-numpy cython python-pip python-pytest python-matplotlib; sudo
pip install --upgrade -r https://raw.github.com/bjodah/finitediff/v0.1.10/requirements.txt``


.. _NumPy: http://www.numpy.org/
.. _pycompilation: https://github.com/bjodah/pycompilation
.. _pytest: http://pytest.org/
.. _matplotlib: http://matplotlib.org/

Notes
=====
There is a git subtree under finitediff, update through:

``git subtree pull --prefix finitediff/newton_interval newton_interval master --squash``

where the repo "newton_interval" is https://github.com/bjodah/newton_interval.git

First time you need to add it:
``git remote add -f newton_interval https://github.com/bjodah/newton_interval.git``

(Users of Ubuntu 12.04 who want to use git subtree, see http://stackoverflow.com/questions/17797328)

References
==========
The algortihm is a Fortran 90 rewrite of:

http://dx.doi.org/10.1137/S0036144596322507

::

@article{fornberg_classroom_1998,
title={Classroom note: Calculation of weights in finite difference formulas},
author={Fornberg, Bengt},
journal={SIAM review},
volume={40},
number={3},
pages={685--691},
year={1998},
publisher={SIAM}
doi={10.1137/S0036144596322507}
}


Which is based on an article of the same author:

http://dx.doi.org/10.1090/S0025-5718-1988-0935077-0

::

@article{fornberg_generation_1988,
title={Generation of finite difference formulas on arbitrarily spaced grids},
author={Fornberg, Bengt},
journal={Mathematics of computation},
volume={51},
number={184},
pages={699--706},
year={1988}
doi={10.1090/S0025-5718-1988-0935077-0}
}


License
=======
Open Source. Released under the very permissive "simplified
(2-clause) BSD license". See LICENSE.txt for further details.


Authors
=======
See file `AUTHORS <AUTHORS>`_ in root.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

finitediff-0.2.1.tar.gz (113.7 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page