gpt4 book ai didi

python - scipy.optimize 的 curve_fit 问题

转载 作者:行者123 更新时间:2023-11-28 17:28:12 25 4
gpt4 key购买 nike

我知道有一些类似的问题,但由于没有一个能给我带来进一步的帮助,我决定问自己的一个问题。很抱歉,如果我的问题的答案已经在某处,但我真的找不到。

我尝试使用 curve_fit 将 f(x) = a*x**b 拟合到相当线性的数据。它编译正确,但结果如下所示:

enter image description here

问题是,我真的不知道自己在做什么,但另一方面,试衣总是比科学更像是一门艺术,而且至少有一个通用的 bug with scipy.optimize

我的数据是这样的:

x 值:

[16.8, 2.97, 0.157, 0.0394, 14.000000000000002, 8.03, 0.378, 0.192, 0.0428, 0.029799999999999997, 0.000781, 0.0007890000000000001]

y 值:

[14561.766666666666, 7154.7950000000001, 661.53750000000002, 104.51446666666668, 40307.949999999997, 15993.933333333332, 1798.1166666666666, 1015.0476666666667, 194.93800000000002, 136.82833333333332, 9.9531566666666684, 12.073133333333333]

那是我的代码(在对 that question 的最后一个回答中使用了一个非常好的例子):

def func(x,p0,p1): # HERE WE DEFINE A FUNCTION THAT WE THINK WILL FOLLOW THE DATA DISTRIBUTION
return p0*(x**p1)

# Here you give the initial parameters for p0 which Python then iterates over to find the best fit
popt, pcov = curve_fit(func,xvalues,yvalues, p0=(1.0,1.0))#p0=(3107,0.944)) #THESE PARAMETERS ARE USER DEFINED

print(popt) # This contains your two best fit parameters

# Performing sum of squares
p0 = popt[0]
p1 = popt[1]
residuals = yvalues - func(xvalues,p0,p1)
fres = sum(residuals**2)

print 'chi-square'
print(fres) #THIS IS YOUR CHI-SQUARE VALUE!

xaxis = np.linspace(5e-4,20) # we can plot with xdata, but fit will not look good
curve_y = func(xaxis,p0,p1)

起始值来自与 gnuplot 的拟合,这似乎是合理的,但我需要交叉检查。

这是打印输出(首先拟合 p0、p1,然后是卡方):

[  4.67885857e+03   6.24149549e-01]
chi-square
424707043.407

我想这是一个很难的问题,因此非常感谢!

最佳答案

当拟合 curve_fit 优化 (data - model)^2/(error)^2 的总和

如果您不传递错误(正如您在此处所做的那样),curve_fit 假定所有点的误差均为 1。

在这种情况下,由于您的数据跨越多个数量级,具有最大 y 值的点主导目标函数,并导致 curve_fit 尝试以牺牲其他点为代价来拟合它们。

解决此问题的最佳方法是在拟合中包含 yvalues 中的错误(看起来就像您所做的那样,因为您在绘制的绘图中有误差条!)。您可以通过将它们作为 curve_fitsigma 参数传递来执行此操作。

关于python - scipy.optimize 的 curve_fit 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36860643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com