我正在尝试使用非线性最小二乘法(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]。因为拟合与使用这些参数的数据不匹配,所以我的等式定义中似乎存在一些问题。也许你可以帮我找到出错的地方] 1