python Scipy + sympy (?) 变量边界的双积分
Double integral with variable boundaries in python Scipy + sympy (?)
完整的数学问题是here。
简而言之,我想对一个具有二重积分的函数进行积分。内积分有边界 20
和 x-2
,而外积分有边界 22
和 30
.
我知道 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
如果你经常使用它,你可以将它包装在一个函数中。
完整的数学问题是here。
简而言之,我想对一个具有二重积分的函数进行积分。内积分有边界 20
和 x-2
,而外积分有边界 22
和 30
.
我知道 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
如果你经常使用它,你可以将它包装在一个函数中。