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