使用SciPy进行的2D积分

12

我正在尝试在SciPy中积分一个多变量函数,该函数在2D区域内。 以下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

我认为它会像这样起作用:

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表示同意。

编辑:我刚刚发现dblquad似乎可以完全满足您的需求:

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

这个是可以运行的。但是,我将会在成千上万的小单元格上集成该函数。这样做会不会太慢了,因为它会涉及到调用 Python 函数呢? - D R
我不知道 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))

“xy” 中的 x 和 y 之间必须有一个空格。 - MOON
谢谢,我已经解决了这个问题。 - Stefan van der Walt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接