Python:用leastsq计算除以零错误

2024-09-27 21:31:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在对一些数据(来自文件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)

任何洞察都将不胜感激!我是一个非常沮丧的新程序员。 谢谢你的阅读!你知道吗


Tags: indexlenreturndefnpsqrtfuncerr
1条回答
网友
1楼 · 发布于 2024-09-27 21:31:28

显然,您的err是0,这会引发错误。 您的代码没有提供err的源代码,因此我们可以提供帮助。但是您可以尝试使用调试器(或者一些打印语句,如果您不习惯的话)来跟踪它。 在另一个表达式中似乎还有一个可用的值(可能是p2 == 0)。您还应该调试这个值的源代码。你知道吗

相关问题 更多 >

    热门问题