声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1051|回复: 3

[编程技巧] 请教一个积分问题~

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

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

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

x
用matlab求一个函数的积分:

被积函数如下: exp((i*k/(2*d)).*((x1(n)-x).^2+y.^2))

其中,x、y是自变量,i 是虚数符号,k、d和x1(n)都是程序中已经定义的常数和矩阵,积分变量x的积分限是-0.0001到0.0001,y的积分限是负无穷到正无穷。

请问这个用matlab怎么实现?我分别用了quadl和dblquad两个函数,

l(n)=quadl(@(x) arrayfun(@(xx) quadl(@(y) exp((i*k/(2*d))*((x1(n)-xx)^2+y.^2)),-inf,inf),x),-0.0001,0.0001)



l(n)=dblquad(@(x,y)exp((i*k/(2*d)).*((x1(n)-x).^2+y.^2)),-0.0001,0.0001, -inf,inf)

程序可以运行,但是运行结果都不对,都是NAN,但理论上不应该是NAN的……

烦请高人指点迷津,是哪个地方出错了呢?

本帖被以下淘专辑推荐:

回复
分享到:

使用道具 举报

发表于 2010-1-26 04:50 | 显示全部楼层
1.在使用dblquad函数时,不能用inf,可以用个大数代替;
2.exp((i*k/(2*d)).*((x1(n)-x).^2+y.^2))可以写成cos()+i*sin()的形式,从而可以看出y为无穷时,cos或sin的值是不定的。因此我怀疑此函数应该不可积。可以先确定y的范围(不是从-inf到inf,而是具体的值),再进行积分。

评分

1

查看全部评分

 楼主| 发表于 2010-1-26 20:27 | 显示全部楼层

回复 沙发 friendchj 的帖子

谢谢您,您的回答对我帮助非常大!

不过麻烦烦继续请教一下,
1、dblquad函数不能用inf,那么有能用inf的积分函数吗?还是说所有积分中的inf都只能用大数代替?我的积分要求精度相对较高,我不知道用任一个大数代替会不会引进较大的误差?或者说用多大的数字比较合适?

2、我的积分函数是光学中狭缝菲涅尔衍射的一个表达式,理论上是可以积出来衍射图形光强分布的。不过您的分析好像也很有道理。我再研究一下,看哪个环节出错了。非常感谢!
发表于 2010-1-27 09:34 | 显示全部楼层
数值积分不能用INF。。。如果你的积分函数是收敛的话,那么一个较大的数已经足够了。。如果不能确实数字多大合适,可以分别取两个较大的数,看一下积分出来的结果。。。
还有关于用inf的问题,符号积分int可以取,不过对被积函数要求收敛。。

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-5-26 08:14 , Processed in 0.069978 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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