高 峰,趙文麗,曹學成
(山東農業大學信息科學與工程學院,山東泰安 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