与 Scipy 的集成给出了负下限的不正确结果
Integration with Scipy giving incorrect results with negative lower bound
我正在尝试使用 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处出错了
我想知道是否有办法避免这种情况?
谢谢,
马特
我猜这与无限边界有关。 scipy.integrate.quad 是 quadpack 例程的包装器。
https://people.sc.fsu.edu/~jburkardt/f_src/quadpack/quadpack.html
最后,这些套路选择了合适的区间,通过函数求值,然后进行数值积分,尝试得到积分的值。这适用于有限积分,假设您大致知道您可以使函数评估的步骤有多精细。
对于无限积分,它取决于算法选择各个子区间的好坏程度以及它们的计算精度。
我的建议:如果您对无限积分的准确值感兴趣,则根本不要使用数值积分软件。
如果您的问题可以分析解决,请尝试或将自己限制在一定范围内。
我正在尝试使用 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处出错了
我想知道是否有办法避免这种情况?
谢谢,
马特
我猜这与无限边界有关。 scipy.integrate.quad 是 quadpack 例程的包装器。
https://people.sc.fsu.edu/~jburkardt/f_src/quadpack/quadpack.html
最后,这些套路选择了合适的区间,通过函数求值,然后进行数值积分,尝试得到积分的值。这适用于有限积分,假设您大致知道您可以使函数评估的步骤有多精细。
对于无限积分,它取决于算法选择各个子区间的好坏程度以及它们的计算精度。
我的建议:如果您对无限积分的准确值感兴趣,则根本不要使用数值积分软件。
如果您的问题可以分析解决,请尝试或将自己限制在一定范围内。