声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2390|回复: 8

[mathematica] 如何得到NIntegrate[sin[1/x],{x,0,Infinity}]的正确结果??

[复制链接]
发表于 2007-6-9 17:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
如题,积分后总是有一些警告,说明结果不是精确值,虽然有时候相差不大。如何能得出此类函数的正确数值积分结果呢??望高手回复!
回复
分享到:

使用道具 举报

发表于 2007-6-9 20:08 | 显示全部楼层
我用maple计算发现,这个积分不收敛.为无穷大.
发表于 2007-6-9 20:39 | 显示全部楼层
可以作如下的的解答.
令t=1/x,dx/(-x^2)=dt,原式=int(sint(t)/x^2,t=0..infinity),在t很小的时候截断分成两项,如t=1.0e-3时,
原式=int(sin(t)/t^2,t=0..1.0e-3)+int(sin(t)/t^2,t=1.0e-3..infinity)
因为sin(t)<=1,所以上式积分第二项的极限存在,
而t很小时,sint(t)约等于t,所以上式第一项可化为:
int(1/t,t=0..1.0e-3)
1/t的原函数为ln(t),,当t趋于0时,in(t)趋于负无穷,因此第一项的极限不存在.
因此整个积分的极限不存在,不过上式也给出了当x很大时(t很小时)积分的近似表达式.
 楼主| 发表于 2007-6-10 10:25 | 显示全部楼层
非常感谢hunter仁兄的回答!题目中的函数是一个代表,代表有奇异性、振荡性的函数,精确积分肯定是算不出来的,但我想计算它的数值积分。我看到一篇文章里对类似函数的积分是这样的:先把它转换成线性代数方程式,然后利用辛普森法求积,并将区域离散成若干个区域,因为文章中的被积函数是快速振动函数,所以数值积分时在布里渊区(Brillouin zones)上进行,这样就收敛了,然后矩阵求逆用的是高斯消去,而不是迭代。
       我不是学数学的,所以这一系列我都不太明白,具体实施我并不知道,还望高手回答!!谢谢!!
发表于 2007-6-10 14:02 | 显示全部楼层
振荡积分你应该找一些专门的数值计算方面的书看一些,一般有分部积分变换与飞龙(filon)等等方法来处理,具体的参照专门的书籍.
我不知道你说的布里渊区是什么,这好像是晶体物理学上的一个概念,怎么用到数学上来了.
 楼主| 发表于 2007-6-10 14:26 | 显示全部楼层
是的,是物理上的一个概念,但文章里就是这么写的,Eringen的‘Crack-tip problem in non-local elasticity.’。我有一本《现代数值计算方法》,北京大学出版社。书里有关数值积分的部分:牛顿-柯特斯公式;龙贝格求积公式和高斯型求积公式。这些方法是不是只有通过编程才能实现在计算机上?那我如何知道mathematica中NIntegrate[]用的是什么方法呢?

[ 本帖最后由 ysyzhb 于 2007-6-10 14:38 编辑 ]
发表于 2007-6-14 16:43 | 显示全部楼层
首先,正如hunter_009所说你给的这个积分是无穷的,无法给出正确解来

第二个问题,你说的算法问题,帮助中就有,以下是翻译成中文的
NIntegrate通常使用一个自适应算法,该算法按需要递归地对积分区域进行划分. 在一维情形,GaussPoints指定要选择的初始点数目.GaussPoints的缺省设置是Floor[WorkingPrecision/3]。在任意维数下,MinRecursion指定试图进行的递归划分的最小数目。MaxRecursion给出最小值。
 楼主| 发表于 2007-6-14 19:26 | 显示全部楼层

回复 #7 suffer 的帖子

谢谢了!看来还得多看帮助啊!
发表于 2007-6-15 09:01 | 显示全部楼层
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-23 19:57 , Processed in 0.105831 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表