我有一个复杂的函数,我无法理解它的集成行为:
points
是否指定可能奇点的间隔,或点李>2.1
工作而不是2
?(还有1
,5
,…)请注意,奇点的唯一主体是0,但情况甚至不是这样,因为没有/ w
,函数在那里和附近都是0李>/ 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
points
根据文档,用于指示集成间隔中的“感兴趣”区域。给定的点用于初始细分。因此给出points=(mu,)
将[0,40]上的积分细分为区间[0,mu]和[mu,40]。中点值不在通过端点值的直线上,因此误差估计值将不为零,并触发进一步细分,以实现函数的适当采样。还可以给出所有points=(mu-1,mu,mu+1)
,以便在第一步中处理外部间隔。这一切都不需要非常精确,只要在函数的特征所在的位置获得特征大小的细分点或间隔就足够了或
0
无效李>quad
基于数值积分,包括采样和加权函数评估。在函数中添加print(w)
可以让您查看采样发生的位置李>[1e-8, 2]
和[2, 40]
上运行李>mu
的采样。因此,quad
只看到一个几乎始终为零的函数,从而得到结果李>相关问题 更多 >
编程相关推荐