11

我正在嘗試在SciPy上集成一個多變量函數在2D區域。 相當於下面的Mathematica代碼是什麼?SciPy中的2D積分

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 documentation我只能找到一維正交的支持。有沒有辦法在SciPy中做多維積分?

回答

12

我覺得這工作是這樣的:

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] 

Wolfram|Alpha agrees

編輯:我剛剛發現dblquad這似乎做的正是你想要的東西:

print integrate.dblquad(func, -pi/2, pi/2, lambda x:-pi/2, lambda x:pi/2)[0] 
+0

This works。但是,我將把這個功能集成到成千上萬的小單元中。這不會太慢,因爲它會涉及調用python函數? – dzhelil 2010-03-03 02:55:15

+0

我不知道integration.quad是否會內部向量化該函數。我知道integrate.quadrature的確如此,但是當我嘗試使用double積分時出現錯誤。您可以通過增加容差來加快整合速度。或者更好,找到一個確切的解決方案! – Paul 2010-03-03 06:09:11

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)) 
+0

'xy'中x和y之間必須有一個空格。 – MOON 2014-02-20 23:00:07

+0

謝謝,我解決了這個問題。 – 2014-02-21 09:53:55