我想找到并画出一个函数f,它代表一个曲线拟合在我已知的一些设定点上,x和y。python中的非线性曲线拟合程序
经过一番研究,我开始尝试scipy.optimize和curve_fit,但在参考指南中,我发现程序使用函数来拟合数据,并假设ydata = f(xdata,* params)+ eps。
所以我的问题是这样的:我需要改变我的代码以使用curve_fit或任何其他库来使用我的设置点来查找曲线的功能? (注意:我想知道这个函数,所以我可以稍后集成我的项目并绘制它)。我知道它将是一个衰减的指数函数,但不知道确切的参数。这是我在我的程序中试过的:
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
def func(x, a, b, c):
return a * np.exp(-b * x) + c
xdata = np.array([0.2, 0.5, 0.8, 1])
ydata = np.array([6, 1, 0.5, 0.2])
plt.plot(xdata, ydata, 'b-', label='data')
popt, pcov = curve_fit(func, xdata, ydata)
plt.plot(xdata, func(xdata, *popt), 'r-', label='fit')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()
我目前正在Raspberry Pi上开发此项目,如果它改变了任何东西。因为它非常精确,所以希望使用最小二乘法,但任何其他可行的方法都很受欢迎。 再次,这是基于scipy库的参考指南。另外,我得到如下图,它甚至不是一个曲线:根据设定点
一切正常,除了你绘制图表和曲线:'X = np.arange(0,1,0.01)'然后是'plt.plot(x,func(x,* popt),'r-',label ='fit')',因为您想要评估您的拟合函数多点,看到一个平稳的结果。关于拟合参数,它们在弹出数组中。 –
实际上你现有的代码有什么问题?编辑:@MauroLacy证实了我的怀疑。 –