完整的数学问题是here。
简单地说,我希望将函数与double积分集成。内部整数具有边界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
?
答案 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
如果您经常使用它,可以将其包装在一个函数中。