【问题标题】:Why does scipy.integrate.quad return 0 instead of the correct value of the integral?为什么 scipy.integrate.quad 返回 0 而不是积分的正确值?
【发布时间】:2018-09-02 18:53:52
【问题描述】:

我有一个代码,它使用 scipy.integrate.quad 包作为流程的一部分。这应该会产生遵循下图中红线的值(蓝色方块)。一些蓝色方块不跟随趋势,这只能是 scipy.integrate.quad 过程中误差的导数。有谁知道为什么 quad 包可能仅对某些响应失败?可能与浮点运算或其他一些潜在问题有关?

注意:我之前在其他函数中看到过这个问题,我确信错误的来源是 quad 包,而不是我的代码的其余部分。

【问题讨论】:

    标签: python scipy integration quad


    【解决方案1】:

    quad 返回接近 0 的值的一个可能原因是该函数相对于积分区间的大小非常局部化,而算法只是错过了它。一个例子:

    from scipy.integrate import quad
    import numpy as np
    np.around([quad(lambda x: np.exp(-x**2), -100, 100*n)[0] for n in range(1, 10)], 3)
    

    返回[1.772, 1.772, 1.772, 0., 0., 1.772, 0., 1.772, 0.]),其中零不正确。这里高斯在 0 附近得到支持,当积分区间为 [-100, 300] 或这样时,quad 永远不会在 0 附近对其值进行采样。(对于其他一些区间,它会这样做,偶然。)

    补救措施:使用参数points 来指示函数的大致位置。与

    quad(lambda x: np.exp(-x**2), -100, 100*n, points=[-10, 10])
    

    上面的代码每 n 个返回 1.772。

    【讨论】:

      猜你喜欢
      • 2021-03-11
      • 1970-01-01
      • 2020-08-06
      • 1970-01-01
      • 2010-11-14
      • 1970-01-01
      • 2014-05-22
      • 1970-01-01
      相关资源
      最近更新 更多