如何将一个近似 Dirac-delta 的函数与 scipy.integrate.quad 集成?

问题描述 投票:0回答:1

我想整合一个从0到+inf的函数,如下图

在以 x=1 为中心的一个小区间外迅速趋于 0。两个最大值的位置未知。最小值的位置是已知的。

scipy integration quad
1个回答
0
投票

如果您知道脉冲的宽度,但不知道它的位置,您将不得不使用宽度的 50% 的步长扫描您的域。

你可以使用

points
参数为你得到这个。 然而,quad 也有对函数采样次数的限制,因此相应地增加它。

这里是一个使用标准四元调用和使用推荐参数调用的示例

r1[0]
消失是因为quad没有意识到那些脉冲的存在,
r1[0]
随脉冲宽度线性减小,但是随着脉冲变窄它变得更慢。

from scipy.integrate import quad
import numpy as np
w = 1
fn = lambda x: sum(np.exp(-(x - cx)**2/(2*w**2)) for cx in [1, 3**0.5, 2*np.pi])
for w in [1, 0.1, 0.01, 0.001]:
    r1 = quad(fn, -10, 10)
    r2 = quad(fn, 0, 10, 
              points=np.arange(-10, 10, w/2), 
              limit=max(100, int(4*20/w)))
    print(w, r1, r2)
© www.soinside.com 2019 - 2024. All rights reserved.