无法与dblquad集成

时间:2018-11-12 12:49:30

标签: python scipy python-3.6 quad

因此,我想在其中集成常量的双整数,例如a,b等,用户可以在其中分配该常量的值:

积分的极限是x [0,1]和y [-1,2]

import numpy as np
import scipy.integrate as integrate

def g(y,x,a):
    return a*x*y

a = int(input('Insert a value --> '))
result = integrate.dblquad(g, 0, 1, lambda x: -1, lambda x: 2, args=(a))[0]
print(result)

但是我得到了这个错误,我并不理解为什么:

TypeError: integrate() argument after * must be an iterable, not int

我不明白。因为当我执行相同操作但使用quad()时,Python可以正确执行此操作:

import numpy as np
import scipy.integrate as integrate

def g(x,a):
    return a*x

a = int(input('Insert a value --> '))
result = integrate.quad(g, 0, 1, args=(a))[0]
print(result)

结果:

0.5

1 个答案:

答案 0 :(得分:1)

这里的问题是,您在可选参数args中提供的值是一个元组。对于quad,这是函数所期望的,但对于dblquad,则需要一个序列。即使元组是sequences(不可变的元组),似乎scipy在这里也有所作为,因此这就是引发错误的原因。但是,由于元组绝对是iterable,因此具有误导性。无论如何,这应该可行:

result = integrate.dblquad(g, 0, 1, lambda x: -1, lambda x: 2, args=[a])[0]