李 雯(寶雞職業(yè)技術(shù)學(xué)院電子信息工程系,721000)
課題名稱:省職教學(xué)會(huì)的課題《基于VC和MATLAB的仿真實(shí)驗(yàn)平臺(tái)的設(shè)計(jì)》課題編號(hào):SZJYB2015033
?
Matlab接口技術(shù)應(yīng)用研究
李 雯
(寶雞職業(yè)技術(shù)學(xué)院電子信息工程系,721000)
課題名稱:省職教學(xué)會(huì)的課題《基于VC和MATLAB的仿真實(shí)驗(yàn)平臺(tái)的設(shè)計(jì)》課題編號(hào):SZJYB2015033
摘要:Matlab是一種面向科學(xué)和工程計(jì)算的高級(jí)語言,可以勝任大多數(shù)的工作,但仍然具系統(tǒng)不友好性 的弊端,將Matlab與外部程序進(jìn)行混編設(shè)計(jì),可以有效的改善這一狀況,本文介紹了混合編程的多種方法,希望對(duì)從事程序開發(fā)讀者有所幫助。
關(guān)鍵詞:Matlab;接口技術(shù);方式
Matlab作為應(yīng)用范圍比較廣泛的數(shù)學(xué)軟件,是一個(gè)相當(dāng)完整的系統(tǒng),它向用戶提供了一個(gè)功能十分完善的程序設(shè)計(jì)和數(shù)據(jù)處理集成環(huán)境,用戶可以根據(jù)需要方便地編寫和擴(kuò)充新的函數(shù)庫。它以矩陣運(yùn)算為基礎(chǔ),極少的代碼即可實(shí)現(xiàn)復(fù)雜的功能。但是MATLAB的M文件作為一個(gè)文本文件,不利于算法的保密,而且訪問硬件的能力差,執(zhí)行效率也不高,這時(shí)候就需要研究MATI.AB接口技術(shù),通過外部程序來實(shí)現(xiàn)對(duì)MATLAB的調(diào)用。如何實(shí)現(xiàn)其與外部程序的混合編程設(shè)計(jì)成為計(jì)算機(jī)領(lǐng)域關(guān)注的重點(diǎn)課題,現(xiàn)階段有兩種方法來解決這一問題:一是在MATLAB中調(diào)用其它語言編寫的代碼;二是在其他語言程序中調(diào)用MATLAB。這些技術(shù)的應(yīng)用使MATLAB的使用領(lǐng)域在不斷的擴(kuò)展,給開發(fā)者提供了靈活多變的解決問題的途徑。
在MATLAB開發(fā)環(huán)境中調(diào)用C/C++等外部程序離不開編譯器的支持,編譯器存在的價(jià)值就是將C/C++代碼編譯為MEX文件,這樣就可以將程序執(zhí)行下去。MEX文件是Matlab調(diào)用C/ C++程序的主要形式,它包含有Matlab解釋器,以動(dòng)態(tài)鏈接庫的形式而存在,由于數(shù)據(jù)庫Matlab版本有所不同,因而MEX文件的名稱和大小也是不同的,有的以·dll命名,有的以*·mexw 32形式而存在,還有以*·mexw64的名稱存在的,無論是以何種形式存在的MEX文件都有著裝載動(dòng)態(tài)鏈接和執(zhí)行動(dòng)態(tài)鏈接的功能,mwlndex,mwsize,mxchar,mxlogical,mxClasslD,mxComplexity是其語言接口的代表數(shù)據(jù)類型,它通過用C/C++語言編寫代碼,然后通過Matlab編譯器將其編譯為MEX文件。而要想用C/C++語言編寫MEX文件需要解決的一個(gè)首要問題是將mexFunction函數(shù)中的Matlab與C/C++代碼模塊的數(shù)據(jù)實(shí)現(xiàn)順利交互,而要解決這一點(diǎn)就需要充分了解Matlab與C/C++代碼的結(jié)構(gòu)與優(yōu)勢(shì)。Matlab中的數(shù)據(jù)類型可以用mxArray來描述,包括其中所有輸入和輸出的參數(shù),而將C/C++語言的基本數(shù)據(jù)轉(zhuǎn)換為mxArray類型就成為解決Matlab與C/C++代碼模塊進(jìn)行交互的關(guān)鍵。而Matlab中所包含的API函數(shù)使這一問題的解決變成了可能,在Matlab與C/C++混合編程時(shí)候經(jīng)常需要調(diào)用Matlab提供的API函數(shù),其中以mx開頭的Matlab API函數(shù)主要是提供對(duì)mxArray進(jìn)行操作的函數(shù),而以mex開頭的Matlab API函數(shù)則提供Matlab環(huán)境后臺(tái)操作的函數(shù)。其中,以mex開頭的Matlab API函數(shù)只能在MEX文件中應(yīng)用,以mex開頭的Matlab API函數(shù)可以在其他應(yīng)用如從C/C++調(diào)用Matlab程序中應(yīng)用。
Matlab中調(diào)用C/C++函數(shù)的另一種方式,即采用%#external語法結(jié)構(gòu)。假定在Matlab函數(shù)中需要調(diào)用一個(gè)和數(shù)據(jù)采集設(shè)備密切相關(guān)的底層C/C++函數(shù)以獲得該設(shè)備采集的數(shù)據(jù)。此時(shí),可以首先用M文件完成整個(gè)程序,需要調(diào)用的C/C++函數(shù)暫時(shí)用M函數(shù)代替,并用%#external標(biāo)記。
使用Matlab編譯器編譯的文件,生成可獨(dú)立運(yùn)行的可執(zhí)行文件,為用戶提供一種最簡單的發(fā)布Matlab程序的方法。在C語言的函數(shù)中可以調(diào)用*、m函數(shù)經(jīng)過Matlab編譯器編譯后的函數(shù)。以mrandplot、m生成函數(shù)。
(1)編譯mrand.m文件,生成mrandplot函數(shù)的接口函數(shù)mlfmrandplot函數(shù)。在C/C++語言函數(shù)中可以通過調(diào)用mlfmrandplot函數(shù)來達(dá)到調(diào)用mrandplot函數(shù)的目的。
(2)調(diào)用 mrandplot函數(shù):Matlab和C/C++混合編程中經(jīng)常要用到mx-API函數(shù),本例中調(diào)用
mxcreate Double Matrix API 函數(shù)用于構(gòu)造 mlfmrandplot 函數(shù)的輸入?yún)?shù)。
C/C++調(diào)用Matlab程序的第二種方式可以通過 Matlab 引擎直接執(zhí)行 Matlab語言。Matlab程序中蘊(yùn)含著大量的數(shù)學(xué)計(jì)算方式,當(dāng)用戶需要使用某一公式進(jìn)行數(shù)值計(jì)算時(shí)就可以通過Matlab引擎調(diào)用Matlab函數(shù),為用戶的計(jì)算服務(wù)。大量的API函數(shù)是Matlab得以順暢運(yùn)行的基礎(chǔ),通過這些API函數(shù)用戶只需將數(shù)據(jù)輸入到Matlab中,Matlab引擎就可以將人工難以計(jì)算出來的數(shù)據(jù)輕松的計(jì)算出來,界面部分由C/C++語言構(gòu)成,而這一切的實(shí)現(xiàn)都離不開Matlab環(huán)境的支持。
C/C++調(diào)用 Matlab 程序的第三種方式:將 Matlab程序編譯為C/C++ 動(dòng)態(tài)鏈接庫,然后在C/C++程序中調(diào)用。通過Matlab編譯器的mcc命令,可以將Matlab *·m文件直接編譯為動(dòng)態(tài)鏈接庫以供 Visual C++調(diào)用。
Matlab 的接口技術(shù)可以讓使用者不只是局限于一種計(jì)算工具,這些接口技術(shù)可以幫助使用者更好的利用手中的工具,結(jié)合多個(gè)工具的去處,找到解決實(shí)際問題的優(yōu)秀方案。
參考文獻(xiàn)
[1]劉維著. 精通Matlab與c/c++混合程序設(shè)計(jì)[M]. 北京航空航天大學(xué)出版社
[2] 張亮,王繼陽編著. MATLAB與c/c++混合編程[M]. 人民郵電出版社出版
[3]呂獻(xiàn)忠. 匯編與C語言混合程序設(shè)計(jì)方法研究[J]. 電腦編程技巧與維護(hù),2015,12:37-38.
李雯,女,陜西扶風(fēng)人,1982年出生,碩士,高校講師,主要研究方向:電氣控制系統(tǒng)設(shè)計(jì)與仿真。
Matlab interface technology application research
Li Wen
(Baoji professional technology institute,Department of electronic and information engineering,721000)
Abstract:Matlab is a high-level language for scientific and engineering calculation, and can do most of the job,but still with the deficiencies of the system is not friendly,external program with the Matlab mix design,can effectively improve the situation,this paper introduces the mixed programming of a variety of methods,hope to help readers engaged in application development.
Keywords:Matlab;Interface technology;way
作者簡介