【摘 要】Matlab作為一款具有強大運算功能的數(shù)學軟件,廣泛應(yīng)用與各種工程實踐中,它能夠為用戶提供相對其他應(yīng)用軟件更優(yōu)質(zhì)的環(huán)境;C/C++語言是高級程序設(shè)計語言,計算機中的各種硬件、應(yīng)用及操作系統(tǒng)可以通過C/C++語言直接運行。然而在工程實踐中常常會遇到Matlab與C/C++混合編程的技術(shù)問題,如在Matlab的計算環(huán)境中的數(shù)據(jù)處理,文章圍繞二者之間互相調(diào)用的方式,對Matlab與C/C++混合編程的技術(shù)問題進行了深入的研究和探討,希望對這種混合編程的研究提供有益的參考。
【關(guān)鍵詞】Matlab;C/C++;混合編程技術(shù)
前言:Matlab是一款廣泛應(yīng)用的數(shù)學軟件,其運算功能十分強大,具備數(shù)據(jù)分析處理、系統(tǒng)分析、數(shù)值計算以及符號或圖形等運算功能,用戶可以通過Matlab這一數(shù)學平臺進行復雜的運算,使分析計算的效率得到最大限度地提高;C/C++語言是高級程序設(shè)計語言,在當下十分流行,計算機中的各種硬件、應(yīng)用及操作系統(tǒng)可以通過C/C++語言直接運行,可見C/C++語言相比其他編程軟件具有明顯的優(yōu)勢,目前很多重要的應(yīng)用軟件主要通過C/C++語言開發(fā)的,如Matlab。
一、Matlab軟件和C/C++語言簡介
Matlab是當前廣泛應(yīng)用的數(shù)學軟件,其運算功能十分強大,如具備數(shù)據(jù)分析處理、系統(tǒng)分析、數(shù)值計算以及符號或圖形等運算功能,Matlab能夠為用戶提供相對應(yīng)用軟件更為自由、方便、簡潔的編程環(huán)境,用戶可以通過Matlab這一數(shù)學平臺進行復雜的運算,使分析計算的效率得到最大限度地提高。但是,Matlab應(yīng)用軟件也有缺點,盡管與其他應(yīng)用軟件相比擁有更優(yōu)越的編程環(huán)境,可它的程序始終是一款解釋執(zhí)行的程序,在預處理環(huán)節(jié)中并不需要編譯,所以Matlab軟件程序的運行速度相對來說比較慢。
C/C++語言是高級程序設(shè)計語言,在當下十分流行,計算機中的各種硬件、應(yīng)用及操作系統(tǒng)可以通過C/C++語言直接操作和運行,可見C/C++語言相比其他編程軟件具有明顯的優(yōu)勢,目前很多重要的大型應(yīng)用軟件主要通過C/C++語言開發(fā)的,如Matlab[1]。
二、通過Matlab調(diào)用C/C++
通過Matlab編程軟件對C/C++進行調(diào)用的方式有MEX技術(shù)和C/C++的調(diào)用動態(tài)鏈接庫兩種。在Matlab與C/C++混合編程技術(shù)進行之初,首先要設(shè)置Matlab的應(yīng)用程序以及編譯器——設(shè)置編譯應(yīng)用程序MEX:MEX-SETUP;編譯器MBUILD-SETUP。C/C++文件與MEX文件之間的轉(zhuǎn)換,需要在設(shè)置當中選擇VC編譯器,通常一個C/C++的程序當中包含四個部分,其中第四個可以靈活運用。這里舉一個例子:#includec“mex.h”,通過MEXFUNCTION使Matlab知道如何對函數(shù)進行調(diào)用,最后用mex timestwo.c對文件進行編譯,然后在Matlab的命令下對生成的MEX文件進行調(diào)用。
當前編譯C/C++程序的編譯也可以通過C語言編譯器,這樣在mex的命令下就可以直接調(diào)用C++語言的mex文件了。在Matlab文件上運行mex文件是不需要其他工具的,可見使用mex文件是很方便的,具有提升運行速度、重用代碼和擴展功能的優(yōu)點。
Matlab對動態(tài)鏈接庫中的DLL文件提供了接口,通過這個接口就可以通過Matlab對動態(tài)鏈接庫中的數(shù)據(jù)進行調(diào)用,DLL文件中的所有編程語言在Matlab的環(huán)境中都能夠得到支持,調(diào)用DLL文件之前,需要準備相應(yīng)的C語言文件,針可以使用源程序中的文件對C/C++語言的文件提供支持。在Matlab中利用動態(tài)鏈接庫進行調(diào)用的技術(shù)通常要完成以下幾個步驟:打開文件、準備相應(yīng)的數(shù)據(jù)、動態(tài)鏈接庫中導出的函數(shù)進行調(diào)用、關(guān)閉文件。在這些步驟當中需要用到的函數(shù)有:libisloaded,libstruct,calllib,loadlibrary等。
DLL動態(tài)鏈接庫文件的調(diào)用方式相對MEX文件的方式來說,更具有實用性,能夠為C/C++代碼提供更多方法[2]。
三、通過C/C++調(diào)用Matlab
在實踐活動當中通,通過C/C++調(diào)用matlab的方法有多種,如包含m文件轉(zhuǎn)換的C/C++文件、調(diào)用m文件生成的DLL文件以及調(diào)用matlab的計算方法。這里重點對利用Matlab的計算方法進行說明。
Matlab的數(shù)據(jù)庫能夠提供相應(yīng)的接口數(shù)據(jù),用戶通過對這些接口數(shù)據(jù)的利用,調(diào)用Matlab文件就可以在自己的程序當中直接進行。所以在實踐當中,Matlab相當于服務(wù)器,而C/C++的語言程序就是客戶端,二者通過Matlab的引擎方式結(jié)合到了一起,Matlab計算引擎接進行命令和數(shù)據(jù)的接收就通過C/C++程序來進行。除此之外,C/C++程序也可以在VC的語言環(huán)境下進行編譯,把兩個數(shù)據(jù)鏈接庫libeng.lib和libmx.lib輸入到當前的程序,然后填入兩個目錄即可實現(xiàn)。
通過這種方式進行Matlab的調(diào)用需要在Matlab環(huán)境中完成,不僅能夠使系統(tǒng)資源得到節(jié)省,也會提高應(yīng)用程序的整體性[3]。
結(jié)論:綜上所述,由于當下在工程實踐當中常常會遇到Matlab與C/C++混合編程的技術(shù)問題,如在Matlab的計算環(huán)境中的數(shù)據(jù)處理,文章圍繞二者之間互相調(diào)用的方式,即通過Matlab對C/C++進行調(diào)用以及通過C/C++對Matlab進行調(diào)用,對Matlab與C/C++混合編程的技術(shù)問題進行了深入的研究和探討,給出了系統(tǒng)框架的同時可以看到系統(tǒng)應(yīng)用的效果,希望能夠?qū)@種混合編程的研究提供有益的參考,以滿足用戶對編程學習的更多需求。
參考文獻:
[1]朱傳安,潘大夫.Matlab與C/C++混合編程接口及應(yīng)用[J].微計算機信息,2010,12(15):229-231.
[2]甘勝濤.基于MATLAB與C#混合編程的遺傳算法優(yōu)化設(shè)計斜齒輪[J].現(xiàn)代機械,2011,10(03):9-11+26.
[3]李亞軍.基于MATLAB與C/C++的盲處理系統(tǒng)混合編程模式的研究[D].長春:長春理工大學,2011.