scipy.interpolate.

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))范围内找到,其中mxw中数据点的数量。

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=0spl(u) == x。对于非零的s值,spl表示x的平滑近似,通常具有较少的结点。

undarray

参数的值

另请参阅

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.