劉志成,張君霞,黃 蕊
(華北電力大學科技學院,河北保定 071003)
Matlab是Matrix Laboratory(矩陣實驗室)的簡稱[1],是美國Math Works公司出品的商業(yè)數(shù)學軟件,不僅具有數(shù)據(jù)分析、科學計算和圖像處理等功能,還具有創(chuàng)建交互式圖形用戶界面等功能,在最新版本中也加入了對C、FORTRAN、C++、Java的支持,可以直接調(diào)用。其基本數(shù)據(jù)單元是矩陣,指令表達式與數(shù)學中常用的形式十分相似。語法簡單方便,數(shù)值計算高效,圖形功能完備,所以Matlab在物理現(xiàn)象演示、作圖、數(shù)據(jù)處理優(yōu)化和模擬仿真方面應用非常廣泛。
本文基于Matlab GUI設計,以光電效應實驗為例,建立了數(shù)據(jù)處理界面;對光柵衍射結果進行了可視化;對任意形狀狹縫的衍射模擬仿真。
Matlab中設計GUI程序的界面有兩種方式.一種是全命令行的M文件編程,就是通過低級句柄圖形對象創(chuàng)建函數(shù),設置GUI界面下各個交互組件的屬性。另一種是使用Matlab圖形用戶界面開發(fā)環(huán)境(簡稱GUIDE)。GUIDE是一個界面設計工具集。Matlab將所有GUI支持的用戶控件集中起來,同時提供界面外觀、屬性和行為回調(diào)函數(shù)(Callback)的設置方法。
在光電效應實驗中,截止電壓是入射光頻率的線性函數(shù),eU0=hν-A.直線斜率k=h/e,只要用實驗方法得出不同頻率對應的截止電壓,求出直線斜率,就可以算出普朗克常數(shù)h。在Matlab GUI編輯界面編排相應控件,為“計算”控件的回調(diào)函數(shù)添加如下代碼:
V(1)=str2num(get(handles.T61,'String'));V(2)=str2num(get(handles.T62,'String'));
V(3)=str2num(get(handles.T63,'String'));V(4)=str2num(get(handles.T64,'String'));
V(5)=str2num(get(handles.T65,'String'));
X=[8.214 7.408 6.879 5.490 5.196];
P=polyfit(X,V,1);axes(handles.axes1);
XX=4:0.1:8.5;plot(X,V,'+ ',XX,polyval(P,XX),'R');
legend('實驗數(shù)據(jù)','擬合直線','Location','North');
axis([4 8.5 0 2]);
K=P(1)*10;set(handles.T71,'String',num2str(K));
e=str2num(get(handles.e,'String'));
h=e*K;set(handles.T72,'String',num2str(h));
h0=str2num(get(handles.h0,'String'));
E=abs((h-h0))/h0*100;set(handles.T73,'String',num2str(E));
P1=polyfit(V,X,1);JZ=polyval(P1,0);
set(handles.T74,'String',num2str(JZ));
代碼中注意與控件名字(Tag)對應 .輸入原 始數(shù)據(jù)后,運行效果見圖1:
圖1 光電效應數(shù)據(jù)處理界面
設光柵有N條縫,透光縫寬為a,光柵常數(shù)為d,入射波長為λ。根據(jù)衍射積分計算,接受屏上光強分布為。其中。式中第一項來源于單縫衍射,是整個衍射圖樣的輪廓,叫單縫衍射因子。第二項叫做縫間干涉因子[2]。在Matlab GUI編輯界面編排相應控件,根據(jù)光柵衍射光強分布公式,為“運行”控件的回調(diào)函數(shù)添加如下代碼:
n=str2num(get(handles.N,'String '));d=str2num(get(handles.edit4,'String'));a=str2num(get(handles.edit5,'String'));
m=5;t=-m:0.001:m;t(t==0)=eps;u=pi*a*sin(t*pi/180);v=d*u;i1=(sin(u)./u).^2;i2=(sin(n*v)./(n*sin(v))).^2;
axes(handles.axes1);
plot(t,i1);axis([-m,m,0,1.2]);grid on
axes(handles.axes3);
plot(t,i2);axis([-m,m,0,1.2]);grid on
axes(handles.axes2);
plot(t,i1.*i2,t,i1,'--');axis([-m m 0 1.2]);grid on
axes(handles.axes4);
c=linspace(0,1,64)';image(i1.*i2*1000)
ColorMap([c,c*0,c*0])
axis off
運行效果見圖2:
圖2 光柵衍射界面
在界面上可以任意改變縫數(shù),縫間距與縫寬比值和縫寬與波長比值三個參數(shù).我們選擇N=1,5,20,35。光柵光譜如圖 3 所示.N=1 時就是單縫衍射圖案。當N很大時,次級大很小,主極大又細又亮。
圖3 N=1,5,20,35 時 光柵光譜
當狹縫形狀不規(guī)則時,很難再用衍射積分計算出接受屏上的光強分布。在傅里葉光學中我們知道夫瑯禾費衍射場的強度分布就等于屏函數(shù)的功率譜。因此我們可以直接將光屏進行傅里葉變換,再處理得到衍射圖樣。Matlab實現(xiàn)過程為[3]:先確定光屏圖樣,可以由矩陣生成,也可以用畫圖軟件生成,然后用imread函數(shù)讀入,再利用fft2函數(shù)進行二位離散傅里葉變化,得到圖像的頻譜,然后利用 abs和 fftshift函數(shù)進行取模和頻譜位移[4-5],最后用imshow函數(shù)顯示衍射圖像。圖4分別展示了三種狹縫的衍射圖像和光強分布。
圖4 不同形狀狹縫衍射效果
通過上述討論,可見Matlab在大學物理作用很多?;贛atlab GUI設計的數(shù)據(jù)處理界面和光柵衍射界面,將代碼隱藏在后臺/即使不懂Matlab的人也可以直接使用。結果非常直觀,方便修改原始數(shù)據(jù)和條件。對任意形狀狹縫的衍射模擬仿真,更能夠完成實際光學實驗難以實現(xiàn)的操作。
[1]蔡旭輝,劉衛(wèi)國,蔡立燕.MATLAB基礎與應用教程[M].北京:人民郵電出版社,2009,1-18.
[2]姚啟鈞.光學教程[M].北京:高等教育出版社,2004,125-135.
[3]徐慧梁,何振江,楊冠琳,等.基于MATLAB的傅里葉光學實驗的計算機模擬[J].物理教育,2004:298-301.
[4]劉濤然.利用光柵測半導體激光波長[J].大學物理實驗,2013(6):12-14.
[5]王元章,王傳坤,張曼.測量光波波長的實驗研究[J].大學物理實驗,2014(3):50-52.