ysyzhb 发表于 2007-6-9 17:28

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

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

hunter_009 发表于 2007-6-9 20:08

我用maple计算发现,这个积分不收敛.为无穷大.

hunter_009 发表于 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很小时)积分的近似表达式.

ysyzhb 发表于 2007-6-10 10:25

非常感谢hunter仁兄的回答!题目中的函数是一个代表,代表有奇异性、振荡性的函数,精确积分肯定是算不出来的,但我想计算它的数值积分。我看到一篇文章里对类似函数的积分是这样的:先把它转换成线性代数方程式,然后利用辛普森法求积,并将区域离散成若干个区域,因为文章中的被积函数是快速振动函数,所以数值积分时在布里渊区(Brillouin zones)上进行,这样就收敛了,然后矩阵求逆用的是高斯消去,而不是迭代。
       我不是学数学的,所以这一系列我都不太明白,具体实施我并不知道,还望高手回答!!谢谢!!

hunter_009 发表于 2007-6-10 14:02

振荡积分你应该找一些专门的数值计算方面的书看一些,一般有分部积分变换与飞龙(filon)等等方法来处理,具体的参照专门的书籍.
我不知道你说的布里渊区是什么,这好像是晶体物理学上的一个概念,怎么用到数学上来了.

ysyzhb 发表于 2007-6-10 14:26

是的,是物理上的一个概念,但文章里就是这么写的,Eringen的‘Crack-tip problem in non-local elasticity.’。我有一本《现代数值计算方法》,北京大学出版社。书里有关数值积分的部分:牛顿-柯特斯公式;龙贝格求积公式和高斯型求积公式。这些方法是不是只有通过编程才能实现在计算机上?那我如何知道mathematica中NIntegrate[]用的是什么方法呢?

[ 本帖最后由 ysyzhb 于 2007-6-10 14:38 编辑 ]

suffer 发表于 2007-6-14 16:43

首先,正如hunter_009所说你给的这个积分是无穷的,无法给出正确解来

第二个问题,你说的算法问题,帮助中就有,以下是翻译成中文的
NIntegrate通常使用一个自适应算法,该算法按需要递归地对积分区域进行划分. 在一维情形,GaussPoints指定要选择的初始点数目.GaussPoints的缺省设置是Floor。在任意维数下,MinRecursion指定试图进行的递归划分的最小数目。MaxRecursion给出最小值。

ysyzhb 发表于 2007-6-14 19:26

回复 #7 suffer 的帖子

谢谢了!看来还得多看帮助啊!

suffer 发表于 2007-6-15 09:01

原帖由 ysyzhb 于 2007-6-14 19:26 发表 http://www.chinavib.com/forum/images/common/back.gif
谢谢了!看来还得多看帮助啊!

其实现在大部分软件帮助都有很明确的说明
页: [1]
查看完整版本: 如何得到NIntegrate[sin[1/x],{x,0,Infinity}]的正确结果??