我试图使用python/scipy计算两个极限之间的积分。
我正在使用在线计算器双重检查我的结果(http://www.wolframalpha.com/widgets/view.jsp?id=8c7e046ce6f4d030f0b386ea5c17b16a,http://www.integral-calculator.com/),当我设定了某些限制时,我的结果不同意。
所用的代码是:
import scipy as sp
import numpy as np
def integrand(x):
return np.exp(-0.5*x**2)
def int_test(a,b):
# a and b are the lower and upper bounds of the integration
return sp.integrate.quad(integrand,a,b)当设定(a,b)到(-np.inf,1)的限制时,我得到的答案是一致的(2.10894.)然而,如果我设置(-np.inf,300),则得到一个零的答案。
关于进一步调查:
for i in range(50):
print(i,int_test(-np.inf,i))我可以看出i=36的结果是错误的。
我想知道是否有办法避免这种情况?
谢谢,
哑光
发布于 2016-10-12 15:48:11
我猜这与无限的界限有关。scipy.integrate.quad是四包例程的包装器。
最后,这些例程选择合适的区间,通过函数求值和数值积分求出积分的值。这对于有限积分来说很好,假设您大致知道函数计算的步骤有多精细。
对于无限积分,这取决于算法如何选择各自的子区间,以及它们的计算精度。
我的建议是:如果你对无限积分的精确值感兴趣,就不要使用数值积分软件。
如果你的问题可以通过分析来解决,那就试试,或者把自己限制在一定的范围内。
https://stackoverflow.com/questions/40001402
复制相似问题