scipy.interpolate.BSpline.

insert_knot#

BSpline.insert_knot(x, m=1)[source]#

x 位置插入一个新的结点,其重数为 m

给定 B 样条表示的结点和系数,创建一个新的 B 样条,在点 x 处插入 m 次结点。

参数:
xfloat

新结点的位置

mint, 可选

插入给定结点的次数(其重数)。默认值为 1。

返回值:
splBSpline 对象

一个新的 BSpline 对象,其中插入了新的结点。

备注

基于 [1][2] 中的算法。

对于周期性样条 (self.extrapolate == "periodic"),必须至少有 k 个内部结点 t(j) 满足 t(k+1)<t(j)<=x 或者至少有 k 个内部结点 t(j) 满足 x<=t(j)<t(n-k)

此例程在功能上等效于 scipy.interpolate.insert.

在版本 1.13 中添加。

参考文献

[1]

W. Boehm,“将新结点插入 B 样条曲线”,计算机辅助设计,12,p.199-201,1980。 DOI:10.1016/0010-4485(80)90154-2.

[2]

P. Dierckx,“曲线和曲面拟合”,数值分析专著,牛津大学出版社,1993 年。

示例

您可以将结点插入 B 样条

>>> import numpy as np
>>> from scipy.interpolate import BSpline, make_interp_spline
>>> x = np.linspace(0, 10, 5)
>>> y = np.sin(x)
>>> spl = make_interp_spline(x, y, k=3)
>>> spl.t
array([ 0.,  0.,  0.,  0.,  5., 10., 10., 10., 10.])

插入单个结点

>>> spl_1 = spl.insert_knot(3)
>>> spl_1.t
array([ 0.,  0.,  0.,  0.,  3.,  5., 10., 10., 10., 10.])

插入多个结点

>>> spl_2 = spl.insert_knot(8, m=3)
>>> spl_2.t
array([ 0.,  0.,  0.,  0.,  5.,  8.,  8.,  8., 10., 10., 10., 10.])