python中的变量边界的双积分Scipy + sympy(?)

时间:2015-06-10 14:13:55

标签: python scipy sympy integral

完整的数学问题是here

简单地说,我希望将函数与double积分集成。内部整数具有边界20x-2,而外部具有边界2230

我知道使用Scipy我可以用scipy.integrate.nquad计算双积分。我想做这样的事情:

def f(x, y):
    return (x ** 2 + y ** 2)
res = sp.integrate.nquad(f, [[22, 30], [20, x-2]])

有可能吗?也许也使用sympy

2 个答案:

答案 0 :(得分:8)

我用sympy解决了:

from sympy import *

x, y = symbols("x y")
f = (x ** 2 + y ** 2)
res = integrate(f, (y, 20, x-2), (x, 22, 30))

基本上sympy.integrate能够处理多个集成,也可以处理可变边界。

答案 1 :(得分:3)

如果您需要数字积分并且不能选择同意。然后你可以尝试类似下面的东西。 对于这个例子,它似乎很快,但我怀疑你可能会遇到一般问题,看看它对你的用例有多好。也许这个可能不完美的答案会促使别人提交更好的东西。

我使用的事实是,我们可以一个接一个地进行集成,首先集成y,得到x的函数,然后进行积分。

from scipy.integrate import quad

def integrand(x, y): 
    return (x ** 2 + y ** 2)

def y_integral(x):
    # Note scipy will pass args as the second argument
    # we can fiddle it to work correctly, but by symmetry we don't need to here.
    return quad(integrand, 20, x-2, args=(x))[0]

然后我们使用这个y_integral函数作为内积分的结果函数。

res = quad(y_integral, 22, 30) 
print res 

如果您经常使用它,可以将其包装在一个函数中。