声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2298|回复: 7

[编程技巧] 拜求一个二重积分问题:)

[复制链接]
发表于 2010-1-27 00:21 | 显示全部楼层 |阅读模式

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

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

x
求一个复指数函数的二重积分问题,

问题1:

出问题处的代码如下:
x1=-2:1:2;
k=5e7;
for n=1:5
   l(n)=dblquad(@(x,y)exp(i*k*((x1(n)-x).^2+y.^2)),0,1, -1,1) ;
end

运行后的警告:
Warning: Maximum function count exceeded; singularity likely.
> In quad at 106
  In dblquad>innerintegral at 84
  In quad at 77
  In dblquad at 60
  In example at 8
并且一直计算,一个多小时都算不出结果。


于是我把k改成很小的数值,k=5;很快计算出结果。

但是我需要的积分中,k就是很大,1e7量级以上,这怎么办呢?

问题2:

事实上,我的积分限并不是上述中的0,1, -1,1,而应该是0,inf,-inf,inf。但是好像dblquad的积分限不能是无穷大吧,于是用一个很大的数代替,我用1e7,即积分限为0,1e7,-1e7,1e7,(此时取k=5)
即程序代码变为:
x1=-2:1:2;
k=5;
for n=1:5
   l(n)=dblquad(@(x,y)exp(i*k*((x1(n)-x).^2+y.^2)),0,1e7,-1e7,1e7) ;
end


但是运行时仍然显示如下警告:

Warning: Maximum function count exceeded; singularity likely.
> In quad at 106
  In dblquad>innerintegral at 84
  In quad at 77
  In dblquad at 60
  In example at 8

即使我把积分限改为0,1e2,-1e2,1e2也仍然显示上述警告,一直计算不出来。

请问高手这又该怎么办呢?


总结一下:我的积分有两处条件都会出现警告,使程序一直运行不出结果:
一处是我的k值太大;一处是我的积分限太大。

这个怎么解决呢?两天了我都苦思不得其解。拜求高手指点!!!!!!!!!!!!

[ 本帖最后由 独立小桥风满袖 于 2010-1-27 00:23 编辑 ]

本帖被以下淘专辑推荐:

回复
分享到:

使用道具 举报

发表于 2010-1-27 09:57 | 显示全部楼层
LZ的i值是什么?而且如果i=1的话,被积函数不收敛。。。
 楼主| 发表于 2010-1-27 14:05 | 显示全部楼层

回复 沙发 maigicku 的帖子

i是虚数符号~    我的积分是复数的积分
发表于 2010-1-28 08:46 | 显示全部楼层
因为是复数,用dblquad可能不太合适,用符号积分可解:
syms x1 k x y
k=5e7;
x1=-2:2;
l=int(int(exp(i*k*((x1-x).^2+y.^2)),x,0,1e7),y,-1e7,1e7);
vpa(l)

还有,积分上下限不能为无穷,因为被积函数可能不收敛。。

评分

1

查看全部评分

发表于 2010-1-28 23:53 | 显示全部楼层
首先说明个人水平专业有限, 并未使用过dblquad函数!
只是感觉运行都已警告singularity likely了, 是否应先检查是否真的可用dblquad积分!?
LZ所积的函数大约可简化为exp(i*w)之类别, 依exp(i*w)=cos(w)+u*sin(w), 怀疑此类型函数可能不收敛, 即不可用dblquad积分? 是否可能需采用特殊方法了!?
离学校太久了, 一些基本数学好几年没碰了, 所以仅说说浅见, 待高人路过!
 楼主| 发表于 2010-1-29 14:31 | 显示全部楼层

回复 地板 maigicku 的帖子

谢谢您!
不过还想请教一下,int是符号积分,是不是只有被积函数有解析的原函数时才能用呢?
如果我的函数再复杂一些,没有解析的原函数,int好像就不能用了,这时候只能用数值积分了。这种情况用dblquad、或者用两次quadl,运算速度都会非常非常慢,有时也会出现上述警告。请问还有什么解决办法吗?
发表于 2010-1-29 15:26 | 显示全部楼层
试试选用quadgk method, 现在没新版可试
发表于 2010-1-31 00:22 | 显示全部楼层
x1=-2:1:2;
k=5e7;
for n=1:5
   l(n)=dblquad(@(x,y)exp(i*k*((x1(n)-x).^2+y.^2)),0,1, -1,1,'quadgk') ;
end
>> l
l =
  Columns 1 through 4
  -0.2815 - 0.2010i  -0.1598 + 0.2396i  -0.1307 + 0.0002i  -0.1307 + 0.0002i
  Column 5
  -0.1598 + 0.2396i
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-5-19 07:14 , Processed in 0.088268 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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