matlab三角衍射,MATLAB模拟衍射利用基尔霍夫衍射公式
利用菲涅尔—基尔霍夫衍射公式对问题进行处理,通过去不同的z 值观察近场,菲涅尔区,夫琅和费区的衍射条纹。
菲涅尔—基尔霍夫衍射公式:()()()()000exp cos ,cos ,2jk r r A E P ds j r r λ∑
+??-??=????n r n r ()()100exp E E P A jkr ==
由于单色平面波垂直照射,()()10, cos ,1E P A ==-n r ,
由于一般考虑光强的相对值,所以分析时取A=1,()cos cos ,z r θ==n r ,并对方孔进行微元,将方孔每个点在光屏上衍射的复振幅进行叠加,即计算E x ,y = z iλe ikr z r
+12r ds ,从而得到光屏上的衍射
条纹。对于方孔编程时采用循环的方式,对于光屏则利用矩阵对光屏整体的复振幅,光强等进行分析,加快运算速度。
实现代码
clear;
lambda=6.32e-7;%波长
k=2*pi/lambda;
z=550;%光屏位置
a=0.01;
b=0.01;%方孔尺寸
x1=linspace(-0.005,0.005,199);
y1=linspace(-0.005,0.005,199);%将方孔分为许多小的微元
x=linspace(-0.2,0.2,299);
y=linspace(-0.2,0.2,299);%将光屏分为许多小的微元
[X,Y]=meshgrid(x,y);%用二维矩阵描述光屏上点的位置
E=zeros(299,299);%用于存放光屏上每个点的复振幅
r=zeros(299,299);%用于存放光屏上没一点对应方孔上点的距离
for l=1:199
for j=1:199 %计算方孔上的每个点在光屏上的复振幅
r=sqrt((X-x1(l)).^2+(Y-y1(j)).^2+z*z); %当前方孔上点到光屏上各个点的距离
E=E+(-i/lambda)*(exp(i*k*r)).*(z./(2*r.*r)+1./(2*r))*z; %对不同点在光屏上的复振幅进行累加 end
end
E1=conj(E);
I=E1.*E; %求光强
% pcolor(y,x,I) %作图
% colorbar
Ix= I(1:299,200);%光屏中心水平方向光强分布
plot(x,Ix)
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)