我正在尝试使用scipy.integrate.dblquad进行双积分。代码如下:
from scipy.integrate import dblquad
import numpy as np
def integrand(x, y, a, b):
return a*x**2 + b*y**3
def low_y(x):
0
def up_y(x):
1-2*x
a = 1.0
b = 1.0
area = dblquad(integrand, 0, np.Inf, low_y, up_y, args=(a,b), epsabs=1.49e-08, epsrel=1.49e-08)
print area
但是我收到类似TypeError: a float is required
的错误,错误表示代码的第二行。有什么解决方案吗?
答案 0 :(得分:1)
遇到问题时,我们应该始终测试每个程序。在这种情况下,当我们运行low_y(1.0)
或up_y(1.0)
时会发生什么?应该怎么办?我们看到了错误吗?
对于诸如此类的简单边界函数,您可能希望使用lambda
函数,尽管这主要是品味问题。在这里你可以把你的积分写成
area = dblquad(integrand, 0, np.Inf, lambda x : 0, lambda x : 1-2*x, args=(a,b), epsabs=1.49e-08, epsrel=1.49e-08)
注意:这可能只是一个测试用例,但是当集成到无穷大时,此功能没有有限的音量!