scipy.interpolate.BSpline.

from_power_basis#

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

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

目前,仅接受 CubicSpline 实例。

参数:
ppCubicSpline

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

bc_type字符串,可选

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

返回:
bBSpline 对象

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

备注

在版本 1.8.0 中添加。

目前仅接受 CubicSpline 实例。

该算法遵循 Marsden 恒等式 [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,Spline Methods,2005 年,第 3.1.2 节