PolyRat is a library for polynomial and rational approximation. Formally we can think of polynomials as a sum of powers of :
A rational function is a ratio of two polynomial functions
The goal of this library is to construct polynomial and rational approximations given a collection of point data consisting of pairs of inputs and outputs that minimizes (for example)
The ultimate goal of this library is to provide algorithms to construct these approximations in a variety of norms with a variety of constraints on the approximants.
The polynomial approximation problem is relatively straightfoward as it is a convex problem for any p-norm with p≥1. However, there is still a need to be careful in the construction of the polynomial basis for high-degree polynomials to avoid ill-conditioning. Here we provide access to a number of polynomial bases:
- tensor-product polynomials based on Numpy (e.g., Monomial, Legendre, etc.);
- Vandermonde with Arnoldi polynomial basis;
- barycentric Lagrange polynomial bases.
The rational approximation problem is still an open research problem. This library provides a variety of algorithms for constructing rational approximations including:
- Adaptive Anderson Antoulas
- Sanathanan Koerner iteration
- Stabilized Sanathanan Koerner iteration
- Vector Fitting
> pip install --upgrade polyrat
Full documentation is hosted on Read the Docs.
Using PolyRat follows the general pattern of scikit-learn. For example, to construct a rational approximation of the tangent function
import numpy as np
import polyrat
x = np.linspace(-1,1, 1000).reshape(-1,1) # Input data 🚨 must be 2-dimensional
y = np.tan(2*np.pi*x.flatten()) # Output data
num_degree, denom_degree = 10, 10 # numerator and denominator degrees
rat = polyrat.StabilizedSKRationalApproximation(num_degree, denom_degree)
rat.fit(x, y)
After constructing this approximation, we can then evaluate the resulting approximation by calling the class-instance
y_approx = rat(x) # Evaluate the rational approximation on X
Comparing this to training data, we note that this degree-(10,10) approximation is highly accurate
This repository contains the code to reproduce the figures in the associated papers
- Multivariate Rational Approximation Using a Stabilized Sanathanan-Koerner Iteration in Reproducibility/Stabilized_SK
- baryrat: Pure python implementation of the AAA algorithm
- Block-AAA: Matlab implementation of a matrix-valued AAA variant
- RationalApproximations: Julia implementation AAA variants
- RatRemez Rational Remez algorithm (Silviu-Ioan Filip)
- BarycentricDC Barycentric Differential Correction (see SISC paper)