摘要:介紹了三種實用易行的MATLAB與VC++混合編程方式,即利用MATLAB的MCC編譯器,使用MATCOM軟件轉(zhuǎn)化M文件,使用MATLAB的COM Builder工具制作COM組件。針對具體程序分別應(yīng)用三種方法來實現(xiàn),對每種方法介紹了詳細(xì)步驟。對三種方法進(jìn)行了分析比較,總結(jié)了各自的優(yōu)缺點,實現(xiàn)了MATLAB出色的圖形處理功能和數(shù)值計算能力與VC++強(qiáng)大編程能力的結(jié)合。
關(guān)鍵詞:MATLAB;VC++;混合編程
中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2013)10-2353-03
MATLAB是適合多學(xué)科,多種工作平臺的功能強(qiáng)大的大型數(shù)值計算和系統(tǒng)分析軟件。MATLAB將數(shù)值分析、矩陣計算、信號處理和圖形顯示相結(jié)合,包含了大量高度集成的函數(shù),為科學(xué)研究、工程設(shè)計及眾多學(xué)科領(lǐng)域提供了一種簡潔、高效的編程工具,在數(shù)值分析、科學(xué)計算、算法開發(fā)、建模和仿真等方面具有獨特優(yōu)勢[1]。但是MATLAB使用的是解釋性語言,限制了自身的執(zhí)行速度;程序的執(zhí)行限制與MATLAB自身的運行環(huán)境,不利于應(yīng)用程序的開發(fā);GUI功能較差。
VC++是強(qiáng)大的windows應(yīng)用程序開發(fā)工具,它提供了高度集成的工具集和可視化集成的編程環(huán)境,包括了Microsoft的代碼優(yōu)化技術(shù),極大提高了應(yīng)用程序的設(shè)計效率,還提供了復(fù)雜的資源編輯器,擁有強(qiáng)大的GUI功能[2]。
因此,實現(xiàn)MATLAB與VC++等可視化程序設(shè)計語言的混合編程,提高程序的執(zhí)行速度,美化應(yīng)用程序界面,脫離MATLAB環(huán)境,發(fā)布獨立的應(yīng)用程序,同時利用MATLAB在數(shù)值分析、矩陣計算、信號處理和圖形顯示等方面的強(qiáng)大功能,具有重要的意義。
1 MATLAB與VC++混合編程方法
MATLAB與VC++有多種接口方法,但是一些常見方法難以實現(xiàn),執(zhí)行效率低,如MATLAB Engine、直接調(diào)用MATLAB的C/C++數(shù)學(xué)函數(shù)庫等。該文介紹三種只要在VC++平臺下調(diào)用,不需要編寫大量語句,更加適用于實際應(yīng)用和軟件開發(fā)的接口方法:利用MATLAB自帶編譯器MCC;使用MATCOM軟件轉(zhuǎn)換M文件;以及利用COM Builder工具制作COM組件。
1.1 利用MATLAB自帶編譯器MCC
MCC是MATLAB自帶的優(yōu)化編譯器,作用是將m文件轉(zhuǎn)化成C/C++代碼,通過MCC,可以將MATLAB數(shù)學(xué)庫、圖形庫和界面的MATLAB程序轉(zhuǎn)化為DLL動態(tài)鏈接庫、C/C++文件、EXE應(yīng)用程序等一系列文件。MCC實現(xiàn)MATLAB與VC++混合編程的步驟為[3-4]。
1.2使用MATCOM轉(zhuǎn)換M文件
MATCOM是Mathworks公司推出的由MATLAB到C++的編譯開發(fā)軟件平臺。MATCOM可以把M文件翻譯成C++源文件,并編譯為脫離MATLAB環(huán)境可獨立運行的程序。它的編譯環(huán)境為MIDEVA。通過MATCOM鏈接MATLAB的M文件有以下三種方式:
1)將M文件直接轉(zhuǎn)換為C/C++,然后添加至MSVC工程中;
2)利用MATCOM生成獨立執(zhí)行的EXE文件,但由于VC和MATLAB之間不能交互,通用性差,僅適用于在VC中調(diào)用MATLAB實現(xiàn)圖形顯示。
3)實現(xiàn)在Visual C++6.0環(huán)境中直接對M文件進(jìn)行編譯,這種方法通過使用Visual MATCOM工具條,在脫離了MATLAB環(huán)境條件下,實現(xiàn)了VC++對M文件的調(diào)用,大大方便了應(yīng)用程序的開發(fā)。
本文采用第三種—利用MATCOM直接在VC++中對M文件進(jìn)行編譯的方式,實現(xiàn)上述繪制正弦函數(shù)圖形的程序[5]。
1)安裝MATCOM4.5,然后在VC++中設(shè)置MATCOM的調(diào)用環(huán)境,并生成一個Visual MATCOM工具條。
編譯執(zhí)行后,可通過點擊對話框上的按鈕,利用COM組件的方法,進(jìn)行正弦圖像的繪制,完成MATLAB與VC++的混合編程。
2 結(jié)束語
通過上述三種方法的分析和實例應(yīng)用,可以發(fā)現(xiàn)上述三種方式都不需要在VC++平臺下編寫大量語句,將程序的處理部分,全部用M文件完成,VC++中只需要簡單的調(diào)用即可,相對于其他的混合編程方法,如通過MATLAB Engine、直接調(diào)用MATLAB的C/C++數(shù)學(xué)函數(shù)庫等執(zhí)行效率低、需要用戶在VC++下大量編寫代碼的方式,有著顯著的優(yōu)點,更加適用于實際應(yīng)用和軟件開發(fā)。這三種MATLAB與VC++的混合編程方法又有各自的特點:
1)利用MATLAB自帶編譯器MCC,將M文件轉(zhuǎn)換成C/C++文件,除了上述優(yōu)點外仍有很多限制,如:不能轉(zhuǎn)換腳本M文件,只能轉(zhuǎn)換M函數(shù);不能使用MATLAB對象;不能用input或者eval操作MATLAB空間變量;不能動態(tài)地命名變量,然后用load或者save命令來操作;不能處理具有嵌套調(diào)用其他M文件的M文件;不能使用MATLAB內(nèi)聯(lián)函數(shù)等。
2)使用MATCOM轉(zhuǎn)換M文件,相比其它兩種方法,它具有轉(zhuǎn)換過程簡單,容易實現(xiàn);不僅可以轉(zhuǎn)換獨立的腳本文件,也可以轉(zhuǎn)換嵌套腳本文件;設(shè)置環(huán)境后,可以使用Matlab的部分工具箱函數(shù)等優(yōu)點。但是,它仍舊存在以下不足:第一,需要安裝MATCOM, 為程序的開發(fā)增加了依賴性;第二, 對struct等類的支持有缺陷,對class數(shù)據(jù)類型、部分繪圖語句無法實現(xiàn)或得不到準(zhǔn)確圖象,尤其是三維圖象; 第三,利用MATCOM方式,在VC++編譯過程中,程序很可能會發(fā)生不正常運行。
3)利用COM Builder工具制作COM組件,這種方法增強(qiáng)了對圖形的支持和程序的通用性,具有較高的運行效率,但是不支持腳本文件。因此在程序較大、調(diào)用工具箱函數(shù)或調(diào)用函數(shù)較多時推薦使用。
MATLAB與VC++的混合編程技術(shù),既充分滿足了對數(shù)值分析、矩陣運算和圖形顯示的要求,又降低了軟件開發(fā)的難度,提高了系統(tǒng)的執(zhí)行速率。但根據(jù)使用情況的不同,應(yīng)選擇不同的混合編程方法。
參考文獻(xiàn):
[1] Duane,Bruce.精通MATLAB7[M]. 朱仁峰,譯.北京:清華大學(xué)出版社,2010.
[2] 魏朗,陳濤.Visual C++程序設(shè)計攻略教程[M]. 西安:西安電子科技大學(xué)出版社,2008.
[3] 蘇金明,劉宏,劉波.MATLAB高級編程[M]. 北京:電子工業(yè)出版社:2005,215-228.
[4] Math Works. Matlab complier userguide:version2[M].New Mexico:MathWorks,1998.
[5] 牟彧清,王汝霖,李國新.MATLAB 與VC 接口技術(shù)的研究[J].微計算機(jī)信息,2006,22(7-3):275-277.
[6] 王曉春,曹鳴,羅永新.基于COM 的VC 與Matlab的混合編程技術(shù)[J].自動化技術(shù),2004(19):16-18.