使用scipy.integrate.dblquad进行双积分

时间:2014-05-02 16:18:23

标签: python numpy scipy

我正在尝试使用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的错误,错误表示代码的第二行。有什么解决方案吗?

1 个答案:

答案 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)

注意:这可能只是一个测试用例,但是当集成到无穷大时,此功能没有有限的音量!