【发布时间】:2016-03-08 20:16:10
【问题描述】:
我对这个函数应该如何工作感到困惑。我正在尝试为 xdata 和 ydata 的数据集拟合一条最佳拟合线。此代码会产生错误,但我不明白 curve_fit 函数应该如何工作,或者我是否对我想做的事情使用了正确的术语。绘制在图表上的 xdata 和 ydata 会产生弯曲的图案,先上升,然后下降。非常感谢任何帮助。
#define xdata dnd ydata
xdata = np.array([-2,-1.64,-1.33,-0.7,0,0.45,1.2,1.64,2.32,2.9])
ydata = np.array([0.699369,0.700462,0.695354,1.03905,1.97389,2.41143,1.91091,0.919576,-0.730975,-
1.42001])
# get the curve fit funtion
from scipy.optimize import curve_fit
def func(xdata, p1, p2):
return p1*np.cos(p2*xdata) + p2*np.sin(p1*xdata)
popt, pcov = curve_fit(func, xdata, ydata)
#plot code for data points
plot.plot(xdata,ydata,"bo",label="Xdata and Ydata")
plot.plot(popt,pcov,"r--",label="Curve of Best Fit")
plot.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)
plot.show()
目前这会产生一条直线,它不是最适合数据的曲线。我试图尽可能地反映数据模式,但目前我还差得很远。
【问题讨论】:
-
函数中的
x是什么?你的意思是xdata? -
我的意思是它是 xdata(我认为),但我只是更改了它,现在我收到错误“只有长度为 1 的数组可以转换为 Python 标量”
-
因为你需要
np.cos和np.sin。 -
您将协方差矩阵绘制为最佳拟合参数的函数。您可能需要阅读 curve_fit 的输出:您需要自己创建最佳拟合曲线,使用 popt 作为输入。 @eph 的回答最清楚。
标签: python matplotlib scipy