11

Próbuję zintegrować funkcję wielu zmiennych w SciPy w obszarze 2D. Jaki byłby odpowiednik następującego kodu Mathematica?Całki 2D w 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 

Patrząc na SciPy documentation mogłem znaleźć tylko wsparcie dla jednowymiarowej kwadratury. Czy istnieje sposób na wielowymiarowe całki w SciPy?

Odpowiedz

12

myślę, że to działa tak:

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

Edit: Właśnie odkryto dblquad który wydaje się dokładnie to, co chcesz:

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

To działa. Będę jednak integrował tę funkcję z setkami tysięcy małych komórek. Czy nie byłoby to zbyt wolne, ponieważ wymagałoby to wywołania funkcji Pythona? – dzhelil

+0

Nie wiem, czy zintegrować.quad będzie wewnętrznie wektoryzacji funkcji, czy nie. Wiem, że integrate.quadrature ma, ale dostałem błąd, gdy próbowałem go na podwójnej całce. Zawsze możesz przyspieszyć integrację poprzez zwiększenie tolerancji. Albo jeszcze lepiej, znajdź dokładne rozwiązanie! – Paul

9

Jeśli chcesz zrobić symboliczną integrację, spójrz na 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

Musi być spacja między X i Y w "XY". – MOON

+0

Dzięki, naprawiłem problem. –