MATLAB作為世界頂尖的數學應用軟件,以其強大的工程計算、算法研究、工程繪圖、應用程序開發、數據分析和動態仿真等功能,在航空航天、機械制造和工程建築等領域發揮著越來越重要的作用。而C語言功能豐富,使用靈活方便,目標程序效率高。既有高級語言的優點,又有低級語言的特點。因此,C語言是目前應用最廣的編程語言。雖然MATLAB是一個完整的、功能齊全的編程環境,但在某些情況下,與外部環境的數據和程序的交互是非常必須而且有益的。
眾所周知,MATLAB是用M語言編程,不能在M文件中直接調用C語言程序。可以通過MATLAB提供的應用編程接口(API)來實現與外部的接口,在MATLAB環境中實現調用C語言或Fortran程序、輸入或輸出數據以及和其他軟件程序間建立客戶/服務器關系等功能。
MATLAB中調用C語言程序,必須通過MEX文件來實現。
一、 C語言的MEX文件的結構
C語言的MEX文件是一種動態連接子程序,可以象調用M文件一樣調用它。MEX文件主要有以下幾方面的應用:
(1)在MATLAB中,M文件的計算速度特別是循環迭代的速度遠比C語言慢,因此可以把要求大量循環迭代的部分用C語言編寫為MEX文件,提高計算速度。
(2)已經開發的C語言程序,則不必將其轉化為M文件而重復勞動,通過添加入口程序mexFunction,可以由MATLAB調用。
(3)直接控制硬件,如A/D采集卡,D/A輸出卡等,以用於數據采集或控制應用。
C語言的MEX文件的源程序由兩個非常明顯部分組成:
(1)計算程序,即在MEX文件中完成計算功能的程序代碼,計算程序可以是普通的C語言程序,按照C語言規則編寫即可
(2)入口程序,將計算程序與MATLAB連接的入口函數mexFunction。入口程序mexFunction相對要復雜一些,函數中有四個參數nlhs、plhs、nrhs和prhs。這裡nlhs是輸出數據的個數,plhs是指向mxArray(MATLAB中所有數據都由mxArray定義)的輸出數據的指針,nrhs是輸入數據的個數,prhs是指向mxArray的輸入數據的指針。
圖1顯示了如何向MEX文件輸入數據,通過接口函數調用計算程序完成運算過程,最後向MATLAB返回計算結果的過程。