11

में 2 डी इंटीग्रल मैं 2 डी क्षेत्र में SciPy में एक बहुविकल्पीय फ़ंक्शन को एकीकृत करने की कोशिश कर रहा हूं। निम्नलिखित Mathematica कोड के बराबर क्या होगा?साइपी

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

यह काम करता है। हालांकि, मैं सैकड़ों हजारों छोटी कोशिकाओं पर समारोह को एकीकृत कर दूंगा। क्या यह बहुत धीमी नहीं होगी क्योंकि इसमें एक अजगर समारोह को शामिल करना शामिल होगा? – dzhelil

+0

मुझे नहीं पता कि integrate.quad आंतरिक रूप से कार्य को वेक्टरकृत करेगा या नहीं। मैं integrate.quadrature जानता है, लेकिन जब मैं इसे एक डबल अभिन्न पर कोशिश की तो मुझे एक त्रुटि मिली। सहिष्णुता को बढ़ाकर आप हमेशा एकीकरण को तेजी से बना सकते हैं। या बेहतर अभी तक, एक सटीक समाधान खोजें! – Paul

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

+0

धन्यवाद, मैंने समस्या तय की है। –

संबंधित मुद्दे