计算 Python 中的 Dirichlet 积分
Calculating Dirichlet Integral in Python
我正在尝试计算积分
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(integrand,0,100000,limit=10000)
我正在尝试计算积分
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(integrand,0,100000,limit=10000)