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-knot
、natural
、clamped
或periodic
之一。构造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 节