soberprogress 发表于 2008-10-15 09:27

求助matlab探讨:quad和quadl为何积分结果相差极大?

clear all;
syms n r lamda z rho alpha w;
k=2*pi/lamda;
sgb=exp(-(r/w)^n)*besselj(0,alpha*r);%SGB
intgrnd=k/z*exp(i*k*rho^2/(2*z))*sgb*exp(-i*k*r^2/(2*z))*besselj(0,k*rho*r/z)*r;

N=8;% the order of SG
Z=100:2:106;
Rho=linspace(-0.01,0.01);
intgrnd=subs(intgrnd,{n lamda z alpha w},{N,1550*10^-9,Z,600,0.05});%关于Z的向量

intValue=zeros(length(Z),length(Rho));%预分配空间
for iValue=1:length(Z)
disp(iValue);
intgrndRho=subs(intgrnd(iValue),rho,Rho);
for jValue=1:length(Rho)
disp(jValue);
intf=inline(vectorize(char(intgrndRho(jValue))));
intValue(iValue,jValue)=abs(quad(intf,0,1));
end;%内循环结束
plot(Rho,intValue.^2);
hold on
end %外循环结束

如果将上面程序中的quad 换为quadl ,则得到很好的图像,但是数量级不正确,请问咋回事?

sigma665 发表于 2008-10-15 10:17

回复 楼主 soberprogress 的帖子

应该差不了多少
quadl更精确些
你的积分方程是不是奇异了

soberprogress 发表于 2008-10-15 10:27

回复 沙发 sigma665 的帖子

都可以给出结果,就是数量级相差极大!
试试看,就明白了!

一个图形漂亮,但是数量级不对,一个数量级正确但是图形不对!

[ 本帖最后由 soberprogress 于 2008-10-15 10:44 编辑 ]

sigma665 发表于 2008-10-15 14:04

quad(intf,0,1,1e-15)时,会提示奇异
所以应该2个算的都不对

我倾向于相信quadl

soberprogress 发表于 2008-10-15 15:19

回复 地板 sigma665 的帖子

我用的是matlab6.0 没有提示任何错误啊!:@( 谢谢您!
是不是因为你设置了精度,才会出现这样的结果,我也倾向于相信quadl,因为它精度高。

sigma665 发表于 2008-10-15 16:32

回复 5楼 soberprogress 的帖子

我设置了精度

soberprogress 发表于 2008-10-16 07:39

回复 6楼 sigma665 的帖子

我给 quad命令设置了 精度后,很好!
页: [1]
查看完整版本: 求助matlab探讨:quad和quadl为何积分结果相差极大?