scipy.interpolate.

barycentric_interpolate#

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

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

构建一个通过给定点的多项式,然后评估该多项式。出于数值稳定性的原因,此函数不计算多项式的系数。

此函数使用了一种“重心插值”方法,将问题视为有理函数插值的一个特例。该算法在数值上相当稳定,但在一个精确计算的世界中,除非 x 坐标选择得非常仔细——例如,Chebyshev 零点(如 cos(i*pi/n))是一个不错的选择——否则由于 Runge 现象,多项式插值本身是一个非常病态的过程。

参数:
xiarray_like

多项式应通过的点的x坐标的一维数组

array_like

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

x标量或类数组

要评估插值的点或点。

derint 或 list 或 None, 可选

要计算的导数数量,或者为所有可能非零的导数(即等于点数的数量),或者是一个要计算的导数列表。这个数量包括函数值作为’第0阶’导数。

int, 可选

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

返回:
y标量或类数组

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

参见

BarycentricInterpolator

重心插值器

注释

插值权重的构建是一个相对较慢的过程。如果你想用相同的 xi(但可能不同的 yi 或 x)多次调用此函数,你应该使用类 BarycentricInterpolator。这是此函数在内部使用的方法。

示例

我们可以使用重心插值法来插值二维观测数据:

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