首页 > 解决方案 > 为什么 scipy.optimize.curce 拟合函数不能正确拟合数据点,为什么要给出较大的 pfit 值?

问题描述

在以下代码中,为什么拟合函数会给出较大的 pfit 值以及为什么它不能正确拟合数据点。我的拟合功能有什么问题吗?

L = np.array([12,24,36,48])
Ec_L =np.array([-2.21173697, -2.01880398, -1.96508108, -2.0691906 ])

def ff(L,a,v,Ec):
    return (a*L**(-1.0/v))+Ec

x_data = 1.0/L
y_data = Ec_L

plt.scatter(x_data, y_data, marker='.', color='orange')

pfit,pcov = optimize.curve_fit(ff,x_data,y_data)
print("pfit: ",pfit)  #pfit:  [ 563.99154975 4377.13071157 -566.48046716]
print(pcov)

plt.plot(x_data, ff(L,*pfit), marker='.', color='red')

标签: pythonmatplotlibscipycurve-fittingleast-squares

解决方案


L在你的测试中使用,但1/L在你的拟合中;我不知道你的意图,但如果你改为使用

plt.plot(x_data, ff(1/L,*pfit), marker='.', color='red')

合身看起来不太好:

在此处输入图像描述


推荐阅读