bundles / scipy 1.17.1 / scipy / interpolate / _polyint / barycentric_interpolate
function
scipy.interpolate._polyint:barycentric_interpolate
Signature
def barycentric_interpolate ( xi , yi , x , axis = 0 , * , der = 0 , rng = None ) Summary
Convenience function for barycentric interpolation.
Extended Summary
Constructs a polynomial that passes through a given set of points, then evaluates the polynomial. For reasons of numerical stability, this function does not compute the coefficients of the polynomial.
This function uses a "barycentric interpolation" method that treats the problem as a special case of rational function interpolation. This algorithm is quite stable, numerically, but even in a world of exact computation, unless the x coordinates are chosen very carefully - Chebyshev zeros (e.g., cos(i*pi/n)) are a good choice - polynomial interpolation itself is a very ill-conditioned process due to the Runge phenomenon.
Parameters
xi: array_like1-D array of x coordinates of the points the polynomial should pass through
yi: array_likeThe y coordinates of the points the polynomial should pass through.
x: scalar or array_likePoint or points at which to evaluate the interpolant.
axis: int, optionalAxis in the
yiarray corresponding to the x-coordinate values.der: int or list or None, optionalHow many derivatives to evaluate, or None for all potentially nonzero derivatives (that is, a number equal to the number of points), or a list of derivatives to evaluate. This number includes the function value as the '0th' derivative.
rng: `numpy.random.Generator`, optionalPseudorandom number generator state. When
rngis None, a new numpy.random.Generator is created using entropy from the operating system. Types other than numpy.random.Generator are passed to numpy.random.default_rng to instantiate aGenerator.
Returns
y: scalar or array_likeInterpolated values. Shape is determined by replacing the interpolation axis in the original array with the shape of
x.
Notes
Construction of the interpolation weights is a relatively slow process. If you want to call this many times with the same xi (but possibly varying yi or x) you should use the class BarycentricInterpolator. This is what this function uses internally.
Examples
We can interpolate 2D observed data using barycentric interpolation:import numpy as np import matplotlib.pyplot as plt from scipy.interpolate import barycentric_interpolate x_observed = np.linspace(0.0, 10.0, 11) y_observed = np.sin(x_observed) x = np.linspace(min(x_observed), max(x_observed), num=100) y = barycentric_interpolate(x_observed, y_observed, x)✓
plt.plot(x_observed, y_observed, "o", label="observation") plt.plot(x, y, label="barycentric interpolation") plt.legend()✗
plt.show()
✓
See also
- BarycentricInterpolator
Barycentric interpolator
Aliases
-
scipy.interpolate.barycentric_interpolate