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

2024-10-01 00:22:40 发布

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

当我计算下列函数时

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

为什么会这样

谢谢


Tags: 函数消息returndef错误npargssqrt
1条回答
网友
1楼 · 发布于 2024-10-01 00:22:40

您的积分函数(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.

相关问题 更多 >