numpy scipy curve_fit无法正常工作

kknvjkwl  于 2023-11-18  发布在  其他
关注(0)|答案(2)|浏览(126)

它似乎只符合第一个参数。
当我试图用curve_fit示例生成曲线时,这一切都很顺利,但当我使用自己的数据时就不行了。
以下是我的原始数据:https://pastebin.com/0hs2JVXL
为了简单起见,我将其转换为ingeger数,因此这里是我馈送给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.
想象一下:


的数据
我完全不知道为什么这不起作用。

vwhgwdsa

vwhgwdsa1#

使用评论中的一个想法,我让它工作:

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)

字符串


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

xeufq47z

xeufq47z2#

对我有帮助的是为curve_fit添加一个不同的方法参数:

popt, pcov = curve_fit(func, xdata, ydata, method='dogbox')

字符串

相关问题