Scipy nquad与参数的集成

时间:2018-11-28 13:51:22

标签: python python-2.7 scipy arguments

我试图使用nquad集成到python中。问题是,当我尝试将额外的参数传递给集成在nquad中的函数时,它想将这些参数传递给bounds而不是函数。我搜索了互联网,发现它是scipy.__version__ < 0.18.0中的错误,然后已得到修复,但我的版本为1.1.0,问题仍然存在。我该怎么办?简化的示例如下

>>> from scipy.integrate import nquad
>>> ranges0 = lambda x: [x, 2 * x]
>>> ranges = [ranges0, [1, 2]]
>>> func = lambda x0, x1, t0, t1: x0 + x1 + t0 + t1
>>> nquad(func, ranges, args=(1,2))

>>> TypeError: <lambda>() takes exactly 1 argument (3 given)

1 个答案:

答案 0 :(得分:0)

我在nquad的文档中进行了一些挖掘,发现以下摘录:

  

如果range的元素是可调用的,则将使用所有可用的集成参数以及任何参数参数来调用它。例如如果func = f(x0,x1,x2,t0,t1),则range [0]可定义为(a,b)或(a,b)= range0(x1,x2,t0,t1)

换句话说,当使用4个参数定义func时,必须定义range才能正确使用4-pos参数。换句话说,由于您的ranges0在范围列表的第一位,它将被传递4-1=3参数,如果您将其放在列表的第二位,它将被传递{{1 }}参数。对于数组中所有其他位置也是如此。它停留在2,因为它被调用:

  

所有可用的集成参数

这里的问题与秘密无关,而是与您的逻辑错误有关。

总而言之,当存在2个时间变量时,范围列表中的函数将从不接受一个,并且仅接受一个参数。