scipy.integrate.quad是否有办法接受args中的数组?

2024-04-26 06:25:43 发布

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

我有一个功能:

def xx(th, T, B):
    f = integrate.quad(xint, 0, np.inf, args = (th, T, B))[0]
    a = v(th)*f
    return a

其中xintp, th, T, B函数的函数。上述所有功能都能正常工作xx(th, T, B)然后应在{}上积分,其他变量为单个数字

当我运行这个时,我得到:TypeError: only size-1 arrays can be converted to Python scalars,因为th是一个数组而不是一个数字

我已经尝试使用lambda函数和dblquad在同一个计算中进行这两个积分,但没有任何效果。考虑到试图避免for循环的限制,有没有办法让integrate.quad接受数组参数

运行时的回溯:

run file.py
  Traceback (most recent call last):

  File "file.py", line 280, in <module>
  file()

  File "file.py", line 240, in sctif
  axes[0, 2].plot(th, xx(th,10, 10))

  File "file.py", line 166, in xx
  f, _ = integrate.quad(xint, 0, 100,args = (th,T,B))

  File "/home/caitlin/anaconda3/lib/python3.7/site-packages/scipy/integrate/quadpack.py", line 352, in quad
points)

  File "/home/caitlin/anaconda3/lib/python3.7/site-packages/scipy/integrate/quadpack.py", line 463, in _quad
return _quadpack._qagse(func,a,b,args,full_output,epsabs,epsrel,limit)

TypeError: only size-1 arrays can be converted to Python scalars`

  

Tags: 函数inpy功能returnlineargsfile
1条回答
网友
1楼 · 发布于 2024-04-26 06:25:43

我从未真正了解args选项的用处。IMHO,如果您定义一个只接受一个参数的函数,那么代码会变得更清晰,可以通过包装:

th = 2.0
T = 1.0
B = 3.0

def xint(x):
    return th * x ** B / T

f, _ = integrate.quad(xint, 0, np.inf)

现在,如果thTB中的一个是向量,则函数是向量值的,并且不能再使用quad。我会调查一下{}或{a1}。(quadpy是我的一个项目。)

相关问题 更多 >