我正在尝试使这个函数适合一些数据
这是我的功能:
def first_deriv(xlist, L, k, x0):
return [k*L*(math.e**(-k*(x+x0)))/(1+math.e**(-k*(x+x0)))**2 for x in xlist]
Run Code Online (Sandbox Code Playgroud)
这是使函数适合数据的代码
popt = curve_fit(first_deriv, list(range(len(data))), data, bounds=((0, -np.inf, -np.inf), (10**(9), +np.inf, 0)), maxfev=10000)
Run Code Online (Sandbox Code Playgroud)
这就是我绘制它的方式:
xdata = list(np.linspace(-100, 100, 2000))
plt.scatter(xdata, first_deriv(xdata, popt[0][0], popt[0][1], popt[0][2]), s=1)
Run Code Online (Sandbox Code Playgroud)
界限的存在是为了使答案合理,但即使我将所有界限设为无限,它仍然给出了一个糟糕的拟合。
这是可怕的拟合
我很惊讶 curve_fit 似乎完全搞砸了。有人可以解释一下为什么吗?