A Python package for barycentric rational approximation
This is a pure Python package which provides routines for rational and polynomial approximation through the so-called barycentric representation. The advantage of this representation is (often significantly) improved stability over classical approaches.
The AAA algorithm
The package includes a Python implementation of the AAA algorithm for rational approximation described in the paper "The AAA Algorithm for Rational Approximation" by Yuji Nakatsukasa, Olivier Sète, and Lloyd N. Trefethen, SIAM Journal on Scientific Computing 2018 40:3, A1494-A1522. (doi)
A MATLAB implementation of this algorithm is contained in Chebfun. The present Python version is a more or less direct port of the MATLAB version.
The "cleanup" feature for spurious poles and zeros is not currently implemented.
The package includes functions for polynomial interpolation, rational interpolation with either fixed poles or fixed interpolation nodes, Floater-Hormann interpolation, and more.
The implementation is in pure Python and requires only numpy and scipy as dependencies. Install it using pip:
pip install baryrat
Here's an example of how to approximate a function in the interval [0,1] using the AAA algorithm:
import numpy as np from baryrat import aaa Z = np.linspace(0.0, 1.0, 1000) F = np.exp(Z) * np.sin(2*np.pi*Z) r = aaa(Z, F, mmax=10)
Instead of the maximum number of terms
mmax, it's also possible to specify
the error tolerance
tol. Both arguments work exactly as in the MATLAB
The returned object
r is an instance of the class
baryrat.BarycentricRational and can be called like a function. For instance,
you can compute the error on
Z like this:
err = F - r(Z) print(np.linalg.norm(err, np.inf))
If you are interested in the poles and residues of the computed rational function, you can query them like
pol, res = r.polres()
and the zeroes using
zer = r.zeros()
Finally, the nodes, values and weights used for interpolation (called
wj in the original implementation) can be accessed as properties:
r.nodes r.values r.weights
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
|Filename, size||File type||Python version||Upload date||Hashes|
|Filename, size baryrat-1.0.0-py3-none-any.whl (6.1 kB)||File type Wheel||Python version py3||Upload date||Hashes View hashes|
|Filename, size baryrat-1.0.0.tar.gz (5.0 kB)||File type Source||Python version None||Upload date||Hashes View hashes|