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