在Python中计算Dirichlet积分

时间:2017-10-01 06:49:05

标签: python scipy integral

我试图计算以下积分:

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的答案 Python的答案是2.247

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

1 个答案:

答案 0 :(得分:3)

你正在计算一个难度积分 - 除非你使用非常具体的积分定义,否则Dirichlet积分甚至没有定义。 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

...我的错误是quad(integrand,0,100)。因此技术上PI / 2在误差范围内。

此外,你正在计算无穷大,这是不必要的。 sinc函数趋于零度适度快,因此您可以简单地执行quad(integrand,0,100000,limit=10000)并得到一个不错的结果。请注意,当您增加限制时,您将需要增加quad使用的细分数。例如select * from table for json auto