gpt4 book ai didi

python - scipy curve_fit 无法正常工作

转载 作者:行者123 更新时间:2023-11-30 22:28:06 26 4
gpt4 key购买 nike

看起来它只适合第一个参数。

当我尝试使用 curve_fit 示例生成曲线时,这一切都很好,但当我使用自己的数据时却不然。

这是我的原始数据:https://pastebin.com/0hs2JVXL

为了简单起见,我将其转换为整数,因此这是我输入到 curve_fit 的数据:https://pastebin.com/2uP0iyTw

这是我试图拟合的曲线(基本上是具有比例值的对数正态分布的公式):

def func(x, k, s, u):
x=np.array(x)
return k * (1 / (x * s * np.sqrt(2*np.pi))) * np.exp( - np.power((np.log(x)-u),2) / (2*np.power(s , 2)))

这就是我使用它的方式:

graphData.append(
{
'x': xdata,
'y': ydata,
'name': "data",
'mode': 'lines'
}
)

popt, pcov = curve_fit(func, xdata, ydata)

graphData.append(
{
'x': xdata,
'y': func(xdata, *popt),
'name': "" + "[Fit]",
'mode': 'lines'
}
)

但这是我得到的输出数据:https://pastebin.com/WjaTH9wQ

这些是它正在设置的参数:k=33.06185171 s= 1.u=1。

并可视化:

enter image description here

我完全不确定为什么这不起作用。

最佳答案

使用评论中的想法之一,我让它发挥作用:

from scipy.optimize import curve_fit
import matplotlib.pyplot as pyplot
import numpy as np

data = np.loadtxt(open("scipycurve.csv", "rb"), delimiter=",", skiprows=1)
xdata = data[:,0]
ydata = data[:,1]

def func(x, k, s, u):
x=np.array(x)
return k * (1 / (x * s * np.sqrt(2*np.pi))) * np.exp( - np.power((np.log(x)-u),2) / (2*np.power(s , 2)))

p0 = [1000,1,10]
popt, pcov = curve_fit(func, xdata, ydata, p0)

pyplot.figure()
pyplot.plot(xdata, ydata, label='Data', marker='o')
pyplot.plot(xdata, func(xdata, popt[0], popt[1], popt[2]), 'g--')
pyplot.show()

print (popt)

plot of data and fitted curve

[6.84279941e+07 5.09882839e-01 1.05414859e+01]

希望有帮助。只是看起来算法在这种情况下需要一些帮助,通过给它参数。

关于python - scipy curve_fit 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46726990/

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