Skip to main content
 首页 » 编程设计

python之从一组曲线到数据点的最佳拟合

2025年05月04日18xiaohuochai

我有一组曲线 F={f1, f2, f3,..., fN},每条曲线都是通过一组点定义的,即:我没有显式 函数的形式。所以我有一组 N 表,如下所示:

#f1: x  y 
1.2  0.5 
0.6  5.6 
0.3  1.2 
... 
 
#f2: x  y 
0.3  0.1 
1.2  4.1 
0.8  2.2 
... 
 
#fN: x  y 
0.7  0.3 
0.3  1.1 
0.1  0.4 
... 

我还有一组观察/测量的数据点 O=[p1, p2, p3,..., pM] 其中每个点都有 x, y坐标和 [0, 1] 之间的给定权重,所以它看起来像:

#O: x  y  w 
0.2  1.6  0.5 
0.3  0.7  0.3 
0.1  0.9  0.8 
... 

因为 N ~ 10000(我有大量的函数)我正在寻找的是一种有效的(更准确地说:快速)找到曲线的方法最适合我的一组观察和加权点O。

当我有函数的显式形式 (scipy.optimize.curve_fit) 时,我知道如何找到最适合 python 的函数,但是当我将函数定义为表时,我该怎么做呢?

请您参考如下方法:

为了拟合,您需要两个元素,即数据(您已经拥有)和模型空间(线性模型、高斯过程、支持向量回归)。在您的情况下,您的模型有额外的限制,即某些数据点的权重应该不同于其他数据点。可能是这样的事情对你有用:

from scipy.interpolate import UnivariateSpline 
 
temp = np.asarray([10, 9.6, 9.3, 9.0, 8.7]) 
height = np.asarray([129, 145, 167, 190, 213]) 
f = UnivariateSpline(height, temp) 

现在你可以在任何你想要的地方计算f:

test_points = np.arange(120, 213, 5)   
plot(height, temp, 'o', regular_heights, f(test_points), 'x')