gc5*_*gc5 8 python sympy integral scipy
完整的数学问题就在这里.
简单地说,我希望将函数与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]])
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能够处理多个集成,也具有可变边界.
如果您需要数值积分,那么 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)
如果您经常使用它,您可以将其包装在一个函数中。