积分在integrate.quad中是如何工作的?

2024-05-15 06:41:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个复杂的函数,我无法理解它的集成行为:

  1. points是否指定可能奇点的间隔,或
  2. 不管上面的答案是什么,如何解释2.1工作而不是2?(还有15,…)请注意,奇点的唯一主体是0,但情况甚至不是这样,因为没有/ w,函数在那里和附近都是0
  3. 即使移除了/ w,行为仍然存在

import numpy as np
from scipy.integrate import quad

def fn(w, mu=11.316582914572866):
    return (np.exp(-1 / (1 - ((w - mu) * (np.abs(w - mu) < .999))**2))
            ) * (np.abs(w - mu) < .999) / w

for pt2 in (1.0, 2.0, 2.1, 5.0):
    print(pt2, '--', quad(fn, 1e-8, 40, points=(0, pt2))[0])
1.0 -- 0.039282478570060606
2.0 -- 0.0
2.1 -- 0.03928247857037831
5.0 -- 0.03928247859275705

Tags: 函数答案importnumpy间隔np情况abs
2条回答

points根据文档,用于指示集成间隔中的“感兴趣”区域。给定的点用于初始细分。因此给出points=(mu,)将[0,40]上的积分细分为区间[0,mu]和[mu,40]。中点值不在通过端点值的直线上,因此误差估计值将不为零,并触发进一步细分,以实现函数的适当采样。还可以给出所有points=(mu-1,mu,mu+1),以便在第一步中处理外部间隔。这一切都不需要非常精确,只要在函数的特征所在的位置获得特征大小的细分点或间隔就足够了

for pt2 in (1.0, 2.0, 2.1, 5.0):
    print(pt2, ' ', quad(fn, 1e-8, 40, points=(11,))[0])
1.0   0.03928247857032486
2.0   0.03928247857032486
2.1   0.03928247857032486
5.0   0.03928247857032486

for pt2 in (1.0, 2.0, 2.1, 5.0):
    print(pt2, ' ', quad(fn, 1e-8, 40, points=(9,13))[0])
1.0   0.039282478570323645
2.0   0.039282478570323645
2.1   0.039282478570323645
5.0   0.039282478570323645
  1. 您的点应该在您指定的积分间隔内,即0无效
  2. quad基于数值积分,包括采样和加权函数评估。在函数中添加print(w)可以让您查看采样发生的位置
  3. 从输出中可以看出,quad分别在[1e-8, 2][2, 40]上运行
  4. 输出还显示没有足够接近mu的采样。因此,quad只看到一个几乎始终为零的函数,从而得到结果

相关问题 更多 >

    热门问题