PchipInterpolator#
- class scipy.interpolate.PchipInterpolator(x, y, axis=0, extrapolate=None)[源代码][源代码]#
PCHIP 1-D 单调三次插值。
x
和y
是用于近似某个函数 f 的值数组,其中y = f(x)
。插值器使用单调三次样条来找到新点的值。(PCHIP 代表分段三次 Hermite 插值多项式)。- 参数:
- xndarray, 形状 (npoints, )
一个单调递增的实数值的一维数组。
x
不能包含重复值(否则 f 会被过度指定)- yndarray, 形状 (…, npoints, …)
一个 N 维实数数组。
y
在插值轴上的长度必须等于x
的长度。使用axis
参数来选择插值轴。自 1.13.0 版本弃用: 复杂数据已被弃用,在 SciPy 1.15.0 中将引发错误。如果您尝试使用传递数组的实部,请在
y
上使用np.real
。- 轴int, 可选
y
数组中对应于 x 坐标值的轴。默认为axis=0
。- 外推bool, 可选
是否根据第一个和最后一个区间外推到边界外的点,或者返回NaN。
- 属性:
- 轴
- c
- 外推
- x
方法
__call__
(x[, nu, extrapolate])评估分段多项式或其导数。
derivative
([nu])构建一个新的分段多项式,表示导数。
antiderivative
([nu])构建一个新的分段多项式,表示其反导数。
roots
([discontinuity, extrapolate])找到分段多项式的实根。
参见
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 and J. Butland, A method for constructing local monotone piecewise cubic interpolants, SIAM J. Sci. Comput., 5(2), 300-304 (1984). DOI:10.1137/0905021.
[2]参见,例如,C. Moler, 《Matlab 数值计算》, 2004. DOI:10.1137/1.9780898717952