我正在嘗試在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中做多維積分?
我正在嘗試在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中做多維積分?
我覺得這工作是這樣的:
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]
如果你想做符號整合,看看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))
'xy'中x和y之間必須有一個空格。 – MOON 2014-02-20 23:00:07
謝謝,我解決了這個問題。 – 2014-02-21 09:53:55
This works。但是,我將把這個功能集成到成千上萬的小單元中。這不會太慢,因爲它會涉及調用python函數? – dzhelil 2010-03-03 02:55:15
我不知道integration.quad是否會內部向量化該函數。我知道integrate.quadrature的確如此,但是當我嘗試使用double積分時出現錯誤。您可以通過增加容差來加快整合速度。或者更好,找到一個確切的解決方案! – Paul 2010-03-03 06:09:11