cupyx.scipy.interpolate.BSpline#

class cupyx.scipy.interpolate.BSpline(t, c, k, extrapolate=True, axis=0)[source]#

B样条基上的一元样条。

\[S(x) = \sum_{j=0}^{n-1} c_j B_{j, k; t}(x)\]

其中 \(B_{j, k; t}\) 是次数为 k、节为 t 的 B 样条基函数。

参数:
  • t (ndarray, shape (n+k+1,)) – 节

  • c (ndarray, shape (>=n, ...)) – 样条系数

  • k (int) – B样条次数

  • extrapolate (bool or 'periodic', optional) – 是否在外推基本区间 t[k] .. t[n] 之外,或返回 NaN。如果为 True,则外推基本区间上 B 样条函数的第一段和最后一段多项式。如果为 'periodic',则使用周期性外推。默认为 True。

  • axis (int, optional) – 插值轴。默认为零。

变量:
  • t (ndarray) – 节向量

  • c (ndarray) – 样条系数

  • k (int) – 样条次数

  • extrapolate (bool) – 如果为 True,则外推基本区间上 B 样条函数的第一段和最后一段多项式。

  • axis (int) – 插值轴。

  • tck (tuple) – (self.t, self.c, self.k) 的只读等价表示。

注意

B样条基函数通过以下方式定义:

\[ \begin{align}\begin{aligned}B_{i, 0}(x) = 1, \textrm{if $t_i \le x < t_{i+1}$, otherwise $0$,}\\B_{i, k}(x) = \frac{x - t_i}{t_{i+k} - t_i} B_{i, k-1}(x) + \frac{t_{i+k+1} - x}{t_{i+k+1} - t_{i+1}} B_{i+1, k-1}(x)\end{aligned}\end{align} \]

实现细节

  • 对于次数为 k 的样条,至少需要 k+1 个系数,因此 n >= k+1。额外的系数 c[j] (其中 j > n) 将被忽略。

  • 次数为 k 的 B 样条基函数在*基本区间* t[k] <= x <= t[n] 上构成单位分解。

  • 基于 [1][2]

参考文献

方法

__call__(x, nu=0, extrapolate=None)[source]#

评估样条函数。

参数:
  • x (array_like) – 评估样条函数的点。

  • nu (int, optional) – 评估的导数次数(默认为 0)。

  • extrapolate (bool or 'periodic', optional) – 是否根据第一个和最后一个区间进行外推或返回 NaN。如果为 'periodic',则使用周期性外推。默认为 self.extrapolate

返回值:

y – 通过用 x 的形状替换系数数组中的插值轴来确定形状。

返回值类型:

array_like

antiderivative(nu=1)[source]#

返回表示反导数的 B 样条。

参数:

nu (int, optional) – 反导数次数。默认为 1。

返回值:

b – 表示反导数的新实例。

返回值类型:

BSpline 对象

注意

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

另请参阅

splder, splantider

classmethod basis_element(t, extrapolate=True)[source]#

返回 B 样条基元素 B(x | t[0], ..., t[k+1])

参数:
  • t (ndarray, shape (k+2,)) – 内部节

  • extrapolate (bool or 'periodic', optional) – 是否在外推基本区间 t[0] .. t[k+1] 之外,或返回 NaN。如果为 'periodic',则使用周期性外推。默认为 True。

返回值:

basis_element – 表示节向量 t 的 B 样条基元素的可调用对象。

返回值类型:

可调用对象

注意

B 样条的次数 kt 的长度推断为 len(t)-2。节向量是通过在内部节 t 前后分别附加 k+1 个元素构建的。

classmethod construct_fast(t, c, k, extrapolate=True, axis=0)[source]#

在不进行检查的情况下构造样条。接受与常规构造函数相同的参数。输入数组 tc 必须具有正确的形状和 dtype。

derivative(nu=1)[source]#

返回表示导数的 B 样条。

参数:

nu (int, optional) – 导数次数。默认为 1。

返回值:

b – 表示导数的新实例。

返回值类型:

BSpline 对象

另请参阅

splder, splantider

classmethod design_matrix(x, t, k, extrapolate=False)[source]#

返回 CSR 格式的稀疏数组作为设计矩阵。

参数:
  • x (array_like, shape (n,)) – 评估样条函数的点。

  • t (array_like, shape (nt,)) – 已排序的 1D 节数组。

  • k (int) – B样条次数。

  • extrapolate (bool or 'periodic', optional) – 是否根据第一个和最后一个区间进行外推,或引发错误。如果为 'periodic',则使用周期性外推。默认为 False。

返回值:

design_matrix – CSR 格式的稀疏矩阵,其中每一行包含输入行的所有基元素(第一行 = x[0] 的基元素,……,最后一行 = x[-1] 的基元素)。

返回值类型:

csr_matrix 对象

注意

在设计矩阵的每一行中,所有基元素都在特定点进行评估(第一行 - x[0],……,最后一行 - x[-1])。nt 是节向量的长度:由于有 nt - k - 1 个基元素,nt 应该不小于 2 * k + 2 以确保至少有 k + 1 个基元素。

x 超出范围会引发 ValueError。

注意

此方法返回一个 csr_matrix 实例,因为 CuPy 尚未提供 csr_array

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

计算样条的定积分。

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

  • b (float) – 积分上限。

  • extrapolate (bool or 'periodic', optional) – 是否在外推基本区间 t[k] .. t[-k-1] 之外,或将样条视为在该区间之外为零。如果为 'periodic',则使用周期性外推。如果为 None(默认),则使用 self.extrapolate

返回值:

I – 样条在区间 [a, b] 上的定积分。

返回值类型:

array_like

__eq__(value, /)#

返回 self==value.

__ne__(value, /)#

返回 self!=value.

__lt__(value, /)#

返回 self

__le__(value, /)#

返回 self<=value.

__gt__(value, /)#

返回 self>value.

__ge__(value, /)#

返回 self>=value.

属性

tck#

等价于 (self.t, self.c, self.k)(只读)。