使用scipy curve_fit

时间:2018-06-14 07:33:02

标签: python model scipy convolution

我正在尝试使用非线性最小二乘法(scipy curve_fit)将函数拟合到我的数据中。

功能定义如下:

N(x)= a *(e(x)卷积C(x))+ b

其中a和b是常数(但是拟合参数),e是下面表格的指数,C(x)是常数数组(不是拟合参数)。

e(x)= exp(-x / x0)for(x> 0)其中x0是常数(和拟合参数)。

现在,我用于拟合的代码如下:

x = xw
y = yw
f = interpolate.interp1d(xc,yc)
c = f(xw)

def equation(x,x0,a,b):
    arr = np.exp(-x/x0) * (x>0)
    y = np.convolve(a*arr,c,mode='same')
    yfinal = y+b
    return yfinal

popt,pcov = curve_fit(equation,x,y,bounds=((74,0.99,0.099),(75,1.01,0.101) ))
print popt

plt.figure()
plt.plot(x,y,'r',x,c,'b',x,equation(x,*popt),'g--')
plt.legend(['Data','C(x)','fit'])
plt.show()

因为我正在从论文中进行验证,所以我知道这些数据的拟合参数应分别为[x0,a,b] [74.0,1.0,0.1]。因为拟合与使用这些参数的数据不匹配,所以我的等式定义中似乎存在一些问题。也许你可以帮我找到出错的地方![enter image description here] 1

0 个答案:

没有答案