首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Python计算Dirichlet积分

用Python计算Dirichlet积分
EN

Stack Overflow用户
提问于 2017-10-01 06:49:05
回答 1查看 369关注 0票数 1

我在计算积分

代码语言:javascript
复制
sin(x)/x , x = [0,inf]

我所做的工作如下:

代码语言:javascript
复制
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。

你知道有什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-01 07:00:47

你在计算一个困难的积分-- Dirichlet积分甚至没有定义,除非你使用了非常具体的积分定义。https://docs.scipy.org/doc/scipy/reference/tutorial/integrate.html你使用的函数-- quad,是General purpose integration的函数。考虑到它使用的是近似算法。

你看过警告了吗?我的输出显示:

代码语言:javascript
复制
/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)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46509934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档