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

Я пытаюсь интегрировать функцию с несколькими переменными в 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?


person D R    schedule 03.03.2010    source источник


Ответы (2)


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

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|Альфа согласен

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

print integrate.dblquad(func, -pi/2, pi/2, lambda x:-pi/2, lambda x:pi/2)[0]
person Paul    schedule 03.03.2010
comment
Это работает. Однако я буду интегрировать эту функцию в сотни тысяч маленьких ячеек. Не будет ли это слишком медленным, поскольку потребует вызова функции Python? - person D R; 03.03.2010
comment
Я не знаю, будет ли Integrated.quad внутренне векторизовать функцию или нет. Я знаю, что функцияintegr.quadrature делает это, но у меня возникла ошибка, когда я попробовал ее на двойном интеграле. Вы всегда можете ускорить интеграцию, увеличив допуск. Или еще лучше, найти точное решение! - person Paul; 03.03.2010