scipy.interpolate.

barycentric_interpolate#

scipy.interpolate.barycentric_interpolate(xi, yi, x, axis=0, *, der=0)[source]#

用于多项式插值的便捷函数。

构造一个经过给定点集的多项式,然后对该多项式进行求值。出于数值稳定性的原因,此函数不计算多项式的系数。

此函数使用“重心插值”方法,将问题视为有理函数插值的特殊情况。从数值上来说,该算法非常稳定,但是即使在精确计算的世界中,除非非常仔细地选择 x 坐标(切比雪夫零点(例如 cos(i*pi/n))是一个不错的选择),否则多项式插值本身也会因龙格现象,成为一个病态的过程。

参数:
xiarray_like

多项式应该经过的点的 x 坐标的 1-D 数组

yiarray_like

多项式应通过的点的 y 坐标。

x标量或 array_like

插值器要估值的位置或位置。

derint 或 list 或 None,可选

要估值的导数数量,或 None 表示所有可能的非零导数(即,等于点数的数量),或要估值的导数列表。此数字将函数值包含为“0 阶”导数。

axisint,可选

yi 数组中对应 x 坐标值的轴。

返回:
y标量或 array_like

插值值。形状通过使用 x 的形状替换原始数组中的插值轴来确定。

另请参阅

BarycentricInterpolator

重心插值器

注意

插值权重的构造是一个相对缓慢的过程。如果您要使用相同的 xi 多次调用(但可能会改变 yi 或 x),则应该使用 BarycentricInterpolator 类。这是该函数在内部使用的方法。

示例

我们可以使用重心插值来插值 2D 观测数据。

>>> 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()
../../_images/scipy-interpolate-barycentric_interpolate-1.png