高 峰,赵文丽,曹学成
(山东农业大学信息科学与工程学院,山东泰安 271018)
夫琅禾费单缝衍射是大学物理波动光学及大学物理基础实验的重要教学内容[1,2]。在理论教学中,通常是先通过菲涅尔半波带法推得亮纹中心(或暗纹中心)的公式,再讨论条纹随波长、缝宽和透镜到屏幕的距离等参数的变化。由于对公式讨论比较抽象,教学效果不够理想。在实验中,如将观察条纹随波长、缝宽和透镜到屏幕的距离这些参数的变化作为实验内容,由于使用的光学实验仪器比较精密,调节起来比较复杂、耗费时间。学生在仪器调节方面花费太多的时间,往往不能更好地理解实验原理和观察实验现象,所以通常只是把用光电探头测定激光单色光源的单缝衍射光强分布作为实验内容,没有涉及观察条纹随波长、缝宽和透镜到屏幕的距离这些参数的变化。
对于以上问题,本文应用MATLAB GUI技术开发了夫琅禾费单缝衍射仿真软件。该仿真软件可以对单缝衍射在各种不同参数条件下进行模拟,界面中采用交互式滚动条动态的展现各参数与衍射条纹之间的关系,结果直观、逼真,有利于加深学生对原理的理解和认识,便于单缝衍射的学习和研究[3-8]。
一束波长为λ的单色平行光垂直入射到宽度为a的狭缝,缝后透镜到屏幕的距离为f,如图1所示。根据惠更斯-菲涅尔原理,利用衍射矢量图分析的方法,屏幕点处的光强为
图1 夫琅禾费单缝衍射原理图Fig.1 The schematic diagram of the principle of Fraunhofer single slit diffraction
其中IP为P点处的光强,I0为中央明纹中心O处的光强,a为狭缝的宽度,λ为单色光的波长,θ为衍射角。
在布局编辑器中设置如下控件:建立2个坐标轴对象用来显示单缝衍射的衍射条纹和光强分布;建立3个静态文本标签,标注相应的控件提示;建立3个可编辑文本框,分别显示波长、狭缝宽度和透镜到屏幕的距离;建立3个滑动条用以控制波长、狭缝宽度和透镜到屏幕的距离;建立2个按钮,分别绘制单缝衍射衍射图样和结束程序。设置以上所有控件的Sting和Tag属性,便于程序的编辑、记忆和维护,如图2所示。
图2 仿真界面设计Fig.2 The design of the simulation interactive software
编写程序代码过程中的主要工作如下:
1、在程序初始化时,结合实验实际,设置光源的波长λ=390 nm,狭缝的宽度a=0.02 nm,透镜的焦距f=0.6 m。
程序代码如下:
set(handles.edit1,'String',390); % 设定波长的默认值(单位 nm)
set(handles.edit2,'String',0.2); % 设定狭缝宽度的默认值(单位 mm)
set(handles.edit3,'String',0.6); % 设定透镜到屏幕距离的默认值(单位 m)
2、设置三个滑动条的最大和最小值,并将选择好的三个滑动条中的数据显示到三个动态文本框中。波长部分程序代码如下,狭缝宽度和透镜到屏幕的距离做相同设置:
set(handles.slider1,'Min',390); % 设定波长的最小值(单位 nm)
set(handles.slider1,'Max',760); % 设定波长的最大值(单位 nm)
slider1value=get(handles.slider1,'Value');% 获得波长滑动条的数值
set(handles.edit1,'String',num2str(slider1value)); % 将波长滑动条的数值显示在动态文本框中。
3、调用pushbutton1_Callback函数,根据输入参数绘制单缝衍射和光强分布图形,并实现根据波长范围设置相应衍射图像的颜色。程序调试完成后运行的界面如图3所示。程序代码如下:
lambda=1e-9*get(handles.slider1,'Value');
a=1e-3*get(handles.slider2,'Value');
f=get(handles.slider3,'Value');
xmax=10*lambda*f/a; %设置屏幕范围
Nx=1000;
xs=linspace(-xmax,xmax,Nx); %屏幕上的点数
Np=1000;
xpoint=linspace(-a/2,a/2,Np); %将单缝分成Np个光源
for i=1:Nx %对屏幕上各点做循环
sintheta=xs(i)/f;
alpha=2*pi.*xpoint*sintheta/lambda;
sumcos=sum(cos(alpha));
sumsin=sum(sin(alpha));
B(i,:)=(sumcos^2+sumsin^2)/Np^2;
end
N=255; %确定灰度等级
Br=B/max(B)*N; %使最大光强对应于最大灰度级
axes(handles.axes1),image(x1max,xs,Br); %画衍射条纹
axis([0,0.5,-6e-3,6e-3]);
if lambda>=622e-9 c=[0 0 0;1 0 0]; %根据波长范围设置相应的衍射条纹颜色
elseif lambda> =597e-9 c=[0 0 0;1 0.38 0];
elseif lambda> =577e-9 c=[0 0 0;1 1 0];
elseif lambda> =492e-9 c=[0 0 0;0 1 0];
elseif lambda> =450e-9 c=[0 0 0;0 1 1];
elseif lambda> =435e-9 c=[0 0 0;0 0 1];
else c=[0 0 0;0.5 0 0.5];
end
colormap(c); %确定光的颜色
xlabel('单缝衍射图像');
axes(handles.axes2);
plot(B,xs,'b.-'),grid on;
axis([0,1,-6e-3,6e-3]);
xlabel('单缝衍射光强分布')
图3 仿真运行界面Fig.3 The operating interface of the simulation interactive software
滑动改变运行界面中的波长、狭缝的宽度、透镜到屏幕的距离这3个参数,图像的颜色、条纹的宽度都随之改变。图4为波长分别为(蓝光)和(红光),在缝宽和透镜到屏幕的距离不变的情况下的单缝衍射条纹,从图中可以明显的看出,当波长增大时,条纹会变宽,衍射更明显。
图4 衍射条纹随波长的变化Fig.4 The change of the diffraction pattern with wavelength
图5 表示在波长,透镜到屏幕的距离不变的情况下,改变狭缝的宽度,例如任选两个数值0.109 m和1.617 m,可以看出,狭缝的宽度越小,衍射越明显。
图5 衍射条纹随缝宽的变化Fig.5 The change of the diffraction pattern with the width of the single slit
同样,在波长,狭缝宽度不变的情况下,改变透镜到屏幕的距离,例如任选两个数值0.2 m和1.0 m,可以看到,透镜到屏幕的距离越大,衍射越明显。如图6所示。
利用MATLAB GUI对夫琅禾费单缝衍射进行仿真,编制了交互界面,在界面中改变相关参数,可以仿真出不同实验条件下的现象和结果,加深了学生对于物理原理的理解,同时也避免了学生实验过程中由于仪器调节而产生的部分图像失真问题,达到了与理论和实验的较好结合。通过动态展示,整个过程直观形象,图样细致逼真,对于培养学生学习兴趣有着十分积极的意义。
[1]王永刚,曹学成,高 峰,等.大学物理实验[M].北京:中国农业出版社,2011:141-147
[2]曹学成,姜永超,王永刚,等.大学物理[M].北京:中国农业出版社,2009:280-283
[3]钟曦旭,杨万民,唐纯青.MATLAB及其在大学物理课程中的应用[M].西安:陕西师范大学出版社,2006
[4]陈垚光,毛涛涛,王正林,等.精通MATLAB GUI设计[M].北京:电子工业出版社,2008
[5]周 忆,梁 齐.用MATLAB语言模拟光衍射现象[J].大学物理实验,2001,14(4):47-52
[6]胡孝博,刘扬正.基于MATLAB GUI的光的干涉实验仿真[J].南京工程学院学报(自然科学版),2004,24(3):65-67
[7]吴 迪,张 星.利用MATLAB的GUI制作交互式演示实验软件[J].大学物理实验,2006,19(2):74-75
[8]谢嘉宁,赵建林,陈伟成,等.夫琅禾费衍射的计算机仿真[J].大学物理,2006,19(2):51-54