【问题标题】:Double integral with variable boundaries in python Scipy + sympy (?)python Scipy + sympy中具有变量边界的双积分(?)
【发布时间】:2015-08-25 20:36:06
【问题描述】:

完整的数学问题是here。

简单地说,我想将一个函数与一个双积分积分。内积分有边界20 和x-2,而外积分有边界22 和30。

我知道使用 Scipy,我可以用 scipy.integrate.nquad 计算二重积分。我想做这样的事情:

def f(x, y):
    return (x ** 2 + y ** 2)
res = sp.integrate.nquad(f, [[22, 30], [20, x-2]])

有可能吗?也许也使用sympy?

【问题讨论】:

    标签: python scipy sympy integral


    【解决方案1】:

    我用sympy解决了:

    from sympy import *
    
    x, y = symbols("x y")
    f = (x ** 2 + y ** 2)
    res = integrate(f, (y, 20, x-2), (x, 22, 30))
    

    基本上sympy.integrate 能够处理多个集成,也可以处理变量边界。

    【讨论】:

      【解决方案2】:

      如果您需要数值积分并且 sympy 不是一个选项。然后,您可以尝试以下方法。 对于此示例,它似乎很快,但我怀疑您可能会遇到一般问题,看看它对您的用例的效果如何。也许这个可能不完美的答案会促使某人提交更好的东西。

      我利用这样一个事实,我们可以一个接一个地进行积分,先积分出 y,得到 x 的函数,然后积分。

      from scipy.integrate import quad
      
      def integrand(x, y): 
          return (x ** 2 + y ** 2)
      
      def y_integral(x):
          # Note scipy will pass args as the second argument
          # we can fiddle it to work correctly, but by symmetry we don't need to here.
          return quad(integrand, 20, x-2, args=(x))[0]
      

      然后我们使用这个 y_integral 函数作为内积分的结果函数。

      res = quad(y_integral, 22, 30) 
      print res 
      

      如果你经常使用它,你可以将它包装在一个函数中。

      【讨论】:

        猜你喜欢
        • 2017-12-13
        • 2023-01-02
        • 2020-07-30
        • 1970-01-01
        • 1970-01-01
        • 2013-08-15
        • 2018-09-04
        • 1970-01-01
        • 2014-05-15
        相关资源
        最近更新 更多