【发布时间】:2016-09-08 10:03:27
【问题描述】:
我正在尝试将指数定律拟合到我的数据中。我的(x,y) 示例解释起来相当复杂,所以为了一般理解和可重复性,我会说:两个变量都是float 和continuous、0<=x<=100 和0<=y<=1。
from scipy.optimize import curve_fit
import numpy
import matplotlib.pyplot as plt
#ydata=[...] is my list with y values, which contains 0 values
#xdata=[...] is my list with x values
transf_y=[]
for i in range(len(ydata)):
transf_y.append(ydata[i]+0.00001) #Adding something to avoid zero values
x=numpy.array(xdata,dtype=float)
y=numpy.array(transf_y,dtype=float)
def func(x, a, c, d):
return a * numpy.exp(-c*x)+d
popt, pcov = curve_fit(func, x, y,p0 = (1, 1e-6, 1))
print ("a = %s , c = %s, d = %s" % (popt[0], popt[1], popt[2]))
xx = numpy.linspace(300, 6000, 1000)
yy = func(xx, *popt)
plt.plot(x,y,label='Original Data')
plt.plot(xx, yy, label="Fitted Curve")
plt.legend(loc='upper left')
plt.show()
现在我的拟合曲线看起来不像拟合指数曲线。相反,它看起来像一条移动平均曲线,就好像这条曲线是在 Excel 上作为趋势线添加的一样。 可能是什么问题?如有必要,我会找到一种方法使数据集可用以使示例可重现。
【问题讨论】:
标签: python scipy curve-fitting exponential moving-average