作业帮 > 综合 > 作业

基于matlab的圆孔衍射模拟程序

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/10 19:44:35
基于matlab的圆孔衍射模拟程序
就是要模拟出I和S的图,I的表达式如图
程序应该没有语法错误,但是运行以后没有反应,图也没有跳出来.
不知道是什么原因.
lmda=500e-9;
a=1e-3;
f=1;
w=0.42;
w0=0.3;
xm=2000*lmda*f;
[x,y]=meshgrid(-xm:1e-6:xm);
s=2*pi*a*sqrt(x.^2+y.^2)./(lmda*f);
syms n;
I=(symsum(((a.^2)./(w*w0)).^(n-1).*(2.^n)./(s.^n).*besselj(n,s).*exp(-(a.^2)./(w.^2)),1,inf)).^2;
figure
plot(-s,I,s,I)
xlabel('s 单位:m');
ylabel('光强I 单位:cd');
符号计算非常慢,你要耐心等待,命令窗种的输入提示符>>没出现,程序就是还在运行,要等等还有数值计算一般需要计算到一定级次截止,后面的不再计算了,一般计算到6-10级就可以了,级次再增加,差别也不大还有就是你如果不关心数值结果,值想画个图出来的画,把步长也可以弄大些.我看你程序有inf,我运行了下,运行到一定时间提示out of memory,溢出了还是不要用符号了,直接数值吧,快lmda=500e-9;a=1e-3;f=1;w=0.42;w0=0.3;xm=2000*lmda*f;[x,y]=meshgrid(-xm:1e-6:xm);s=2*pi*a*sqrt(x.^2+y.^2)./(lmda*f);I=0;for n=1:10Itemp=(     ((a.^2)./(w*w0)).^(n-1).*(2.^n)./(s.^n).*besselj(n,s).*exp(-(a.^2)./(w.^2))    ).^2;I=I+Itemp;endfigureplot(-s,I,s,I)xlabel('s  单位:m');ylabel('光强I  单位:cd'); 这样就出结果了