scipy.interpolate.
barycentric_interpolate#
- scipy.interpolate.barycentric_interpolate(xi, yi, x, axis=0, *, der=0, rng=None)[源代码]#
用于多项式插值的便捷函数。
构造一个通过给定点集的多项式,然后计算该多项式。出于数值稳定性的考虑,此函数不计算多项式的系数。
此函数使用“重心插值”方法,将问题视为有理函数插值的特殊情况。该算法在数值上相当稳定,但即使在精确计算的世界中,除非 x 坐标选择非常仔细——切比雪夫零点(例如,cos(i*pi/n))是一个不错的选择——由于龙格现象,多项式插值本身就是一个病态过程。
- 参数:
- xiarray_like
多项式应该通过的点的 x 坐标的一维数组
- yiarray_like
多项式应该通过的点的 y 坐标。
- x标量或 array_like
用于评估插值器的点或多个点。
- axisint,可选
yi 数组中对应于 x 坐标值的轴。
- derint 或 list 或 None,可选
要评估的导数数量,或 None 表示所有潜在的非零导数(即,等于点数的数字),或要评估的导数列表。此数字包括作为“第 0 个”导数的函数值。
- rng
numpy.random.Generator
,可选 伪随机数生成器状态。当 rng 为 None 时,将使用来自操作系统的熵创建一个新的
numpy.random.Generator
。除numpy.random.Generator
之外的类型将传递给numpy.random.default_rng
以实例化一个Generator
。
- 返回:
- y标量或 array_like
插值值。形状是通过用 x 的形状替换原始数组中的插值轴来确定的。
另请参见
注意
构造插值权重是一个相对缓慢的过程。如果你想使用相同的 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()