


下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、C語言與matlab接口MATLAB作為世界頂尖的數(shù)學(xué)應(yīng)用軟件,以其強大的工程計算、算法研究、工程繪圖、應(yīng)用程序開發(fā)、數(shù)據(jù)分析和動態(tài)仿真等功能,在航空航天、機械制造和工程建筑等領(lǐng)域發(fā)揮著越來越重要的作用。而C語言功能豐富,使用靈活方便,目標(biāo)程序效率高。既有高級語言的優(yōu)點,又有低級語言的特點。因此,C語言是目前應(yīng)用最廣的編程語言。雖然MATLAB是一個完整的、功能齊全的編程環(huán)境,但在某些情況下,與外部環(huán)境的數(shù)據(jù)和程序的交互是非常必須而且有益的。 眾所周知,MATLAB是用M語言編程,不能在M文件中直接調(diào)用C語言程序??梢酝ㄟ^MATLAB提供的應(yīng)用編程接口(API)來實現(xiàn)與外部的,在MATLAB環(huán)
2、境中實現(xiàn)調(diào)用C語言或Fortran程序、輸入或輸出數(shù)據(jù)以及和其他軟件程序間建立客戶/服務(wù)器關(guān)系等功能。 MATLAB中調(diào)用C語言程序,必須通過MEX文件來實現(xiàn)。 一、 C語言的MEX文件的結(jié)構(gòu) C語言的MEX文件是一種動態(tài)連接子程序,可以象調(diào)用M文件一樣調(diào)用它。MEX文件主要有以下幾方面的應(yīng)用: (1)在MATLAB中,M文件的計算速度特別是循環(huán)迭代的速度遠(yuǎn)比C語言慢,因此可以把要求大量循環(huán)迭代的部分用C語言編寫為MEX文件,提高計算速度。 (2)已經(jīng)開發(fā)的C語言程序,則不必將其轉(zhuǎn)化為M文件而重復(fù)勞動,通過添加入口程序mexFunction,可以由MATLAB調(diào)用。 (3)直接控制硬件,如A/
3、D采集卡,D/A輸出卡等,以用于數(shù)據(jù)采集或控制應(yīng)用。 C語言的MEX文件的源程序由兩個非常明顯部分組成: (1)計算程序,即在MEX文件中完成計算功能的程序代碼,計算程序可以是普通的C語言程序,按照C語言規(guī)則編寫即可 (2)入口程序,將計算程序與MATLAB連接的入口函數(shù)mexFunction。入口程序mexFunction相對要復(fù)雜一些,函數(shù)中有四個參數(shù)nlhs、plhs、nrhs和prhs。這里nlhs是輸出數(shù)據(jù)的個數(shù),plhs是指向mxArray(MATLAB中所有數(shù)據(jù)都由mxArray定義)的輸出數(shù)據(jù)的指針,nrhs是輸入數(shù)據(jù)的個數(shù),prhs是指向mxArray的輸入數(shù)據(jù)的指針。 圖1
4、顯示了如何向MEX文件輸入數(shù)據(jù),通過接口函數(shù)調(diào)用計算程序完成運算過程,最后向MATLAB返回計算結(jié)果的過程。 二、 使用MEX文件 上面所述的MEX文件的兩個主要部分在使用中可以是獨立的,也可以是組合在一起的。不管是哪一種情況,MEX文件都必須包含頭文件mex.h,以便正常申明入口程序。入口程序的名字必須是mexFunction而且必須包含這些參數(shù): void mexFunction(int nlhs,mxArray *plhs,int nrhs,const mxArray *prhs) 在C語言的MEX文件中,參數(shù)nlhs和nrhs包含輸出和輸入變量的數(shù)目,借助于這兩個參數(shù),MEX文件被調(diào)用
5、。參數(shù)plhs和prhs是包含指向MEX文件輸出和輸入變量的指針的向量,prhs是長度為nrhs的輸入變量的指針數(shù)組,plhs是長度為nlhs的輸出變量的指針數(shù)組。比如從MATLAB命令窗口來調(diào)用一個MEX文件: x=fun(y,z); 則MATLAB編譯器使用下面的變量來調(diào)用mexFunction: nlhs=1 nrhs=2 plhs=(pointer)-/*unassigned*/ prhs=(pointer)-y (pointer)-z plhs指向只有一個元素的C語言數(shù)組,并且這個元素為空指針。prhs指向含有兩個元素的C語言數(shù)組,其中第一個元素指向mxArray型變量Y,第二個元素
6、指向mxArray型變量Z。 這里,plhs指向空的數(shù)組是由于輸出x在子程序執(zhí)行前尚未產(chǎn)生,入口程序的作用就是創(chuàng)建輸出數(shù)組并分配指針plhs0指向該數(shù)組。如果plhs0沒有賦值,MATLAB將給出輸出變量沒有賦值的警告信息三、C語言程序MEX文件實例 MATLAB 5 API提供了一系列程序來處理MATLAB所支持的各種數(shù)據(jù)類型,每一種數(shù)據(jù)類型都有對應(yīng)函數(shù)共你使用來處理對應(yīng)的數(shù)據(jù)。下面給出一個簡單的C語言程序和與之對應(yīng)的MEX文件代碼,該程序的功能是將標(biāo)量x加倍。 C語言程序如下: #include math.h void timestwo(double y, double x) y0=2.0
7、*x0; return; 下面是與C語言程序功能相同的MEX文件: #include mex.h void timestwo(double y, double x) y0=2.0*x0; void mexFunction(int nlhs, mxArray *plhs, int nrhs, const mxArray *prhs) double *x, *y; int mrows, ncols; /*檢查正確的參數(shù)數(shù)目*/ if(nrhs!=1) mexErrMsgTxt(需要一個輸入?yún)?shù).); else if(nlhs1) mexErrMsgTxt(輸出參數(shù)太多.); /*輸入變量必須是非復(fù)
8、數(shù)類型的標(biāo)量*/ mrows=mxGetM(prhs0); ncols=mxGetN(prhs0); if(!mxIsDouble(prhs0) mxIsComplex(prhs0) !(mrows=1 & ncols=1) mexErrMsgTxt(輸入變量必須是非復(fù)數(shù)類型的標(biāo)量.); /*為返回參數(shù)創(chuàng)建矩陣*/ plhs0=mxCreateDoubleMatrix(mrows, ncols, mxREAL); /*分配輸入輸出參數(shù)的指針*/ x=mxGetPr(prhs0); y=mxGetPr(plhs0); /*調(diào)用timestwo子函數(shù)*/ timestwo(y, x); C語言是在
9、編譯的時候檢查函數(shù)參數(shù)。MATLAB可以在M函數(shù)中傳遞任意數(shù)量和類型的參數(shù),MEX文件也是如此,不過在程序中必須可靠地處理輸入輸出參數(shù)的數(shù)目。如果將上面的MEX文件命名為timestwo.c,就可以對它進行編譯和鏈接,在MATLAB命令窗口下輸入: mex timestwo.c 這是產(chǎn)生MEX文件timestwo.*所必需的步驟,該文件的擴展名所運行的系統(tǒng)平臺的類型。Windows系統(tǒng)下,擴展名為dll。此時,就可以象調(diào)用M函數(shù)一樣調(diào)用timestwo了。 在MATLAB命令窗口中輸入: x=2; y=timestwo(x); 就可以得到: y=4; 四、小 結(jié) MEX文件雖然具有較強大的功能,但并不是對所有的應(yīng)用都恰當(dāng)。MATLAB是一個高效率的編程系統(tǒng),特別適合于工程計算、系統(tǒng)仿真等應(yīng)用。它的最大優(yōu)點就是將人們從繁
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 地理課題申報項目書范文
- 小學(xué)街舞課題申報書范文
- 課題申報書檢索怎么寫
- 體育校級課題申報書模板
- 單位家電清洗合同范例
- 課題申報書作業(yè)設(shè)計模板
- 廚房砌磚合同范本
- 體育強國課題申報書
- 數(shù)學(xué)作業(yè)課題申報書格式
- 買隨車吊合同范本
- 華為機器視覺好望系列產(chǎn)品介紹
- 多重耐藥護理查房
- 《旅游經(jīng)濟學(xué)》全書PPT課件
- 中國醫(yī)院質(zhì)量安全管理 第3-5部分:醫(yī)療保障 消毒供應(yīng) T∕CHAS 10-3-5-2019
- 安全評價理論與方法第五章-事故樹分析評價法
- CoDeSys編程手冊
- 幼兒園一日活動流程表
- 中國民俗知識競賽題(附答案和詳細(xì)解析)
- 散裝水泥罐體標(biāo)準(zhǔn)資料
- 原發(fā)性肝癌臨床路徑最新版
- 第3章一氧化碳變換
評論
0/150
提交評論