scipy.interpolate.

PchipInterpolator#

class scipy.interpolate.PchipInterpolator(x, y, axis=0, extrapolate=None)[source]#

PCHIP 一维单调三次插值。

xy 是用于逼近某个函数 f 的值数组,其中 y = f(x)。插值器使用单调三次样条来查找新点的值。(PCHIP 代表分段三次埃尔米特插值多项式)。

参数:
xndarray,形状 (npoints, )

一维单调递增实数值数组。 x 不能包含重复的值(否则 f 会被过度指定)

yndarray,形状 (…, npoints, …)

N 维实数值数组。 y 沿插值轴的长度必须等于 x 的长度。使用 axis 参数选择插值轴。

从版本 1.13.0 起已弃用:复数数据已弃用,将在 SciPy 1.15.0 中引发错误。如果您尝试使用传递数组的实部,请对 y 使用 np.real

axisint,可选

y 数组中对应于 x 坐标值的轴。默认值为 axis=0

extrapolatebool,可选

是否根据第一个和最后一个区间对超出边界的点进行外推,或者返回 NaN。

另请参阅

CubicHermiteSpline

分段三次插值器。

Akima1DInterpolator

Akima 一维插值器。

CubicSpline

三次样条数据插值器。

PPoly

根据系数和断点表示的分段多项式。

备注

插值器保留插值数据的单调性,并且如果数据不平滑,则不会过度拟合。

保证一阶导数是连续的,但二阶导数可能在 \(x_k\) 处跳跃。

使用 PCHIP 算法 [1] 确定点 \(x_k\) 处的导数 \(f'_k\)

\(h_k = x_{k+1} - x_k\),以及 \(d_k = (y_{k+1} - y_k) / h_k\) 是内部点 \(x_k\) 处的斜率。如果 \(d_k\)\(d_{k-1}\) 的符号不同,或者其中任何一个等于零,则 \(f'_k = 0\)。否则,它由加权调和平均数给出

\[\frac{w_1 + w_2}{f'_k} = \frac{w_1}{d_{k-1}} + \frac{w_2}{d_k}\]

其中 \(w_1 = 2 h_k + h_{k-1}\)\(w_2 = h_k + 2 h_{k-1}\)

使用单边方案 [2] 设置端斜率。

参考文献

[1]

F. N. Fritsch 和 J. Butland,一种构建局部单调分段三次插值器的方法,SIAM J. Sci. Comput.,5(2),300-304 (1984)。 DOI:10.1137/0905021

[2]

例如,参见 C. Moler,Numerical Computing with Matlab,2004。 DOI:10.1137/1.9780898717952

属性:
axis
c
extrapolate
x

方法

__call__(x[, nu, extrapolate])

评估分段多项式或其导数。

derivative([nu])

构造一个新的表示导数的分段多项式。

antiderivative([nu])

构造一个新的表示反导数的分段多项式。

roots([discontinuity, extrapolate])

查找分段多项式的实根。