scipy.interpolate.

make_splrep#

scipy.interpolate.make_splrep(x, y, *, w=None, xb=None, xe=None, k=3, s=0, t=None, nest=None)[source]#

创建一个具有有界误差并最小化导数跳跃的平滑 B 样条函数。

给定数据点集 (x[i], y[i]),确定在区间 xb <= x <= xek 次光滑样条近似。

参数:
x, yarray_like, 形状 (m,)

定义曲线 y = f(x) 的数据点。

warray_like, 形状 (m,), 可选

严格为正的一维权重数组,与 *x* 和 *y* 长度相同。这些权重用于计算加权最小二乘样条拟合。如果 y 值的误差由向量 d 给出标准差,则 *w* 应为 1/d。默认值为 np.ones(m)

xb, xefloat, 可选

拟合区间。如果为 None,则默认分别为 x[0]x[-1]

kint, 可选

样条拟合的次数。建议使用三次样条,即默认值 k=3。应避免使用偶数 *k* 值,尤其是在 *s* 值较小的情况下。

sfloat, 可选

平滑条件。平滑量通过满足 LSQ(最小二乘)约束来确定

sum((w * (g(x)  - y))**2 ) <= s

其中 g(x)(x, y) 的平滑拟合。用户可以使用 *s* 来控制数据接近度和拟合平滑度之间的权衡。较大的 *s* 意味着更多的平滑,而较小的 *s* 值则表示较少的平滑。*s* 的推荐值取决于权重 *w*。如果权重代表 *y* 标准差的倒数,则 *s* 的良好值应在 (m-sqrt(2*m), m+sqrt(2*m)) 范围内,其中 m 是 *x*、*y* 和 *w* 中的数据点数量。默认值为 s = 0.0,即插值。

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(x) == y。对于非零的 *s* 值,*spl* 代表 *(x, y)* 的平滑近似,通常结的数量更少。

另请参阅

generate_knots

在内部用于生成结

make_splprep

此例程在参数曲线中的对应方法

make_interp_spline

构建插值样条 (s = 0)

make_lsq_spline

根据给定的结向量构建最小二乘样条

splrep

此例程在 FITPACK 中的对应方法

说明

此例程构建平滑样条函数 \(g(x)\),以最小化在内部结 (\(x_b < t_i < x_e\)) 处 `k` 阶导数的跳跃之和 \(D_j\),其中

\[D_i = g^{(k)}(t_i + 0) - g^{(k)}(t_i - 0)\]

具体而言,此例程构建样条函数 \(g(x)\),使其最小化

\[\sum_i | D_i |^2 \to \mathrm{min}\]

条件是

\[\sum_{j=1}^m (w_j \times (g(x_j) - y_j))^2 \leqslant s ,\]

其中 \(s > 0\) 是输入参数。

换句话说,我们平衡了平滑度的最大化(以导数跳跃衡量,第一项标准)和 \(g(x_j)\) 与数据 \(y_j\) 的偏差(第二项标准)。

请注意,第二项标准中的求和是针对所有数据点,而第一项标准中的求和是针对内部样条结(即 xb < t[i] < xe 的那些结)。样条结通常是数据的一个子集,详情请参阅 generate_knots

另请注意此例程与 make_lsq_spline 的区别:后者不考虑平滑度,仅解决一个最小二乘问题

\[\sum w_j \times (g(x_j) - y_j)^2 \to \mathrm{min}\]

对于具有 _固定_ 结向量 t 的样条函数 \(g(x)\)。

在版本 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.