基于MATLAB的多光学现象仿真可视化设计
2016-09-08徐春芳王浩然王建岗丁益民
徐春芳,王浩然,王建岗,丁益民
(湖北大学,湖北 武汉 430062)
基于MATLAB的多光学现象仿真可视化设计
徐春芳,王浩然,王建岗,丁益民
(湖北大学,湖北 武汉430062)
利用MATLAB自带GUI,对光学单色光杨氏双缝干涉、牛顿环、夫琅禾费衍射以及迈克尔逊干涉仪等光学实验进行可视化模拟。
光学实验;MATLAB;GUI;可视化
光现象是我们生活中的基本现象,也是大学物理的基本内容之一,然而,受实验条件的限制,光现象的相关实验往往难以在课堂上演示。为此,近年许多教师对光学实验的Matlab仿真进行了研究。余建立等对光的干涉现象进行了研究[1];夏漫等对光的夫琅禾费单缝衍射光强曲线和条纹分布进行了模拟研究[2];邓磊对光的多缝衍射进行了仿真[3];而钟可君则用Matlab的GUI实现光的衍射的可视化[4]。本文根据各种光学现象的基本特征,利用MATLAB的GUIDE功能,结合编程实现多光学实验现象在同一平台的可视化和可调化。
1 光学仿真平台的GUI界面设计
MATLAB中Guide是图形用户接口开发环境的简称,它提供了一系列工具用于建立GUI对象[6]。相对于全编程的方法实现可视化,GUIDE所提供的工具大大简化了设计和建立GUI的过程。在建立GUI后,可以对GUI图形界面布局和编程,通过GUI图形界面来控制实验现象的可视化。
1.1GUI布局
在建立一个新的GUI后,要对GUI布局。依据需要在GUI布局区添加适当的组件。在添加控件以前我们要对所需要改变的参量要有具体的了解,这样有利于我们对GUI做合理的布局。下图是GUI布局图。
图1 GUI布局图
本文将界面分为三个部分:显示区,控制区和提示区。实验的可视化在显示区中呈现。而通过控制区来调整各光学参数。例如光栅常数,屏到缝的距离,光的波长等参数可以在这个区域中进行调整。还可以在这个区域中选择要模拟的实验。本界面包含了单色光/白光的杨氏双缝干涉、牛顿环、夫琅禾费单缝和圆孔衍射、迈克尔逊干涉仪多类实验的模拟。提示区用来提示实验操作中的注意事项以及可能存在的问题。
1.2设置组件属性
在基本布局完成后,我们需要对各组件属性进行设计。在设置完组件基础属性后,还必须对各个组件的callback函数进行编写。
具体方法是,在组件对象上右击鼠标,选择view Callback/Callback,在该Callback回调函数中编写代码:
Function slider1_Callback(hObject,eventdata,handles)
val1=num2str(get(handles.slider1,'value'));
set(handles.edit1,'string',val1);
上述代码是单色光波长所对应的slider的回调函数。此回调函数用来获取slider的当前值。
2 光学实验原理
光学实验原理是编程的基础。可视化程序的编写是基于对光学现象原理的熟练掌握基础进行的。由于篇幅的限制,以夫琅禾费圆孔衍射[7]实验为例:
夫琅禾费圆孔衍射中间亮纹亮度最大,称为爱里斑,直径为d,观察平面上任意一点的复振幅为:
(1)
由贝塞尔函数可得:
(2)
因此,光强为:
(3)
爱里斑的半径为:
(4)
在了解清楚光学原理后进行编程。
3 光学实验的仿真设计
程序的编写必须是在对应的代码下进行。本文中名称为popupmenu2的组件对应着白光夫琅禾费圆孔衍射的函数回调与执行,因此我们必须在它的Callback函数语句下编写白光夫琅禾费圆孔衍射的回调函数。
具体程序如下:
Function popupmenu2_Callback(hObject,eventdata,handles)
val=get(hObject,'Value');
str=get(hObject,'String');
wlr=700e-6;
wlg=546.1e-6;
wlb=435.8e-6;
a=str2double(get(handles.edit1,'string'));
z=str2double(get(handles.edit2,'string'));
ym=str2double(get(handles.edit3,'string'));
R=str2double(get(handles.edit4,'string'));
d=str2double(get(handles.edit5,'string'))*10^-5;
aa=str2double(get(handles.edit6,'string'));
f=str2double(get(handles.edit7,'string'));
aaa=str2double(get(handles.edit8,'string'));
lambda=str2double(get(handles.edit10,'string'))
*10^-6;
switch str{val};
case '白光圆孔夫琅禾费衍射’
4 仿真模拟结果
通过编写程序代码,可以实现对各种光学现象在同一界面上的可视化和可调性。如下图2所示为单色光夫琅禾费圆孔衍射图样。
图2 夫琅禾费圆孔衍射图样
还可以通过对界面上各参数的调节来实现同一实验现象不同条件下的比较:
图3,图4是当光的波长保持为737.4 nm,二分之一屏幕宽度为0.779 22 mm不变,只改变缝宽时夫琅禾费单缝衍射的比较:
图3 缝宽为0.031 1 mm
图4 缝宽为0.0103 9 mm
从图像上我们可以直观的看出,当缝宽变小以后,衍射现象变得更明显,这是与事实相符的。
同样的方法可以得到其它光学现象的仿真图。只需要在界面选择区域选择我们要做的模拟实验以及改变光学参数就可以得到不同的光学图像,图5~图7为调整参数后不同光学实验的模拟图样[8]。
图5 杨氏双缝干涉图样 图6 单色光牛顿环
图7 迈克尔逊干涉仪
5 结 语
综上所述,在物理实验中我们觉得高不可攀,可望而不可及的一些抽象现象,都可以通过matlab自带的GUI组件来实现。而这种实现抽象现象可视化的方法,相比于用全编程的方法实现可视化来说难度大大降低。并且,在此界面下我们还实现了对各参数的可调性,这也有利于我们对同一物理现象的深刻认识和对不同物理现象的比较。因此这种简明直观的动态展示方法,为光学的理论和实践教学提供了方便,也为我们的物理课程教学提供了很好的方法。
[1]余建立,等. 基于GUI的光的干涉实验模拟研究[J].宜春学院学报:37-40.
[2]夏漫,等.基于Matlab的光的单缝衍射实验模拟研究[J].大学物理实验,2015(4):90-92.
[3]邓磊,等.多缝的夫琅禾费衍射仿真[J]湖南文理学院学报,2014(4):59-64.
[4]钟可君,张海林.基于MatlabGUI设计的光学实验仿真[J].实验室研究与探索,2010(10):52-53.
[5]刘正君.Matlab科学计算与可视化仿真[M].北京:电子工业出版社,2009:1-65.
[6]罗华飞.Matlab设计学习手册[M].北京:北京航空航天大学出版社,2009:345-423.
[7]章志鸣,沈元华,陈惠芬.光学[M].北京:高等教育出版社,第二版:132-164.
[8]周忆,等.用MATZAB语言模拟光衍射实验[J].大学物理实验,2001(4):47-48.
Optical Experiments Simulations and Visualizations Based on MATLAB Visual Control Interface
XU Chun-fang,WANG Hao-ran,WANG Jian-gang,DING Yi-min
(Hubei University,Hubei Wuhan 430062)
Taking advantage of MATLAB's own component-GUI,implement the simulations and visualizations of the optical experiments,such as Monochromatic light,young's double-slit,Newton's rings,Fraunhofer diffraction and Michelson interference.
optical experiments;MATLAB;GUI;visualizations
2016-03-15
理论物理国家重点实验室开放课题(Y3KF321CJ1);湖北大学《大学物理实验精品资源共享课》建设项目(C201407)
1007-2934(2016)04-0086-03
O 4-39
A
10.14139/j.cnki.cn22-1228.2016.004.027