cupyx.scipy.interpolate.BSpline#

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

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] 之外进行外推,或者返回 nans。如果为 True,则在基础区间上激活的 b-样条函数的第一段和最后一段进行外推。如果为 ‘periodic’,则使用周期性外推。默认为 True。

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

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

  • c (ndarray) – 样条系数

  • k (int) – 样条度数

  • extrapolate (bool) – 如果为 True,则外推 b-spline 函数在基区间上活动的第一段和最后一段多项式。

  • axis (int) – 插值轴。

  • tck (tuple) – (self.t, self.c, self.k) 的只读等效项

备注

B样条基元素通过定义

\[ \begin{align}\begin{aligned}B_{i, 0}(x) = 1, \textrm{如果 $t_i \le x < t_{i+1}$, 否则 $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。额外的系数,即 j > nc[j],将被忽略。

  • 度数为 k 的 B 样条基元素在 基区间 上形成了一个单位分割,t[k] <= x <= t[n]

  • 基于 [1][2]

引用

方法

__call__(x, nu=0, extrapolate=None)[源代码][源代码]#

评估一个样条函数。

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

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

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

返回:

y – 形状由在系数数组中替换插值轴为 x 的形状来确定。

返回类型:

array_like

antiderivative(nu=1)[源代码][源代码]#

返回表示不定积分的B样条。

参数:

nu (int, optional) – 反导数阶数。默认是 1。

返回:

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

返回类型:

BSpline object

备注

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

参见

splder, splantider

classmethod basis_element(t, extrapolate=True)[源代码][源代码]#

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

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

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

返回:

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

返回类型:

callable

备注

B样条的次数 k 是从 t 的长度推断出来的,即 len(t)-2。节点向量是通过在内部节点 t 前后分别添加 k+1 个元素来构建的。

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

构建一个样条而不进行检查。接受与常规构造函数相同的参数。输入数组 tc 必须具有正确的形状和数据类型。

derivative(nu=1)[源代码][源代码]#

返回表示导数的B样条。

参数:

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

返回:

b – 表示导数的新实例。

返回类型:

BSpline object

参见

splder, splantider

classmethod design_matrix(x, t, k, extrapolate=False)[源代码][源代码]#

返回一个以 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)[源代码][源代码]#

计算样条的定积分。

参数:
  • 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<value。

__le__(value, /)#

返回 self<=value。

__gt__(value, /)#

返回 self>value。

__ge__(value, /)#

返回 self>=value。

属性

tck#

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