我想集成一个从0到+inf的函数,如下图所示。
在以x=1为中心的小区间之外,它迅速地变为0。两个最大值的位置是未知的。最小值的位置是已知的。
oyjwcjzk1#
如果您知道脉冲的宽度,但不知道其位置,则必须使用宽度的50%的步长扫描域。您可以使用points参数将quad转换为this。然而,quad也有对函数采样次数的限制,因此相应地增加。这里是一个使用标准quad调用和带有推荐参数的调用的示例r1[0]消失是因为quad没有意识到这些脉冲的存在,r1[0]随着脉冲的宽度线性减小,但是随着脉冲变窄,它变得更慢。
points
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)
1条答案
按热度按时间oyjwcjzk1#
如果您知道脉冲的宽度,但不知道其位置,则必须使用宽度的50%的步长扫描域。
您可以使用
points
参数将quad转换为this。然而,quad也有对函数采样次数的限制,因此相应地增加。这里是一个使用标准quad调用和带有推荐参数的调用的示例
r1[0]
消失是因为quad没有意识到这些脉冲的存在,r1[0]
随着脉冲的宽度线性减小,但是随着脉冲变窄,它变得更慢。