如果您知道脉冲的宽度,但不知道它的位置,您将不得不使用宽度的 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)