scipy.interpolate.BSpline.

from_power_basis#

classmethod BSpline.from_power_basis(pp, bc_type='not-a-knot')[source]#

从幂基多项式构造 B 样条基中的多项式。

目前,仅接受 CubicSpline 实例。

参数:
ppCubicSpline

幂基中的分段多项式,由 CubicSpline 创建。

bc_type字符串,可选

边界条件类型,与 CubicSpline 中的一致:not-a-knotnaturalclampedperiodic 之一。构建 BSpline 类实例所必需。默认值为 not-a-knot

返回值:
bBSpline 对象

一个新实例,表示 B 样条基中的初始多项式。

注释

在版本 1.8.0 中添加。

目前仅接受 CubicSpline 实例。

该算法遵循对马斯登恒等式的微分 [1]:B 样条基中样条插值函数的每个系数按如下方式计算

\[c_j = \sum_{m=0}^{k} \frac{(k-m)!}{k!} c_{m,i} (-1)^{k-m} D^m p_{j,k}(x_i)\]

\(c_{m, i}\) - CubicSpline 的系数,\(D^m p_{j, k}(x_i)\) - \(x_i\) 中对偶多项式的 m 次导数。

k 目前始终等于 3。

n - 2 个系数是在 \(x_i = x_j\) 中计算的,例如

\[c_1 = \sum_{m=0}^{k} \frac{(k-1)!}{k!} c_{m,1} D^m p_{j,3}(x_1)\]

最后 nod + 2 个系数是在 x[-2] 中计算的,nod - 端点处的导数数量。

例如,考虑 \(x = [0, 1, 2, 3, 4]\)\(y = [1, 1, 1, 1, 1]\) 且 bc_type = natural

CubicSpline 在幂基中的系数

\([[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [1, 1, 1, 1, 1]]\)

节点向量:\(t = [0, 0, 0, 0, 1, 2, 3, 4, 4, 4, 4]\)

在这种情况下

\[c_j = \frac{0!}{k!} c_{3, i} k! = c_{3, i} = 1,~j = 0, ..., 6\]

参考资料

[1]

Tom Lyche 和 Knut Morken,样条方法,2005 年,第 3.1.2 节