scipy.interpolate.

make_splrep#

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

查找一维函数的 B 样条表示。

给定数据集 (x[i], y[i]),确定区间 xb <= x <= xe 上的 k 次光滑样条近似。

参数:
x, y类数组,形状 (m,)

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

w类数组,形状 (m,),可选

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

xb, xe浮点数,可选

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

k整数,可选

样条拟合的次数。建议使用三次样条,k=3,这是默认值。应避免使用 k 的偶数值,尤其是当 s 值较小时。

s浮点数,可选

平滑条件。平滑量由满足以下条件确定

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

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

t类数组,可选

样条节点。如果为 None(默认值),则会自动构造节点。必须至少有 2*k + 2 个节点,最多有 m + k + 1 个节点。

nest整数,可选

目标节点向量长度。应该在 2*(k + 1) (次数为 k 的样条的最小节点数)和 m + k + 1 (插值样条的节点数)之间。此例程返回的实际节点数可能略大于 nest。默认值为 None(无限制,最多添加 m + k + 1 个节点)。

返回:
splBSpline 实例

对于 s=0spl(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.