在Python中计算Dirichlet积分

箱子

我正在尝试计算积分

sin(x)/x , x = [0,inf]

我执行以下操作:

import math
from scipy.integrate import quad

t = float("inf")
def integrand(x):
    return (math.sin(x))/x
ans, err = quad(integrand, 0, t)

print(ans)

但是我得到了错误的答案:应该是Pi / 2,Python的答案是2.247。

您知道可能是什么问题吗?

您正在计算一个困难的积分-除非您使用非常具体的积分定义,否则甚至不会定义Dirichlet积分。https://docs.scipy.org/doc/scipy/reference/tutorial/integrate.html您正在使用的功能-quad用于General purpose integration考虑到它正在使用一种近似算法。

您看到警告了吗?我的输出显示:

/Users/jdong/venv2/lib/python2.7/site-packages/scipy/integrate/quadpack.py:364: IntegrationWarning: The integral is probably divergent, or slowly convergent.
  warnings.warn(msg, IntegrationWarning)

...我的错误是3.2903230524472544因此从技术上讲PI / 2在误差范围内。

另外,您正在计算到无穷大,而这在实际中并不是必须的。sinc函数趋向于迅速适度归零,因此您可以简单地进行操作quad(integrand,0,100)并获得不错的结果。请注意,但是随着增加限制,您将需要增加Quad使用的细分数量。例如quad(integrand,0,100000,limit=10000)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章