【问题标题】:2D integrals in SciPySciPy 中的二维积分
【发布时间】:2011-01-23 00:35:27
【问题描述】:

我正在尝试在二维区域上集成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 中进行多维积分?

【问题讨论】:

    标签: python integration wolfram-mathematica scipy multidimensional-array


    【解决方案1】:

    我认为它会像这样工作:

    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]
    

    【讨论】:

    • 这行得通。但是,我将在数十万个小单元上集成该功能。这会不会太慢,因为它会涉及调用 python 函数?
    • 我不知道integrate.quad 是否会在内部对函数进行矢量化。我知道integrate.quadrature 可以,但是当我在双积分上尝试它时出现错误。您总是可以通过增加容差来加快集成速度。或者更好的是,找到一个确切的解决方案!
    【解决方案2】:

    如果你想做符号集成,看看 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之间必须有一个空格。
    • 谢谢,我解决了这个问题。
    猜你喜欢
    • 2013-03-25
    • 2019-11-22
    • 2012-04-24
    • 1970-01-01
    • 1970-01-01
    • 2018-05-10
    • 1970-01-01
    • 1970-01-01
    • 2015-08-02
    相关资源
    最近更新 更多