Python:已定义函数中的参数顺序

时间:2015-12-08 09:32:52

标签: python function

当我评估以下功能时

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

为什么会这样?

由于

1 个答案:

答案 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.