cupyx.scipy.interpolate.PchipInterpolator#

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

PCHIP 一维单调三次插值。

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

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

  • y (ndarray) – 实数值的一维数组。y 在插值轴上的长度必须等于 x 的长度。如果是 N 维数组,使用 axis 参数选择正确的轴。

  • axis (int, 可选) – y 数组中对应 x 坐标值的轴。

  • extrapolate (bool, 可选) – 是否根据第一个和最后一个区间对外插点进行外插,或返回 NaNs。

另请参阅

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 阶分段多项式。

返回类型:

PPoly

注意

此函数返回的反导数是连续的,并且直到浮点舍入误差,都具有 n-1 阶连续可微性。

如果计算反导数且 self.extrapolate='periodic',则对于返回的实例,它将被设置为 False。这是因为反导数不再是周期性的,并且在初始给定 x 区间之外正确评估它很困难。

classmethod construct_fast(c, x, extrapolate=None, axis=0)[source]#

构造分段多项式时不进行检查。接受与构造函数相同的参数。输入参数 cx 必须是具有正确形状和类型的数组。c 数组只能是 float 和 complex 数据类型,x 数组必须是 float 数据类型。

derivative(nu=1)[source]#

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

参数:

nu (int, 可选) – 要评估的导数阶数。默认值为 1,即计算一阶导数。如果为负,则返回反导数。

返回值:

pp – 表示此多项式导数的 k2 = k - n 阶分段多项式。

返回类型:

PPoly

注意

导数对每个多项式分段进行分段评估,即使多项式在断点处不可微。多项式区间被视为半开区间,[a, b),除了最后一个区间是闭合的 [a, b]

extend(c, x)[source]#

向多项式添加额外的断点和系数。

参数:
  • c (ndarray, 大小 (k, m, ...)) – 区间内多项式的额外系数。请注意,第一个额外区间将使用 self.x 的一个端点形成。

  • x (ndarray, 大小 (m,)) – 额外的断点。必须与 self.x 按照相同的顺序排序,并且位于当前断点的右侧或左侧。

classmethod from_bernstein_basis(bp, extrapolate=None)[source]#

从 Bernstein 基多项式构造幂基分段多项式。

参数:
  • bp (BPoly) – 一个 Bernstein 基多项式,由 BPoly 创建

  • extrapolate (bool'periodic', 可选) – 如果为 bool,确定是否根据第一个和最后一个区间对外插点进行外插,或返回 NaNs。如果为 'periodic',则使用周期性外插。默认值为 True。

classmethod from_spline(tck, extrapolate=None)[source]#

从样条构造分段多项式

参数:
  • tck – 一个样条,作为 (knots, coefficients, degree) 元组或 BSpline 对象。

  • extrapolate (bool'periodic', 可选) – 如果为 bool,确定是否根据第一个和最后一个区间对外插点进行外插,或返回 NaNs。如果为 'periodic',则使用周期性外插。默认值为 True。

integrate(a, b, extrapolate=None)[source]#

计算分段多项式的定积分。

参数:
  • a (float) – 积分下限

  • b (float) – 积分上限

  • extrapolate ({bool, 'periodic', None}, 可选) – 如果为 bool,确定是根据第一个和最后一个区间对外插点进行外插,还是返回 NaNs。如果为 'periodic',则使用周期性外插。如果为 None(默认),则使用 self.extrapolate

返回值:

ig – 分段多项式在 [a, b] 区间上的定积分

返回类型:

array_like

roots(discontinuity=True, extrapolate=None)[source]#

查找分段多项式的实数根。

参数:
  • discontinuity (bool, 可选) – 是否将断点处不连续的符号变化报告为根。

  • extrapolate ({bool, 'periodic', None}, 可选) – 如果为 bool,确定是否返回根据第一个和最后一个区间外插的多项式的根,'periodic' 的作用与 False 相同。如果为 None(默认),则使用 self.extrapolate

返回值:

roots – 多项式的根。如果 PPoly 对象描述多个多项式,则返回值为对象数组,其每个元素都是一个包含根的 ndarray。

返回类型:

ndarray

另请参阅

PPoly.solve

solve(y=0.0, discontinuity=True, extrapolate=None)[source]#

查找方程 pp(x) == y 的实数解。

参数:
  • y (float, 可选) – 右侧值。默认值为零。

  • discontinuity (bool, 可选) – 是否将断点处不连续的符号变化报告为根。

  • extrapolate ({bool, 'periodic', None}, 可选) – 如果为 bool,确定是否返回根据第一个和最后一个区间外插的多项式的根,'periodic' 的作用与 False 相同。如果为 None(默认),则使用 self.extrapolate

返回值:

roots – 多项式的根。如果 PPoly 对象描述多个多项式,则返回值为对象数组,其每个元素都是一个包含根的 ndarray。

返回类型:

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#