0

所以我想在其中集成一个带有常量的双积分,比如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
4

1 回答 1

3

这里的问题是您在可选参数 args 中提供的值是一个元组。在quad的情况下,这是函数所期望的,但对于dblquad,需要一个序列。尽管元组是序列(不可变的),但似乎 scipy 在这里有所作为,因此这就是引发错误的原因。然而,它具有误导性,因为元组绝对是可迭代的。无论如何,这应该工作:

result = integrate.dblquad(g, 0, 1, lambda x: -1, lambda x: 2, args=[a])[0]
于 2018-11-12T13:23:44.137 回答