SciPy

11
'da 2B integraller

2B alanı üzerinde çok değişkenli bir işlevi SciPy ile bütünleştirmeye çalışıyorum. Aşağıdaki Mathematica kodunun karşılığı ne olurdu?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 

sadece tek boyutlu dördün için destek bulabiliriz SciPy documentation bakarak. SciPy'de çok boyutlu integraller yapmanın bir yolu var mı?

cevap

12

Ben böyle bir şey işe yarar mı:

Wolfram|Alpha agrees

düzenlemek

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] 
: Sadece ne istediğinizi tam olarak yapmak gibi görünüyor dblquad keşfetti:

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

Bu, çalışır. Bununla birlikte, yüz binlerce küçük hücreden fazla fonksiyonu birleştireceğim. Bir python işlevini çağırmayı gerektirecek kadar yavaş olmaz mıydı? – dzhelil

+0

Integrate.quad'in işlevi dahili olarak vectorize edip edemeyeceğini bilmiyorum. İntegral biliyorum.quadrature yapar, ama bir çift integralde denediğimde bir hatam oldu. Toleransı artırarak entegrasyonu daima daha hızlı yapabilirsiniz. Ya da daha iyisi, kesin bir çözüm bul! – Paul

9

İsterseniz Sembolik entegrasyon yapmak için, semiyeye bir göz atın (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' içinde x ile y arasında bir boşluk olmalıdır. – MOON

+0

Teşekkürler, sorunu çözdüm. –