郝振莉,劉蘇鋒
(1. 黃河水利職業(yè)技術學院,河南 開封 475004;2. 數(shù)學建模教學與應用研究中心,河南 開封 475004)
實驗數(shù)據(jù)處理是對實驗數(shù)據(jù)進行記錄、 整理、計算和分析,去粗取精,去偽存真,得出最終結論和實驗規(guī)律的過程[1]。 它是物理實驗教學中培養(yǎng)學生實驗能力和素質的重要環(huán)節(jié)。 在物理實驗中,常用的數(shù)據(jù)處理方法有列表法、圖解法、逐差法、最小二乘法等。 這些計算方法繁瑣復雜、耗費時間較長,而且誤差較大。 為了提高學生在數(shù)據(jù)處理方面的能力,需要改革實驗教學模式,開發(fā)設計相應軟件并應用到實驗教學中。
圖形用戶界面(GUI)是由窗口、菜單、按鍵、光標、文字說明等要素構成的一個人機用戶界面。 用戶通過一定的方法如鍵盤輸入、鼠標選擇、點擊這些圖形界面上的對象或按鈕,可使計算機產生某種動作或變化, 實現(xiàn)可視化計算、 動畫或繪圖等[2]。Matlab 提供了GUI 開發(fā)平臺,其開發(fā)環(huán)境提供了一套可視化的創(chuàng)建圖形窗口的工具,方便用戶編程和再次開發(fā)。 筆者試以多普勒效應測聲速實驗數(shù)據(jù)處理為例,利用Matlab 圖形用戶界面GUI 設計出物理實驗數(shù)據(jù)處理平臺, 將抽象的理論知識具體化、可視化,以加深學生對課程內容的理解,從而激發(fā)學生學習興趣,提升課堂教學效果。
1842 年奧地利物理學家及數(shù)學家多普勒(J.C.Doppler)發(fā)現(xiàn)[1],當波 源和 觀察者之間有相對運動時,觀察者接收到的波的頻率與波源發(fā)出的頻率有所變化。 一般情況下,聲調的高低是由聲波振動頻率決定的,若振動頻率高,聽起來的聲調就高,反之,聽起來聲調就低。 這種由于波源或觀察者的相對于介質運動而使觀察者接收到的波的頻率有所變化的現(xiàn)象稱為多普勒效應(Doppler effect)。多普勒效應在諸多方面(科學研究、工程測量、交通管理、醫(yī)療診斷等)都有十分廣泛的應用。
假設波源、觀察者的運動如圖1 所示。 當聲源與接收器之間有相對運動時, 根據(jù)多普勒效應公式[3],接收器接收到的聲源的發(fā)射頻率f 可表示為式(1)。
式中:f0為聲源的發(fā)射頻率;u 為聲波的傳播速率;v2為接收器運動速率;α2為聲源與接收器連線與接收器運動方向之間的夾角;v1為聲源運動速率;α1為聲源與接收器連線與聲源運動方向之間的夾角。
圖1 多普勒效應Fig.1 Doppler Effect
實驗中,為了簡單起見,假定聲源、接收器的運動在同一直線上。 當聲源保持不動,接收器以速度v相對聲源運動時,接收器接收到的頻率可由式(2)計算。
圖2 多普勒效應測聲速的實驗裝置Fig.2 Experimental device for measuring sound velocity by Doppler Effect
根據(jù)實驗數(shù)據(jù),用Matlab 畫出散點圖。觀察fv 的函數(shù)關系,可大致看出各測量數(shù)據(jù)繪出的點基本上在一條直線上,說明實驗數(shù)據(jù)符合f=kv+f0描述的物理規(guī)律,也就直觀驗證了多普勒效應[5]。
如果實驗數(shù)據(jù)(vi,fi)(i=1,2,…,n)大致成為一條直線, 則變量f 與v 之間的關系可以近似看作線性關系。 即可建立如式(4)所示的一元線性回歸模型。
式中:β0和β1為回歸系數(shù),是未知待定常數(shù)。
由最小二乘法對式(4)估計求解,得:
構思界面布局框架,在GUI 編輯界面中布置控件,并對控件的位置進行調整對齊。本文設計的GUI界面建立了2 個坐標軸對象(分別用于顯示公式及多普勒效應示圖)、3 個動作按鈕 (分別用于數(shù)據(jù)回歸、清除數(shù)據(jù)和結束程序)、2 個面板(分別用來顯示實驗數(shù)據(jù)和計算結果)、26 個靜態(tài)文本標簽(顯示相應控件的提示)、19 個可編輯文本框(用來輸入測量數(shù)據(jù)和輸出計算結果),整體布局如圖3 所示。
圖3 GUI 界面設計布局Fig.3 GUI interface design
各個控件的標識Tag 是對控件的識別[6]。 每個控件在創(chuàng)建時,都會由開發(fā)環(huán)境自動產生一個標識,但在程序設計中,為了編輯、記憶以及維護的方便,一般將控件設置為相對應的可讀性強的標識。
編寫代碼就是完成程序中變量的賦值、輸入、輸出及繪圖等工作。 打開editor, 在相應的按鈕命令后,可以添加相應代碼。清除和退出按鈕用來恢復初始狀態(tài)和結束程序,其回調函數(shù)比較簡單,本文僅敘述了初始數(shù)據(jù)的讀取和計算程序。
2.3.1 初始數(shù)據(jù)的讀取程序
I=imread(′dplxy.jpeg′,′jpeg′); %%讀取多普勒效應示圖
axes(handles.axes1); %%打開坐標軸1
image (I); %%在坐標軸1 顯示多普勒效應示圖
axis off %%不顯示坐標軸
II=imread(′dplgs.jpg′,'jpg′); %%讀取計算公式示圖
axes(handles.axes2); %%打開坐標軸2
image(II); %%在坐標軸2 顯示公式
axis off %%不顯示坐標軸
運行后,得到如圖4 所示的GUI 運行界面。
圖4 GUI 運行界面Fig.4 GUI running interface
2.3.2 在計算按鈕添加程序
tc=str2num(get(handles.edit1,′string′)); %%讀取實驗室溫度
u0=331*sqrt(1+tc/273); %%計算理論聲速
set(handles.edit15,′string′,num2str(u0)); %%在編輯文本框15 顯示聲速的理論值
v1=str2num(get(handles.edit3,′string′)); %%讀取觀察者速度v1
v2=str2num(get(handles.edit5,′string′)); %%讀取觀察者速度v2
v3=str2num(get(handles.edit7,′string′)); %%讀取觀察者速度v3
v4=str2num (get (handles.edit9,′string′));%%讀取觀察者速度v4
v5=str2num(get(handles.edit11,′string′)); %%讀取觀察者速度v5
v=[v1;v2;v3;v4;v5]; %%合并至一個矩陣
V=[ones(5,1),v]; %%加一列1 使模型包含常數(shù)項
f1=str2num(get(handles.edit4,′string′)); %%讀取接收到的頻率f1
f2=str2num(get(handles.edit6,′string′)); %%讀取接收到的頻率f2
f3=str2num(get(handles.edit8,′string′)); %%讀取接收到的頻率f3
f4=str2num(get(handles.edit10,′string′)); %%讀取接收到的頻率f4
f5=str2num(get(handles.edit12,′string′)); %%讀取接收到的頻率f5
f=[f1;f2;f3;f4;f5]; %%合并至一個矩陣
axes(handles.axes1); %%打開坐標軸1
plot(v,f,′*′); %%畫散點圖
xlabel(′速度v′); %%坐標軸標注
ylabel(′接收頻率f′); %%坐標軸標注
hold on %%保持圖形
[b,bint,r,rint,stats]=regress (f,V); %%一元線性回歸
fhat=V*b; %%計算回歸后數(shù)值
plot(v,fhat,′p-′); %%畫效果圖
legend(′實驗數(shù)據(jù)′,′回歸直線′,′Location′,′Northwest′); %%圖例標注
hold off
axes(handles.axes2); %%打開坐標軸2
rcoplot(r,rint); %%畫殘差圖
k=b(2); %%獲取回歸系數(shù)
set(handles.edit13,′string′,num2str(k)); %%在編輯文本框13 顯示回歸系數(shù)
f0=str2num(get(handles.edit2,′string′)); %%讀取聲源發(fā)射頻率
u=f0/k; %%計算聲速
set(handles.edit14,′string′,num2str(u)); %%顯示聲速
set(handles.edit17,′string′,num2str(stats(1)));%%顯示R 的平方
set(handles.edit20,′string′,num2str(u-u0));%%計算并顯示誤差
set(handles.edit19,′string′,num2str((u-u0)/u0)); %%計算并顯示相對誤差
set(handles.edit16,′string′,strcat(′f=′,num2str(b(1)),′+′,num2str(b(2)),′*v′)); %%顯示回歸方程
輸入實驗數(shù)據(jù),單擊“計算”按鈕后,得出回歸方程的表達式,并在圖形窗口上做出回歸直線與殘差分析,如圖5 所示。 相應的計算結果數(shù)據(jù)如表1 所示。
圖5 CUI 平臺數(shù)據(jù)處理運行結果Fig.5 GUI platform data processing running results
表1 多普勒數(shù)據(jù)處理GUI 界面所得數(shù)據(jù)分析Tab.1 Data analysis of GUI interface processing by Doppler data
在此GUI 界面設計中[7],用戶可以根據(jù)示圖效果來觀察實驗數(shù)據(jù)準確性。在處理數(shù)據(jù)時,只需把實驗測量的數(shù)據(jù)輸入到相應的編輯文本框中, 單擊相應按鈕,就可實現(xiàn)對各參數(shù)的求解,并對數(shù)據(jù)進行作圖和回歸分析,操作簡單、快捷、明了,實現(xiàn)了人機交互的功能,十分方便學生使用。 另外,因Matlab 程序是開放式的,方便教師、工程人員和學生自己修改和開發(fā),可以提高開發(fā)者的創(chuàng)新能力。
借助于系統(tǒng)提供的操作功能, 通過自行設置參數(shù)和設計GUI 界面, 實現(xiàn)了數(shù)據(jù)處理的可視化,在多普勒效應綜合實驗數(shù)據(jù)處理過程中節(jié)省了大量的時間,提高了實驗效率,并且能及時檢驗實驗數(shù)據(jù)的合理性與準確性。在教學中,可鼓勵學生自行設計與開發(fā),體驗創(chuàng)新的樂趣,充分激發(fā)學生的學習興趣,提高教學效果。