Numpy 为什么integrate.quad(lambda x:x*exp(-x**2/2)/sqrt(2*pi),0.01000000)给出0?

Numpy 为什么integrate.quad(lambda x:x*exp(-x**2/2)/sqrt(2*pi),0.01000000)给出0?,numpy,scipy,integrate,Numpy,Scipy,Integrate,这个函数是从0到inf的正函数,为什么给大于1000的会屈服于0,这是不合理的 import scipy.integrate as integrate from math import * integrate.quad(lambda x: x*exp(-x**2/2)/sqrt(2*pi), 0.0, 1000) Out[52]: (0.3989422804014328, 1.6471510195390376e-11) integrate.quad(lambda x: x*exp(-x**2

这个函数是从0到inf的正函数,为什么给大于1000的会屈服于0,这是不合理的

import scipy.integrate as integrate
from math import *

integrate.quad(lambda x: x*exp(-x**2/2)/sqrt(2*pi), 0.0, 1000)
Out[52]: 
(0.3989422804014328, 1.6471510195390376e-11)
integrate.quad(lambda x: x*exp(-x**2/2)/sqrt(2*pi), 0.0, 100000)
Out[54]: 
(0.0, 0.0)

对于大于约39的x,
exp(-x**2/2)
给出0.0。当积分上限为100000时,函数非零的积分间隔分数非常小,以至于
quad
算法从未看到它。就
quad
而言,函数相同为0。

对于大于约39的x,
exp(-x**2/2)
给出0.0。当积分上限为100000时,函数非零的积分间隔分数非常小,以至于
quad
算法从未看到它。就
quad
而言,函数相同为0。

是否有办法解决此问题?对于任意函数,请一般解决此问题?我不知道有什么方法。为了有效地使用
quad
(或任何数值积分算法),您必须了解一些函数的行为。如果你想为这个特殊的函数修正它,你可以简单地使用积分的解析表达式,而不是使用
quad
。有没有办法修正它?一般来说,对于任意函数修正它?我不知道有什么方法。为了有效地使用
quad
(或任何数值积分算法),您必须了解一些函数的行为。如果您想为这个特定函数修正它,您可以简单地使用积分的解析表达式,而不是使用
quad