【发布时间】:2017-12-17 09:55:37
【问题描述】:
我想找到并绘制一个函数 f,它代表一条拟合在我已经知道的一些设定点 x 和 y 上的曲线。
经过一些研究,我开始尝试使用 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 库的参考指南。另外,我得到以下图表,它甚至不是曲线:Graph and curve based on set points
【问题讨论】:
-
一切都很好,除了你的绘图:
x = np.arange(0, 1, 0.01),然后是plt.plot(x, func(x, *popt), 'r-', label='fit'),因为你想在更多的点上评估你的拟合函数,以看到一个平滑的结果。关于拟合参数,它们在popt数组中。 -
您现有代码的实际问题是什么?编辑:@MauroLacy 证实了我的怀疑。
标签: python raspberry-pi curve-fitting non-linear-regression