cupyx.scipy.interpolate.PchipInterpolator#
- class cupyx.scipy.interpolate.PchipInterpolator(x, y, axis=0, extrapolate=None)[source]#
PCHIP 一维单调三次插值。
x
和y
是用于逼近某个函数 f 的值数组,其中y = f(x)
。插值器使用单调三次样条来找到新点的值。(PCHIP 代表分段三次 Hermite 插值多项式)。- 参数:
另请参阅
CubicHermiteSpline
分段三次插值器。
Akima1DInterpolator
Akima 一维插值器。
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]。
参考文献
方法
- __call__(x, nu=0, extrapolate=None)[source]#
评估分段多项式或其导数。
- 参数:
x (array_like) – 要评估插值器的点。
nu (int, 可选) – 要评估的导数阶数。必须是非负数。
extrapolate ({bool, 'periodic', None}, 可选) – 如果为 bool,确定是根据第一个和最后一个区间对外插点进行外插,还是返回 NaNs。如果为 'periodic',则使用周期性外插。如果为 None(默认),则使用 self.extrapolate。
- 返回值:
y – 插值后的值。形状是通过将原始数组中的插值轴替换为 x 的形状来确定的。
- 返回类型:
array_like
注意
导数对每个多项式分段进行分段评估,即使多项式在断点处不可微。多项式区间被视为半开区间,
[a, b)
,除了最后一个区间是闭合的[a, b]
。
- antiderivative(nu=1)[source]#
构造一个新的分段多项式,表示其反导数。反导数也是函数的不定积分,而导数是其逆运算。
- 参数:
nu (int, 可选) – 要评估的反导数阶数。默认值为 1,即计算一阶积分。如果为负,则返回导数。
- 返回值:
pp – 表示此多项式反导数的 k2 = k + n 阶分段多项式。
- 返回类型:
注意
此函数返回的反导数是连续的,并且直到浮点舍入误差,都具有 n-1 阶连续可微性。
如果计算反导数且
self.extrapolate='periodic'
,则对于返回的实例,它将被设置为 False。这是因为反导数不再是周期性的,并且在初始给定 x 区间之外正确评估它很困难。
- classmethod construct_fast(c, x, extrapolate=None, axis=0)[source]#
构造分段多项式时不进行检查。接受与构造函数相同的参数。输入参数
c
和x
必须是具有正确形状和类型的数组。c
数组只能是 float 和 complex 数据类型,x
数组必须是 float 数据类型。
- derivative(nu=1)[source]#
构造一个新的分段多项式,表示其导数。
- 参数:
nu (int, 可选) – 要评估的导数阶数。默认值为 1,即计算一阶导数。如果为负,则返回反导数。
- 返回值:
pp – 表示此多项式导数的 k2 = k - n 阶分段多项式。
- 返回类型:
注意
导数对每个多项式分段进行分段评估,即使多项式在断点处不可微。多项式区间被视为半开区间,
[a, b)
,除了最后一个区间是闭合的[a, b]
。
- classmethod from_spline(tck, extrapolate=None)[source]#
从样条构造分段多项式
- 参数:
tck – 一个样条,作为 (knots, coefficients, degree) 元组或 BSpline 对象。
extrapolate (bool 或 'periodic', 可选) – 如果为 bool,确定是否根据第一个和最后一个区间对外插点进行外插,或返回 NaNs。如果为 'periodic',则使用周期性外插。默认值为 True。
- roots(discontinuity=True, extrapolate=None)[source]#
查找分段多项式的实数根。
- 参数:
discontinuity (bool, 可选) – 是否将断点处不连续的符号变化报告为根。
extrapolate ({bool, 'periodic', None}, 可选) – 如果为 bool,确定是否返回根据第一个和最后一个区间外插的多项式的根,'periodic' 的作用与 False 相同。如果为 None(默认),则使用 self.extrapolate。
- 返回值:
roots – 多项式的根。如果 PPoly 对象描述多个多项式,则返回值为对象数组,其每个元素都是一个包含根的 ndarray。
- 返回类型:
另请参阅
- solve(y=0.0, discontinuity=True, extrapolate=None)[source]#
查找方程
pp(x) == y
的实数解。- 参数:
- 返回值:
roots – 多项式的根。如果 PPoly 对象描述多个多项式,则返回值为对象数组,其每个元素都是一个包含根的 ndarray。
- 返回类型:
注意
此例程仅适用于实值多项式。如果分段多项式包含恒等于零的部分,则根列表中将包含相应区间的起始点,后跟一个
nan
值。如果多项式在断点处不连续,并且在断点处有符号变化,则当 discont 参数为 True 时会报告此情况。目前,还没有实际的实现。
- __eq__(value, /)#
返回 self==value。
- __ne__(value, /)#
返回 self!=value。
- __lt__(value, /)#
返回 self<value。
- __le__(value, /)#
返回 self<=value。
- __gt__(value, /)#
返回 self>value。
- __ge__(value, /)#
返回 self>=value。
属性
- c#
- x#
- extrapolate#
- axis#