SciPy中的二维积分
我想在SciPy中对一个多变量函数进行积分,范围是在一个二维区域内。请问下面这段Mathematica的代码在SciPy中怎么写?
In[1]:= F[x_, y_] := Cos[x] + Cos[y]
In[2]:= Integrate[F[x, y], {x, -\[Pi], \[Pi]}, {y, -\[Pi], \[Pi]}]
Out[2]= 0
我查看了SciPy的文档,发现它只支持一维的积分。请问在SciPy中有没有办法进行多维积分呢?
2 个回答
9
如果你想进行符号积分,可以看看 sympy 这个工具,链接在这里:code.google.com/p/sympy。
import sympy as s
x, y = s.symbols('x, y')
expr = s.cos(x) + s.sin(y)
expr.integrate((x, -s.pi, s.pi), (y, -s.pi, s.pi))
13
我觉得它的工作原理大概是这样的:
def func(x,y):
return cos(x) + cos(y)
def func2(y, a, b):
return integrate.quad(func, a, b, args=(y,))[0]
print integrate.quad(func2, -pi/2, pi/2, args=(-pi/2, pi/2))[0]
补充一下:我刚发现了 dblquad,它似乎正好能满足你的需求:
print integrate.dblquad(func, -pi/2, pi/2, lambda x:-pi/2, lambda x:pi/2)[0]