gpt4 book ai didi

python - 使用 scipy curve_fit 进行曲线拟合并不乐观

转载 作者:行者123 更新时间:2023-12-01 04:01:34 24 4
gpt4 key购买 nike

我正在尝试使用自定义函数来拟合曲线。我在双对数图中有数据点,如下所示: enter image description here

x 轴为 logr ,y轴为logf 。对于负值的数据点,我使用上部误差条作为数据品脱,对于未定义下部误差条的数据点,我设置为某个值。

从图中,我们可以看到数据点几乎是一条直线+尾部(尾部大约从-0.6开始到结束)。所以我假设原始数据具有以下行为,并且数据也如下:

f = a * r^b + c
r = [ 0.00528039 0.00721161 0.00873037 0.01108928 0.01413011 0.01790143 0.02263833 0.02886089 0.03663713 0.04659512 0.05921978 0.07540126 0.09593949 0.12190075 0.15501736 0.19713563 0.25041524 0.31850255 0.40514023 0.51507869 0.65489938 0.83278859 1.05865016 1.34624082]
f = [ 0.07905728 0.04011504 0.03490303 0.03138561 0.01401272 0.0053508 0.00546048 0.00296805 0.00041698 0.00078639 0.00235994 0.00221327 0.00115695 0.0008026 0.00054334 0.00052034 0.00089253 0.000486 0.0008194 0.00073325 0.00071894 0.00066874 0.00066106 0.00064371]

但是直接拟合上面的函数是很糟糕的,因为点下降得太快了。所以我修改了拟合函数,如下所示:

def fit_func(x,a,b,c):
xx = a * x**b
xxx = 10**xx + 10**c
return np.log10(xxx)

popt, pcov = optimize.curve_fit(fit_func, r, f)
f_fit = fit_func(r,popt[0],popt[1],popt[2])

虽然我把误差线放在图中,但它在曲线拟合中并不重要。我使用 scipy.optimize 进行拟合,下面的黑线是拟合。但拟合曲线太快了。有人有更好的想法来进行配合吗?或者任何人都可以为我提供一些如何计算拟合参数的不确定性的想法a, b, c ,因为我正在尝试自己编写拟合模块。

最佳答案

您的对数模型对最后一点的权重不足,因此仅考虑第一个点。

其他尝试:

def model(r,r0,f0,k): return (r0/r)**k +f0 
p0=(1e-1,1e-3,2)
popt, pcov = curve_fit(model, r, f,p0)
plot(r,f,'ro',r,model(r,*popt),'b')

对于

enter image description here

黑色曲线是没有绿色点的模型,这显然是模型的“坏”点。

但是由于您的数据嘈杂,并且您知道错误,请使用 curve_fitsigma 参数。

关于python - 使用 scipy curve_fit 进行曲线拟合并不乐观,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36395159/

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