我试图将曲线拟合到一组数据点:
def func(x, a, b, c):
return a * np.log(-b * x) + c
#return a * np.exp(-b * x) + c
xdata = np.array(X)
ydata = np.array(y)
popt, pcov = curve_fit(func, xdata, ydata)
plt.scatter(xdata, ydata, label='data')
plt.plot(xdata, func(xdata, *popt), 'r', label='fit')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()
该数据集包含大约50个点 . 其中2个可能是异常值 . 我生成了两个数据和拟合曲线图:第一个包含异常值,另一个图包括异常值:
但是,两个曲线拟合都包含许多NaN值,这就是为什么红色拟合线太小 . 我在 popt
中为每个变量得到了1的值 . 我尝试了 log
和 exp
适合,如上面的代码所示
我可以尝试使用比指数或对数拟合更好的曲线吗?
编辑:func的定义出现在curve_fit调用之前