SpECTRE  v2024.04.12
intrp::BarycentricRational Class Reference

A barycentric rational interpolation class. More...

#include <BarycentricRational.hpp>

Public Member Functions

 BarycentricRational (std::vector< double > x_values, std::vector< double > y_values, size_t order)
 
double operator() (double x_to_interp_to) const
 
const std::vector< double > & x_values () const
 
const std::vector< double > & y_values () const
 
size_t order () const
 
void pup (PUP::er &p)
 

Detailed Description

A barycentric rational interpolation class.

The class builds a barycentric rational interpolant of a specified order using the x_values and y_values passed into the constructor. Barycentric interpolation requires \(3N\) storage, and costs \(\mathcal{O}(Nd)\) to construct, where \(N\) is the size of the x- and y-value vectors and \(d\) is the order of the interpolant. The evaluation cost is \(\mathcal{O}(N)\) compared to \(\mathcal{O}(d)\) of a spline method, but constructing the barycentric interpolant does not require any derivatives of the function to be known.

The interpolation function is

\[ \mathcal{I}(x)=\frac{\sum_{i=0}^{N-1}w_i y_i / (x-x_i)}{\sum_{i=0}^{N-1}w_i/(x-x_i)} \]

where \(w_i\) are the weights. The weights are computed using

\[ w_k=\sum_{i=k-d\\0\le i < N-d}^{k}(-1)^{i} \prod_{j=i\\j\ne k}^{i+d}\frac{1}{x_k-x_j} \]

Requires: x_values.size() == y_values.size() and x_values_.size() >= order


The documentation for this class was generated from the following file: