【问题标题】:scipy.integrate.tplquad gives wrong result for integral over large volumescipy.integrate.tplquad 对大体积积分给出错误的结果
【发布时间】:2018-07-10 12:54:50
【问题描述】:

我正在尝试在所有空间上集成 3 个变量 f(x,y,z) 的函数。

当我对小体积进行集成时,我得到了大致正确的结果。但是,当我增加积分量时,python 说积分为零。

我相当有信心,这里的问题是函数 f 仅在空间的一小块区域中不为零,并且当积分量很大时,tplquad 不会在该区域上进行足够的采样。我在此链接上找到了 1D 中类似问题的答案; scipy.integrate.quad gives wrong result on large ranges。 1D 中的解决方案是将参数“points”传递给 scipy.integrate.quad,这有助于 quad 专注于积分非零的区间。

我的问题是; tplquad 的“积分”是否有类似的论点? 或者也许我可以通过其他方式指示 tplquad 专注于特定的空间区域?

【问题讨论】:

    标签: python scipy integrate quad


    【解决方案1】:

    tplquad 方法只是nquad 的一个包装器,它不会公开后者的所有选项。使用nquad,支持通过opts参数将points传递给quad。一个简单的例子,所有范围的点都相同:

    import numpy as np
    from scipy.integrate import nquad
    f = lambda x, y, z: np.exp(-x**2-y**2-z**2)
    nquad(f, [[-150, 90], [-150, 90], [-150, 90]])[0]   # 2.260158041551299e-16, wrong
    nquad(f, [[-150, 90], [-150, 90], [-150, 90]], opts={"points": [-5, 5]})[0]   # 5.568327996820292, correct
    

    一般来说,opts 可以是多重集成的不同步骤的不同选项列表,points 可以在它们之间有所不同。它们还可以取决于其他变量,例如积分限制;请参阅文档中的示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-11
      • 2018-08-12
      相关资源
      最近更新 更多