我正在对一些数据(来自文件prplt)执行高斯拟合。我经常遇到以下错误:RuntimeWarning:在divide中遇到被零除的情况 返回(y1 func(x2,p))/err
以及
RuntimeWarning:在双\u标量中遇到无效值 z=p[0]*np.exp公司(((x2-p[1])**2/(2*p[2]**2))
起初,我以为这只是因为我对初始参数p0猜得不好,但现在我确信这是另外一回事。这是我的密码:
x1= np.linspace(1,len(prplt),len(prplt))
index=np.where(x1>340)
x2= x1[index]
y=prplt
y1=y[index]
def func(x2,p):
z=p[0]*np.exp(-(x2-p[1])**2/(2*p[2]**2))
return z
p0=[3500.,400.,50.]
def errfunc(p,x2,y1,func,err):
return (y1-func(x2,p))/err
plt.errorbar(x2, y1, np.sqrt(y1), ecolor='black', fmt=None)
out=leastsq(errfunc, p0, args=(x2,y1,func,np.sqrt(y1)),full_output=1)
任何洞察都将不胜感激!我是一个非常沮丧的新程序员。 谢谢你的阅读!你知道吗
显然,您的
err
是0,这会引发错误。 您的代码没有提供err
的源代码,因此我们可以提供帮助。但是您可以尝试使用调试器(或者一些打印语句,如果您不习惯的话)来跟踪它。 在另一个表达式中似乎还有一个可用的值(可能是p2 == 0
)。您还应该调试这个值的源代码。你知道吗相关问题 更多 >
编程相关推荐