当我计算下列函数时
def f(k,varvz,D,z):
return np.exp(-(k*(np.sqrt(z**2 + D**2)-D)+(0.041-0.0094*k)*z**2)/varvz)
def g(k,varvz,D):
return integrate.quad(f,-np.inf,np.inf,args=(k,varvz,D))
a,err= g(1.24,9.61,1.8)
print a
我得到inf
和以下错误消息
inf
c:\users\user1\appdata\local\temp\tmp5iuiuo.py:11: RuntimeWarning: overflow encountered in exp
return np.exp(-(k*(np.sqrt(z**2 + D**2)-D)+(0.041-0.0094*k)*z**2)/varvz)
但是如果我改变f
定义中参数的顺序
def f(z,k,varvz,D):
return np.exp(-(k*(np.sqrt(z**2 + D**2)-D)+(0.041-0.0094*k)*z**2)/varvz)
def g(k,varvz,D):
return integrate.quad(f,-np.inf,np.inf,args=(k,varvz,D))
a,err= g(1.24,9.61,1.8)
print a
我得到了想要的结果14.5716742277
为什么会这样
谢谢
您的积分函数(
f
)需要作为第一个参数传递给要积分的轴。这只适用于你的第二个定义。见the docs:相关问题 更多 >
编程相关推荐