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

## finitediff

`finitediff` containts two implementations (Fortran 90 and C++) 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.

## 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:

#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:

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

$ 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 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”. See LICENSE for further details.

## 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 |