我试图使用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)
答案 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个时间变量时,范围列表中的函数将从不接受一个,并且仅接受一个参数。