make_splprep#
- scipy.interpolate.make_splprep(x, *, w=None, u=None, ub=None, ue=None, k=3, s=0, t=None, nest=None)[源代码]#
找到参数化 N 维曲线的平滑 B 样条表示。
给定 N 个 1 维数组的列表 x,这些数组表示由 u 参数化的 N 维空间中的曲线,找到一个平滑的逼近样条曲线
g(u)
。- 参数:
- xarray_like,形状 (m, ndim)
表示
ndim
维曲线的采样数据点。 典型的用法是 1 维数组的列表,每个数组的长度为m
。- warray_like,形状 (m,),可选
严格为正的 1 维权重数组。 这些权重用于计算加权最小二乘样条拟合。 如果 x 值中的误差的标准差由向量 d 给出,则 w 应为 1/d。 默认为
np.ones(m)
。- uarray_like,可选
参数形式的曲线的参数值数组。 如果未给出,则这些值将根据以下公式自动计算
v[0] = 0 v[i] = v[i-1] + distance(x[i], x[i-1]) u[i] = v[i] / v[-1]
- ub, uefloat, 可选
参数间隔的端点。默认为
u[0]
和u[-1]
。- kint, 可选
样条的次数。建议使用三次样条,
k=3
。应避免使用偶数 k 值,尤其是在s
值较小的情况下。默认为k=3
- sfloat, 可选
平滑条件。平滑量是通过满足以下条件确定的
sum((w * (g(u) - x))**2) <= s,
其中
g(u)
是x
的平滑近似。 用户可以使用 s 来控制拟合的紧密性和平滑性之间的权衡。 较大的s
表示更多的平滑,而较小的s
值表示较少的平滑。s
的推荐值取决于权重w
。 如果权重表示x
的标准差的倒数,则应在(m - sqrt(2*m), m + sqrt(2*m))
范围内找到一个合适的s
值,其中m
是x
和w
中的数据点数。- tarray_like, 可选
样条节点。如果为 None(默认值),则将自动构造节点。必须至少有
2*k + 2
个节点,最多有m + k + 1
个节点。- nestint, 可选
节点向量的目标长度。 应该在
2*(k + 1)
(次数为k
的样条的最小节点数)和m + k + 1
(插值样条的节点数)之间。 此例程返回的实际节点数可能略大于 nest。 默认为 None(无限制,最多添加m + k + 1
个节点)。
- 返回:
- spl
BSpline
实例 对于 s=0,
spl(u) == x
。对于非零值的s
, spl 表示x
的平滑近似,通常节点更少。- undarray
参数的值
- spl
另请参见
generate_knots
在幕后用于生成节点
make_splrep
此例程 1D 函数的类似物
make_interp_spline
构造插值样条 (
s = 0
)make_lsq_spline
构造给定节点向量的最小二乘样条
splprep
此例程的 FITPACK 类似物
说明
给定 \(D\) 维中的一组 \(m\) 个数据点,\(\vec{x}_j\),其中 \(j=1, ..., m\) 和 \(\vec{x}_j = (x_{j; 1}, ..., x_{j; D})\),此例程构造参数化样条曲线 \(g_a(u)\),其中 \(a=1, ..., D\),以最小化
k
次导数在内部节点 (\(u_b < t_i < u_e\)) 处的跳跃之和,\(D_{i; a}\),其中\[D_{i; a} = g_a^{(k)}(t_i + 0) - g_a^{(k)}(t_i - 0)\]具体来说,该例程构造样条函数 \(g(u)\),该函数最小化
\[\sum_i \sum_{a=1}^D | D_{i; a} |^2 \to \mathrm{min}\]前提是
\[\sum_{j=1}^m \sum_{a=1}^D (w_j \times (g_a(u_j) - x_{j; a}))^2 \leqslant s\]其中 \(u_j\) 是与数据点 \((x_{j; 1}, ..., x_{j; D})\) 对应的参数值,\(s > 0\) 是输入参数。
换句话说,我们平衡了最大化平滑度(以导数的跳跃来衡量,第一个标准)以及 \(g(u_j)\) 与数据 \(x_j\) 的偏差(第二个标准)。
请注意,第二个标准中的求和是对所有数据点进行的,而第一个标准中的求和是对内部样条节点(即那些
ub < t[i] < ue
)进行的。样条节点通常是数据的子集,有关详细信息,请参见generate_knots
。在版本 1.15.0 中添加。
参考文献
[1]P. Dierckx,“使用周期性和参数样条平滑数据的算法,计算机图形和图像处理”,20 (1982) 171-184。
[2]P. Dierckx,“使用样条的曲线和曲面拟合”,数值分析专著,牛津大学出版社,1993 年。