当我评估以下功能时
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
为什么会这样?
由于
答案 0 :(得分:3)
您需要将集成(f
)的函数传递给轴,以作为第一个参数进行集成。这仅适用于您的第二个定义。见the docs:
func:function
A Python function or method to integrate. If func takes many arguments, it is integrated along the axis corresponding to the first argument.