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

gc5*_*gc5 8 python sympy integral scipy

完整的数学问题就在这里.

简单地说,我希望将函数与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]])
Run Code Online (Sandbox Code Playgroud)

可能吗?也许还用sympy

gc5*_*gc5 10

我解决了sympy:

from sympy import *

x, y = symbols("x y")
f = (x ** 2 + y ** 2)
res = integrate(f, (y, 20, x-2), (x, 22, 30))
Run Code Online (Sandbox Code Playgroud)

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


cam*_*amz 6

如果您需要数值积分,那么 sympy 不是一个选择。然后你可以尝试类似下面的方法。对于这个例子,它看起来很快,但我怀疑您可能会遇到一般问题,看看它对您的用例的效果如何。也许这个可能不完美的答案会促使某人提交更好的东西。

我利用这样一个事实:我们可以一个接一个地进行积分,首先对 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]
Run Code Online (Sandbox Code Playgroud)

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

res = quad(y_integral, 22, 30) 
print res 
Run Code Online (Sandbox Code Playgroud)

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