我试图使用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时结果出错。
我想知道是否有办法避免这种情况?
谢谢,
马特
答案 0 :(得分:1)
我猜这与无限界限有关。 scipy.integrate.quad是quadpack例程的包装器。
https://people.sc.fsu.edu/~jburkardt/f_src/quadpack/quadpack.html
最后,这些例程选择了合适的区间,并尝试通过函数评估和数值积分得到积分的值。这适用于有限积分,假设你大致知道你可以做出功能评估的步骤。
对于无限积分,它取决于算法选择各个子区间的程度以及计算它们的准确程度。
我的建议:如果您对无限积分的准确值感兴趣,请不要使用数值积分软件AT ALL。
如果您的问题可以通过分析解决,请尝试或限制自己适应某些范围。