王艷萍,楊建宋
(杭州師范大學(xué)理學(xué)院,浙江杭州 310036)
VC++6.0與MATLAB聯(lián)合編程實(shí)現(xiàn)物理實(shí)驗(yàn)數(shù)據(jù)智能處理
王艷萍,楊建宋*
(杭州師范大學(xué)理學(xué)院,浙江杭州 310036)
采用VC++6.0和MATLAB混合編程的方法,實(shí)現(xiàn)了物理實(shí)驗(yàn)數(shù)據(jù)處理系統(tǒng)的開(kāi)發(fā).實(shí)踐表明二者聯(lián)合編譯能大大提高軟件開(kāi)發(fā)效率,縮短軟件維護(hù)周期.
VC++6.0;MATLAB;混合編程;實(shí)驗(yàn)數(shù)據(jù)處理
MATLAB是由Mathworks公司推出的用于科學(xué)計(jì)算的軟件,具有強(qiáng)大的矩陣計(jì)算和數(shù)據(jù)可視化處理能力,可以進(jìn)行數(shù)值分析、信號(hào)處理、符號(hào)運(yùn)算等多個(gè)領(lǐng)域的數(shù)學(xué)計(jì)算,也可以實(shí)現(xiàn)對(duì)圖形圖像的處理[1].不僅如此,MATLAB還具有與其他高級(jí)語(yǔ)言相似的編程特性[2].
VC++6.0是Microsoft公司開(kāi)發(fā)的一種功能強(qiáng)大、行之有效的可視化編程工具,其友好的可視化界面方便用戶開(kāi)發(fā)Windows程序[3].但是,應(yīng)用C++編寫數(shù)據(jù)處理模塊遠(yuǎn)沒(méi)有MATLAB方便和簡(jiǎn)捷.MATLAB在數(shù)值分析和處理上是一流的,特別是在矩陣運(yùn)算方面,其中許多復(fù)雜的數(shù)值計(jì)算在VC++中很難實(shí)現(xiàn)[4].當(dāng)然,MATLAB也有它的不足.由于MATLAB程序是解釋執(zhí)行的,對(duì)程序只能解釋一句執(zhí)行一句,因此運(yùn)行速度比較慢,在做循環(huán)運(yùn)算、處理諸如遙感圖像等信息量很大的圖像時(shí),問(wèn)題就十分突出[4-5],而運(yùn)行的高效率恰恰是C++程序的優(yōu)勢(shì).另外MATLAB保存的M文件是源程序代碼,安全保密性差,用戶界面設(shè)計(jì)不如其他一些軟件方便,對(duì)計(jì)算機(jī)底層的數(shù)據(jù)訪問(wèn)也不夠靈活[6].通過(guò)VC++6.0調(diào)用MATLAB,實(shí)現(xiàn)VC++6.0與MATLAB混合編程,就可以很好地克服它們的弱點(diǎn),實(shí)現(xiàn)速度和數(shù)據(jù)處理的雙贏.VC++6.0負(fù)責(zé)開(kāi)發(fā)可視化圖形操作界面,并進(jìn)行函數(shù)調(diào)用,MATLAB負(fù)責(zé)實(shí)現(xiàn)一些復(fù)雜的計(jì)算過(guò)程,二者聯(lián)合編譯生成軟件系統(tǒng).
實(shí)現(xiàn)在VC++6.0中調(diào)用MATLAB進(jìn)行混合編程,有以下幾種方法:通過(guò)COM組件調(diào)用MATLAB[4],采用MATLAB自帶編譯器mcc[7-8],用Matcom將MATLAB的M文件編譯成C語(yǔ)言文件并嵌入VC[4],使用MATLABENGINE法[8-11]等.
MATLABENGINE方法實(shí)現(xiàn)起來(lái)較為簡(jiǎn)單,不要求連接整個(gè)MATLAB只需嵌入必要的MATLABENGINE庫(kù)便可大大節(jié)省系統(tǒng)資源.文中系統(tǒng)即采用這種調(diào)用方法.
該系統(tǒng)在Windows95/98/2000等平臺(tái)上,使用Visual C++6.0面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言設(shè)計(jì).其主要功能體現(xiàn)在2個(gè)方面:
1)實(shí)現(xiàn)物理實(shí)驗(yàn)數(shù)據(jù)的手動(dòng)輸入,異常數(shù)據(jù)的判斷和剔除,以不確定度傳遞公式進(jìn)行不確定度的計(jì)算,按照誤差理論和“四舍六入五成雙”的數(shù)字修約法則進(jìn)行數(shù)據(jù)的處理,實(shí)驗(yàn)結(jié)果的安全存儲(chǔ)、自動(dòng)評(píng)價(jià)與正常輸出;
2)物理實(shí)驗(yàn)教師能瀏覽學(xué)生實(shí)驗(yàn)的原始數(shù)據(jù),獲取實(shí)驗(yàn)數(shù)據(jù)處理的結(jié)果.
系統(tǒng)采用基于對(duì)話框的應(yīng)用程序框架,由一個(gè)主對(duì)話框和多個(gè)模態(tài)對(duì)話框組成,可分為3個(gè)模塊(即子系統(tǒng)):主控子系統(tǒng)、學(xué)生實(shí)驗(yàn)數(shù)據(jù)處理子系統(tǒng)、教師實(shí)驗(yàn)數(shù)據(jù)查詢子系統(tǒng).系統(tǒng)采用ADO訪問(wèn)數(shù)據(jù)庫(kù)技術(shù).項(xiàng)目名稱為PhyExperimentSys,打包后生成的安裝程序名為PhyExperimentSys.exe.用戶只需雙擊運(yùn)行該程序即可使用物理實(shí)驗(yàn)數(shù)據(jù)處理系統(tǒng).首先出現(xiàn)的界面如圖1所示.點(diǎn)擊“學(xué)生實(shí)驗(yàn)數(shù)據(jù)處理”按鈕,將開(kāi)始調(diào)用學(xué)生數(shù)據(jù)處理子系統(tǒng),進(jìn)入相應(yīng)界面;點(diǎn)擊“教師實(shí)驗(yàn)數(shù)據(jù)查詢”,將開(kāi)始調(diào)用教師實(shí)驗(yàn)數(shù)據(jù)查詢子系統(tǒng),進(jìn)入相應(yīng)界面;點(diǎn)擊“退出系統(tǒng)”,將退出實(shí)驗(yàn)數(shù)據(jù)處理系統(tǒng).
圖1 系統(tǒng)啟動(dòng)界面Fig.1 The startup interface of the system
實(shí)驗(yàn)數(shù)據(jù)處理系統(tǒng)中的10個(gè)實(shí)驗(yàn)為大學(xué)物理實(shí)驗(yàn),分為力學(xué)、電學(xué)、光學(xué)和熱學(xué)4個(gè)部分[12].該文以力學(xué)部分的“物質(zhì)密度測(cè)量實(shí)驗(yàn)”為例,說(shuō)明實(shí)驗(yàn)數(shù)據(jù)處理模塊的實(shí)現(xiàn).
學(xué)生單擊力學(xué)中的“物質(zhì)密度測(cè)量”實(shí)驗(yàn)后便進(jìn)入該實(shí)驗(yàn)的數(shù)據(jù)處理子模塊.實(shí)驗(yàn)數(shù)據(jù)輸入界面如圖2所示.學(xué)生正確無(wú)誤輸入小鋼球質(zhì)量的2次測(cè)量數(shù)據(jù)和直徑的5次測(cè)量數(shù)據(jù)后,單擊“計(jì)算”命令按鈕,由系統(tǒng)自動(dòng)計(jì)算小鋼球直徑的平均值、直徑的標(biāo)準(zhǔn)不確定度、小鋼球質(zhì)量的平均值、質(zhì)量的標(biāo)準(zhǔn)不確定度、小鋼球的密度和密度的標(biāo)準(zhǔn)不確定度.數(shù)據(jù)處理結(jié)果如圖3所示.不確定度的計(jì)算特別是間接不確定度的計(jì)算在VC++中不易實(shí)現(xiàn),但復(fù)雜的數(shù)值計(jì)算卻是MATLAB的強(qiáng)項(xiàng),此例中即是調(diào)用MATLAB來(lái)完成計(jì)算功能的.
以下是程序計(jì)算部分的一部分MATLAB函數(shù)源碼(程序里出現(xiàn)的以符號(hào)“%”開(kāi)始的文字說(shuō)明皆為程序的注釋):
在“物質(zhì)密度測(cè)量”實(shí)驗(yàn)中需要測(cè)量小鋼球直徑5次、小鋼球質(zhì)量2次,共7個(gè)實(shí)驗(yàn)輸入數(shù)據(jù);計(jì)算并顯示小鋼球直徑的平均值、直徑的標(biāo)準(zhǔn)不確定度、小鋼球質(zhì)量的平均值、質(zhì)量的標(biāo)準(zhǔn)不確定度、小鋼球的密度和密度的標(biāo)準(zhǔn)不確定度,共6個(gè)實(shí)驗(yàn)輸出數(shù)據(jù).由此確定程序中需要7個(gè)輸入變量,6個(gè)輸出變量.程序設(shè)計(jì)思路如下:首先打開(kāi)MATLAB引擎,創(chuàng)建6個(gè)mxArray型數(shù)據(jù)作為輸出變量,創(chuàng)建7個(gè)mxArray型數(shù)據(jù)作為輸入變量,并把7個(gè)輸入變量寫入MATLAB引擎工作空間.然后使用函數(shù)engEvalString向MATLAB發(fā)送命令字符串,完成計(jì)算功能.緊接著獲取MATLAB引擎的輸出結(jié)果,并將結(jié)果轉(zhuǎn)換成double型.最后釋放內(nèi)存空間,關(guān)閉引擎.
VC++6.0中調(diào)用部分的程序源碼見(jiàn)附錄.
為測(cè)試實(shí)驗(yàn)數(shù)據(jù)處理系統(tǒng)的正確性,筆者以杭州師范大學(xué)物理系09級(jí)部分學(xué)生的實(shí)驗(yàn)數(shù)據(jù)作為測(cè)試用例數(shù)據(jù)(表1),將系統(tǒng)的數(shù)據(jù)處理結(jié)果與用手工方式計(jì)算的結(jié)果進(jìn)行了比較。
按照物理實(shí)驗(yàn)中的密度計(jì)算公式以及有效數(shù)字和尾數(shù)“四舍六入五成雙”的數(shù)字修約法則,用手工方式計(jì)算處理表1中的實(shí)驗(yàn)數(shù)據(jù),結(jié)果見(jiàn)表2.
將兩位學(xué)生的物質(zhì)密度測(cè)量實(shí)驗(yàn)數(shù)據(jù)采用該系統(tǒng)進(jìn)行處理,其結(jié)果見(jiàn)圖4、圖5所示.
表1 測(cè)試用例實(shí)驗(yàn)數(shù)據(jù)Tab.1 Examples for experimental data
表2 測(cè)試用例實(shí)驗(yàn)數(shù)據(jù)的手工計(jì)算結(jié)果Tab.2 The manual calculations results of examples for experimental data
比較表2與圖4、圖5所示結(jié)果,可以看出該系統(tǒng)對(duì)學(xué)生物質(zhì)密度測(cè)量實(shí)驗(yàn)數(shù)據(jù)的處理結(jié)果是正確的.
其他實(shí)驗(yàn)數(shù)據(jù)處理模塊的測(cè)試和物質(zhì)密度實(shí)驗(yàn)數(shù)據(jù)處理模塊的測(cè)試相同,此處不再一一給出.
由此表明,應(yīng)用該系統(tǒng)處理物理實(shí)驗(yàn)數(shù)據(jù)的結(jié)果與按誤差理論進(jìn)行手工計(jì)算的實(shí)驗(yàn)結(jié)果一致,系統(tǒng)實(shí)驗(yàn)數(shù)據(jù)處理的正確性是可靠的.
物理實(shí)驗(yàn)數(shù)據(jù)處理系統(tǒng)目前處于試用階段.試用該系統(tǒng)的學(xué)生普遍認(rèn)為:該系統(tǒng)的界面設(shè)計(jì)友好、操作方便、數(shù)據(jù)處理正確且快速.同時(shí),試用該系統(tǒng)的學(xué)生實(shí)驗(yàn)操作積極性普遍提高,實(shí)驗(yàn)教學(xué)效果較之以前有較大的改善.
開(kāi)發(fā)物理實(shí)驗(yàn)數(shù)據(jù)處理系統(tǒng)的實(shí)踐證明,利用MATLAB引擎可節(jié)省大量資源,應(yīng)用程序整體性比較好,能最充分地利用MATLAB的功能,縮短軟件的開(kāi)發(fā)周期,為開(kāi)發(fā)各種類型的數(shù)據(jù)處理系統(tǒng)提供了一種新的快速的方法.對(duì)要求較多復(fù)雜計(jì)算的數(shù)據(jù)處理系統(tǒng),采用VC++與MATLAB聯(lián)合編程更是得心應(yīng)手.
[1]蘇金明,阮沈勇.MATLAB實(shí)用教程[M].北京:電子工業(yè)出版社,2005.
[2]孫祥,徐流美,吳清.MATLAB7.0基礎(chǔ)教程[M].北京:清華大學(xué)出版社,2005.
[3]王正軍.Visual C++6.0程序設(shè)計(jì)從入門到精通[M].北京:人民郵電出版社,2006.
[4]景劼.在VC++中調(diào)用MATLAB混合編程的方法[J].四川兵工學(xué)報(bào),2009(10):136-137.
[5]謝永華,傅德勝.VC++和Matlab混合編程在圖像處理中的應(yīng)用[J].計(jì)算機(jī)應(yīng)用與軟件,2005,22(2):120-121.
[6]葉鵬飛.MATLAB與VC++混合編程在系統(tǒng)辨識(shí)中的應(yīng)用[J].電腦開(kāi)發(fā)與應(yīng)用,2009,22(1):66-68.
[7]劉蓉.Matlab與VC混合編程技術(shù)與實(shí)現(xiàn)[J].電腦編程技巧與維護(hù),2010(8):15-16.
[8]姜長(zhǎng)元.VC與MATLAB混合編程的方法及實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù),2004(14):22-25.
[9]張浩宇,張旭,趙敏.基于虛擬儀器技術(shù)的玻璃量器檢定系統(tǒng)設(shè)計(jì)[J].山東師范大學(xué)學(xué)報(bào):自然科學(xué)版,2009,24(3):19-21.
[10]聞斌,崔建昆.Matlab與Visual C++的聯(lián)合應(yīng)用[J].計(jì)算機(jī)與現(xiàn)代化,2004(2):14-16.
[11]孫亞萍,張慧熙.基于LABVIEW的自動(dòng)熱測(cè)試系統(tǒng)設(shè)計(jì)[J].杭州師范大學(xué)學(xué)報(bào):自然科學(xué)版,2009,8(6):463-466.
[12]李壽松,蘇平,王曉耕,等.物理實(shí)驗(yàn)教程[M].北京:高等教育出版社,1998.
附錄:
以下是VC++6.0中調(diào)用部分的部分程序源碼(以符號(hào)“//”開(kāi)始的文字說(shuō)明為程序的注釋).
The Realization of Intelligent Processing about the Physical Experiment Data by VC++6.0and MATLAB Mixed Programming
WANG Yan-ping,YANG Jian-song
(College of Science,Hangzhou Normal University,Hangzhou 310036,China)
This paper used VC++6.0and MATLAB mixed programming method to realize the physics experiment data processing system development.The practice in the developing indicates that the combination of VC++6.0and MATLAB language can increase the developing efficiency of software greatly,and shorten the maintenance period.
VC++6.0;MATLAB;mixed programming;experiment data processing
TP312
A
1674-232X(2011)03-0268-07
10.3969/j.issn.1674-232X.2011.03.016
2010-11-17
王艷萍(1983—),女,江蘇徐州人,科學(xué)教育專業(yè)碩士研究生,主要從事信息技術(shù)與科學(xué)教學(xué)整合研究.
*通信作者:楊建宋(1957—),男,浙江諸暨人,教授,主要從事物理教學(xué)和凝聚態(tài)物理研究.E-mail:88972208@163.com