Polynomial and rational function library

## Project description

# PolyRat: Polynomial and Rational Function Library

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

## Installation

```
> pip install --upgrade polyrat
```

## Documentation

Full documentation is hosted on Read the Docs.

## Usage

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

## Reproducibility

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

## Related Projects

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

## Project details

## Download files

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