黃 河,譚 榮
(武漢工程大學(xué)數(shù)理學(xué)院,湖北武漢 430205)
駐波是大學(xué)物理波動學(xué)基礎(chǔ)教學(xué)中的重點和難點內(nèi)容,學(xué)生一般不容易直觀形象地理解波的疊加和駐波的形成條件[1-2].本文由兩列相向傳播的平面簡諧波的疊加方程出發(fā),借助于非常流行的現(xiàn)代編程語言Matlab來進行圖形化用戶界面(Graphical User Interface,簡稱 GUI)[3-5]設(shè)計,利用該軟件中控件和代碼實現(xiàn)對駐波實時動態(tài)的展示,并且可以方便地調(diào)節(jié)物理參數(shù).最后將平臺程序封裝打包成獨立運行的exe程序,可以脫離 Matlab 環(huán)境獨立運行,方便在大學(xué)物理課堂教學(xué)中對駐波進行實時和動態(tài)的演示.除此之外,在大學(xué)物理實際課堂教學(xué)中引導(dǎo)學(xué)生自行編寫Matlab程序可以極大地調(diào)動學(xué)生的學(xué)習(xí)熱情[6].學(xué)生在駐波學(xué)習(xí)中通過自行編寫Matlab程序,設(shè)計GUI界面,結(jié)合這種既有理論、又有編程實踐的學(xué)習(xí)方式,將大幅度提高對駐波理論的物理本質(zhì)和現(xiàn)象的理解.
兩列相向傳播的平面簡諧波的數(shù)學(xué)描述形式如下:
這里假設(shè)平面簡諧波y2的波幅為單位波幅1,坐標(biāo)原點處t=0時刻的初位相為φ2.平面簡諧波y1相對y2的波幅比為A,坐標(biāo)原點處t=0時刻的初位相為φ1.第一列簡諧波沿x軸正方向傳播,第二列簡諧波沿x軸負(fù)方向傳播,兩列波的疊加方程為:
進入MATLAB主界面以后,先用命令“guide”建立空白的GUI,如圖1所示.通過對GUI界面添加控件和代碼的方式,將駐波方程和相關(guān)的物理參數(shù)輸入到代碼里,最終實現(xiàn)可視化GUI控制仿真圖形.GUI仿真整體布局如圖2所示.
圖1 空白GUIFig.1 Blank GUI圖2 GUI主界面設(shè)計效果圖Fig.2 Design effect of GUI main interface
設(shè)計的主界面中,含有8個用來標(biāo)明仿真程序中所使用參量的靜態(tài)文本框(Static Text).這些參量分別是時間t、兩列波的波幅比A、圓頻率ω1、圓頻率ω2、波長λ1、波長λ2、初相φ1和初相φ2.它們的參數(shù)可以分別由滾動條(Slider)和編輯框(Edit Text)來控制, 其中滾動條(Slider)調(diào)節(jié)的參數(shù)可以顯示在編輯框(Edit Text)內(nèi),編輯框(Edit Text)輸入?yún)?shù)時,滾動條(Slider)也會滾動到相應(yīng)的值.坐標(biāo)軸(Axes)用于顯示產(chǎn)生的波形.
首先右擊滾動條(Slider)和編輯框(Edit Text),從彈出的菜單中選擇“屬性檢查器”:設(shè)置“max”、“min”的值,控制參數(shù)的范圍.本文中振幅比A設(shè)置為1~5之間可調(diào),圓頻率ω1和ω2均設(shè)置為1~10之間可調(diào),波長λ1和λ2均設(shè)置為1~16之間可調(diào),初相φ1和φ2均設(shè)置為0~2π之間可調(diào);設(shè)置“Tag”,編輯控件的名字,方便調(diào)用.接著通過編輯器 “轉(zhuǎn)至”圖標(biāo)彈出的菜單可以看到各個對象的回調(diào)函數(shù)、某些對象的創(chuàng)建函數(shù)和打開函數(shù)等.通過選擇相應(yīng)選項就可以對相應(yīng)函數(shù)進行程序編輯.
下面以時間t 的滾動條(Slider)為例,介紹控件功能實現(xiàn)的過程.在時間t的滾動條(Slider)的”function t_slider1_Callback”回調(diào)函數(shù)下輸入以下代碼:
global t;global a;global c1;
global c2;global l1;global l2;
global b1;global b2;global x;
x=0:0.01:8;
input=get(hObject,'value');% 獲取當(dāng)前滑條1的值
t=input;
a=get(handles.A_slider2,'value'); %通過滑條2獲取波幅比A
c1=get(handles.w1_slider3,'value');%通過滑條3獲取圓頻率ω1
c2=get(handles.w2_slider4,'value'); %通過滑條4獲取圓頻率ω2
l1=get(handles.lamda1_slider5,'value'); %通過滑條5獲取波長λ1
l2=get(handles.lamda2_slider6,'value'); %通過滑條6獲取波長λ2
b1=get(handles.psi1_slider7,'value');% 通過滑條7獲取初相φ1
b2=get(handles.psi2_slider8,'value'); % 通過滑條8獲取初相φ2
y=a.*cos(c1*t-2*pi*x/l1+b1)+cos(c2*t+2*pi*x/l2+b2);
y1=a.*cos(c1*t-2*pi*x/l1+b1);
y2=cos(c2*t+2*pi*x/l2+b2);
cla;
plot(x,y,'r','LineWidth',2);
hold on
plot(x,y1,'k-.','LineWidth',2);
hold on
plot(x,y2,'k--','LineWidth',2);
hold on
ylim([-3 3]);
set(handles.t_edit1,'string',num2str(t));% 將時間t的滑條值賦予它的編輯框
guidata(hObject,handles);
值得注意的是,我們需要用到get和set這一對重要的函數(shù),來實現(xiàn)對參量的獲取和設(shè)置等相關(guān)功能.剩下其他參數(shù)的滑條和編輯框的功能設(shè)置則可以采用Callback 等回調(diào)函數(shù)來實現(xiàn).
通過調(diào)整兩列波的波幅比、圓頻率、波長、初相,運行各命令,可以直觀地得到各個參量的改變對于兩列分波及合成波的波動曲線的影響,如圖3所示得到3條波動曲線:點劃線代表沿x正向傳播的波動曲線,虛線代表沿x負(fù)向傳播的波動曲線,實線代表合成波曲線.最上面時間t的滑條調(diào)節(jié)按鈕可以控制波隨時間的動畫.只有將兩列分波的圓頻率、波長、波幅均設(shè)為一致,我們才得到了駐波.直觀形象地驗證駐波形成條件中關(guān)于波幅比為1,波長與頻率這兩個參數(shù)對駐波形成的影響,如圖4所示.從動態(tài)演示的圖中可以進一步加深學(xué)生對駐波形成具體條件的理解.駐波是兩列波相遇時的一種特殊形式的干涉現(xiàn)象.這兩列相干波的振幅、振動方向、頻率和傳播速度都相同,除此之外,兩列波傳播方向沿一條直線,并且方向相反.任選坐標(biāo)原點和計時起點時,駐波方程的一般形式如下:
圖3 兩簡諧波和合成波的波動曲線Fig.3 Wave curves of two harmonic and synthetic waves圖4 兩簡諧波和合成駐波曲線Fig.4 Curves of two simple harmonic and synthetic standing wave
上式反映,在一般情況下兩列波的初相會對駐波產(chǎn)生影響.圖4中兩列波的初相分別為φ1=0、φ2=0,則坐標(biāo)原點x=0處合成駐波為波腹,x=2λ即左端也為波腹.圖5中兩列波的初相分別為φ1=π、φ2=0,則坐標(biāo)原點x=0處合成駐波為波節(jié),x=2λ即左端也為波節(jié).我們可以任意調(diào)節(jié)兩列波的初相,可以生動形象演示出兩列波的相位差決定了合成駐波的波腹和波節(jié)的位置.最后當(dāng)我們選取兩列波初始相位差為π,調(diào)節(jié)波長,可以直觀地演示駐波在弦上的形成,這一過程中發(fā)現(xiàn)若弦兩端為固定端即波節(jié)時,弦長應(yīng)為半波長整數(shù)倍.圖6顯示了弦長為半波長的情況.
圖5 兩簡諧波和合成駐波曲線Fig.5 Curves of two simple harmonic and synthetic standing wave圖6 弦長為半波長的波形Fig.6 Waveform with half wavelength
在本科生的課堂教學(xué)當(dāng)中,當(dāng)對波動中波的疊加和駐波內(nèi)容進行講授時,我們在課堂中引入該動畫演示的思路,要求學(xué)生用計算機自行編寫Matlab程序來解決波動曲線隨時間變化的展示問題.在課堂當(dāng)中以及計算機實際編寫、調(diào)試程序、GUI界面設(shè)計時,給予學(xué)生合適的建議,并且讓學(xué)生調(diào)整實際的代碼參數(shù),以達到最佳的展示效果.就實際編程情況來看,幾乎所有的學(xué)生都能夠編寫出完整的正常運行的Matlab代碼,但能夠完美的展示物理結(jié)果并且能夠方便地調(diào)節(jié)具體物理條件的學(xué)生則鳳毛麟角,大部分學(xué)生需要老師進行一些單獨的指導(dǎo)和啟發(fā).最重要的是,通過這種既學(xué)理論、又學(xué)編程實踐的教學(xué)和學(xué)習(xí)方式,學(xué)生的熱情程度相當(dāng)?shù)母撸夷軌虼蠓忍岣邔W(xué)生對波的疊加和駐波理論的物理本質(zhì)和現(xiàn)象的理解,彌補了以往課堂教學(xué)僅作枯燥的理論教學(xué)、只給出理論公式和結(jié)論的缺點.通過現(xiàn)代化的計算機技術(shù)融入課堂教學(xué),讓學(xué)生推得出公式,想得出結(jié)果,看得見現(xiàn)象,真正地愛上物理課程學(xué)習(xí).
從課堂實際教學(xué)效果和最終考察效果來看,學(xué)生在課堂上的學(xué)習(xí)興趣被激發(fā)出來了,而實際的編程鍛煉則讓學(xué)生把理論學(xué)習(xí)和仿真實踐能力結(jié)合了起來,對波動的疊加和駐波的課堂內(nèi)容、理論知識點的理解也更加的深刻;相比于傳統(tǒng)的純粹的理論知識考核,我們把Matlab仿真實踐結(jié)果也作為課堂學(xué)習(xí)效果考核的一部分,讓理論和仿真實踐相結(jié)合,使大學(xué)物理的課堂教學(xué)真正走向現(xiàn)代化和直觀可視化.
本文結(jié)合駐波理論,利用 Matlab方便的 GUI界面設(shè)計及編程,實現(xiàn)了駐波現(xiàn)象的可視化的實時動態(tài)演示.實際課堂教學(xué)中不僅讓學(xué)生觀察操作控件對參數(shù)的改變,以及不同條件下的物理現(xiàn)象,而且引導(dǎo)學(xué)生自行編寫Matlab程序,設(shè)計GUI界面,極大地調(diào)動學(xué)生的學(xué)習(xí)熱情,從而加深學(xué)生對駐波理論的理解.GUI程序編寫完畢后,運用“mcc-m zhubo”將M文件“zhubo.m”封裝打包成獨立運行的exe程序,使之方便在脫離Matlab的環(huán)境下運行.通過引入Matlab進行可視化教學(xué),極大地激發(fā)學(xué)生的學(xué)習(xí)興趣,調(diào)動學(xué)生的學(xué)習(xí)積極性,提升了大學(xué)物理的課堂教學(xué)效果.