scipy.interpolate.BSpline.
from_power_basis#
- classmethod BSpline.from_power_basis(pp, bc_type='not-a-knot')[源代码]#
从幂基中的分段多项式构造 B 样条基中的多项式。
目前,只接受
CubicSpline实例。- 参数:
- ppCubicSpline
幂基中的分段多项式,由
CubicSpline创建- bc_typestring, optional
边界条件类型,如
CubicSpline:not-a-knot,natural,clamped, 或periodic之一。构建BSpline类的实例所必需。 默认为not-a-knot。
- 返回:
- b
BSpline对象 表示 B 样条基中初始多项式的新实例。
- 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 =
naturalCubicSpline 在幂基中的系数
\([[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, Section 3.1.2