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

Double integral with variable boundaries in python Scipy + sympy (?)

完整的数学问题是here

简而言之,我想对一个具有二重积分的函数进行积分。内积分有边界 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?

我用 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能够处理多重积分,也有可变边界。

如果您需要数值积分并且 sympy 不是一个选项。然后您可以尝试以下操作。 对于这个例子,它看起来很快,但我怀疑你可能 运行 遇到一般问题,看看它对你的使用有多好 case.Perhaps 这个可能不完美的答案会促使别人提交更好的东西。

我利用了这样一个事实,即我们可以一个接一个地进行积分,首先对 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 

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