make_splprep#
- scipy.interpolate.make_splprep(x, *, w=None, u=None, ub=None, ue=None, k=3, s=0, t=None, nest=None)[source]#
创建具有边界误差、最小化导数跳跃的平滑参数B样条曲线。
给定N个1D数组x的列表,这些数组表示由u参数化的N维空间中的曲线,找到一个平滑的近似样条曲线
g(u)
。- 参数:
- xarray_like, 形状 (m, ndim)
在
ndim
维度中表示曲线的采样数据点。典型用法是1D数组列表,每个数组长度为m
。- warray_like, 形状(m,), 可选
严格为正的1D权重数组。权重用于计算加权最小二乘样条拟合。如果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
的标准差的倒数,则一个好的s
值应在(m - sqrt(2*m), m + sqrt(2*m))
范围内找到,其中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类比
注释
给定一组 \(m\) 个 \(D\) 维数据点 \(\vec{x}_j\),其中 \(j=1, ..., m\) 且 \(\vec{x}_j = (x_{j; 1}, ..., x_{j; D})\),此例程构造参数样条曲线 \(g_a(u)\)(其中 \(a=1, ..., D\)),以最小化内部结点处(\(u_b < t_i < u_e\))
k
阶导数的跳跃之和 \(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, “Algorithms for smoothing data with periodic and parametric splines, Computer Graphics and Image Processing”, 20 (1982) 171-184.
[2]P. Dierckx, “Curve and surface fitting with splines”, Monographs on Numerical Analysis, Oxford University Press, 1993.