2D интегралы в SciPy - PullRequest
       28

2D интегралы в SciPy

12 голосов
/ 03 марта 2010

Я пытаюсь интегрировать многопараметрическую функцию в 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 Я мог найти поддержку только для одномерной квадратуры. Есть ли способ сделать многомерные интегралы в SciPy?

Ответы [ 2 ]

13 голосов
/ 03 марта 2010

Я думаю, что это будет работать примерно так:

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]

Вольфрам | Альфа соглашается

edit: я только что обнаружил dblquad , который, кажется, делает именно то, что вы хотите:

print integrate.dblquad(func, -pi/2, pi/2, lambda x:-pi/2, lambda x:pi/2)[0]
9 голосов
/ 03 марта 2010

Если вы хотите сделать символическую интеграцию, взгляните на 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))
...