Skip to main content
This is a pre-production deployment of Warehouse. Changes made here affect the production instance of PyPI (pypi.python.org).
Help us improve Python packaging - Donate today!

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++ <finitediff/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
``calculate_weights``)


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

Examples
--------
Generating finite difference weights is simple using C++11:

.. code:: C++

#include "finitediff_templated.hpp"
#include <vector>
#include <string>
#include <iostream>

int main(){
const unsigned max_deriv = 2;
std::vector<std::string> labels {"0th derivative", "1st derivative", "2nd derivative"};
std::vector<double> x {0, 1, -1, 2, -2}; // Fourth order of accuracy
auto coeffs = finitediff::generate_weights(x, max_deriv);
for (unsigned deriv_i = 0; deriv_i <= max_deriv; deriv_i++){
std::cout << labels[deriv_i] << ": ";
for (unsigned idx = 0; idx < x.size(); idx++){
std::cout << coeffs[deriv_i*x.size() + idx] << " ";
}
std::cout << std::endl;
}
}


::

$ cd examples/
$ g++ -std=c++11 demo.cpp -I../include
$ ./a.out
Zeroth derivative (interpolation): 1 -0 0 0 -0
First derivative: -0 0.666667 -0.666667 -0.0833333 0.0833333
Second derivative: -2.5 1.33333 1.33333 -0.0833333 -0.0833333


and of course using the python bindings:

.. code:: python

>>> from finitediff import get_weights
>>> import numpy as np
>>> c = get_weights(np.array([-1., 0, 1]), 0, maxorder=1)
>>> np.allclose(c[:, 1], [-.5, 0, .5])
True


see the ``examples/`` directory for more examples.

Installation
------------
The simplest way to install finitediff is to use
`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 debian based linux systems you may install one by issuing::

$ sudo apt-get install gfortran g++

See `setup.py <setup.py>`_ for optional (Python) dependencies.

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

git subtree pull --prefix finitediff/external/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 subtree add --prefix finitediff/external/newton_interval git://github.com/bjodah/newton_interval master


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
=======
The source code is Open Source and is released under the very permissive
`"simplified (2-clause) BSD license" <https://opensource.org/licenses/BSD-2-Clause>`_.
See `LICENSE <LICENSE>`_ for further details.


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

Release History

This version
History Node

0.3.5

History Node

0.3.4

History Node

0.3.3

History Node

0.3.2

History Node

0.3.1

History Node

0.3.0

History Node

0.2.5

History Node

0.2.4

History Node

0.2.3

History Node

0.2.2

History Node

0.2.1

History Node

0.2.0

Download Files

Download Files

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

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
finitediff-0.3.5.tar.gz (127.9 kB) Copy SHA256 Checksum SHA256 Source Mar 14, 2017

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting