Matlab及應(yīng)用-第10章MATLAB外部程序接口技術(shù)_第1頁
Matlab及應(yīng)用-第10章MATLAB外部程序接口技術(shù)_第2頁
Matlab及應(yīng)用-第10章MATLAB外部程序接口技術(shù)_第3頁
Matlab及應(yīng)用-第10章MATLAB外部程序接口技術(shù)_第4頁
Matlab及應(yīng)用-第10章MATLAB外部程序接口技術(shù)_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Institute of Information Theory & Technology Center(ITTC)北京郵電學(xué)信息理論與技術(shù)教研中心12Information Theory & Technology Center(ITTC) MATLAB功能強(qiáng)大,開發(fā)效率高,但主要缺點(diǎn)是執(zhí)行速度比較慢 MATLAB提供了外部程序接口,允許MATLAB和其他應(yīng)用程序進(jìn)行數(shù)據(jù)交換,并提供了C/C+, FORTRAN數(shù)學(xué)和圖形函數(shù)庫,為在其他程序設(shè)計(jì)語言中調(diào)用MATLAB高效算法提供了可能。 MATLAB提供的外部程序接口技術(shù)主要由三種 MEX文件:文件: 是是matlab環(huán)境下調(diào)用環(huán)境下調(diào)用C、FO

2、RTRAN語言編寫的應(yīng)用程序模塊。語言編寫的應(yīng)用程序模塊。 matlab 計(jì)算引擎:計(jì)算引擎: 在使用在使用C、FORTRAN編程時(shí)可調(diào)用編程時(shí)可調(diào)用matlab函數(shù)庫進(jìn)行計(jì)算。函數(shù)庫進(jìn)行計(jì)算。 MAT文件:文件: 實(shí)現(xiàn)實(shí)現(xiàn)matlab與與C、FORTRAN語言程序間的數(shù)據(jù)交換語言程序間的數(shù)據(jù)交換MATLAB外部程序接口技術(shù)3Information Theory & Technology Center(ITTC)MATLAB不能在M文件中直接調(diào)用C語言程序MEX(MATLAB Executable)動(dòng)態(tài)鏈接函數(shù)接口 是是MATLAB調(diào)用別的語言(包括調(diào)用別的語言(包括C語言)編語言)編寫的程序

3、或算法的接口寫的程序或算法的接口MEX文件 是一種動(dòng)態(tài)鏈接程序,是一種動(dòng)態(tài)鏈接程序, MATLAB可以象調(diào)可以象調(diào)用用M文件一樣調(diào)用它文件一樣調(diào)用它Matlab與C語言程序的應(yīng)用編程接口 4Information Theory & Technology Center(ITTC)MEX文件主要有以下幾方面的應(yīng)用: 已經(jīng)開發(fā)的已經(jīng)開發(fā)的C語言程序,則不必將其轉(zhuǎn)化為語言程序,則不必將其轉(zhuǎn)化為M文件而重復(fù)勞動(dòng),通過添加入口程序文件而重復(fù)勞動(dòng),通過添加入口程序mexFunction,可以由,可以由MATLAB調(diào)用。調(diào)用。 在在MATLAB中,中,M文件的計(jì)算速度特別是循文件的計(jì)算速度特別是循環(huán)迭代的速度

4、遠(yuǎn)比環(huán)迭代的速度遠(yuǎn)比C語言慢,因此可以把要語言慢,因此可以把要求大量循環(huán)迭代的部分用求大量循環(huán)迭代的部分用C語言編寫為語言編寫為MEX文件,提高計(jì)算速度。文件,提高計(jì)算速度。 直接控制硬件,如直接控制硬件,如A/D采集卡,采集卡,D/A輸出卡輸出卡等,以用于數(shù)據(jù)采集或控制應(yīng)用。等,以用于數(shù)據(jù)采集或控制應(yīng)用。 MEX文件5Information Theory & Technology Center(ITTC) MEX文件的源程序由兩部分組成: 計(jì)算子程序計(jì)算子程序 包含所有完成計(jì)算功能的程序代碼,計(jì)算程序可以是包含所有完成計(jì)算功能的程序代碼,計(jì)算程序可以是普通的普通的C語言程序,按照語言程序,按

5、照C語言規(guī)則編寫即可語言規(guī)則編寫即可 入口子程序入口子程序mexFunction 在在MATLAB系統(tǒng)與被調(diào)用的外部子程序間建立通信聯(lián)系系統(tǒng)與被調(diào)用的外部子程序間建立通信聯(lián)系 入口子程序的名字必須是入口子程序的名字必須是mexFunction,調(diào)用格式為:,調(diào)用格式為: void mexFunction(int nlhs,mxArray *plhs,int nrhs, mxArray *prhs) nlhs:輸出參數(shù)數(shù)目:輸出參數(shù)數(shù)目 plhs:指向:指向mxArray(MATLAB中所有數(shù)據(jù)都由中所有數(shù)據(jù)都由mxArray定義)定義)的輸出參數(shù)的指針的輸出參數(shù)的指針 nrhs:輸入?yún)?shù)數(shù)目:

6、輸入?yún)?shù)數(shù)目 Prhs:指向:指向mxArray的輸入數(shù)據(jù)的指針。的輸入數(shù)據(jù)的指針。 MEX文件(續(xù))6Information Theory & Technology Center(ITTC) mexFunction函數(shù)舉例 使用使用a,b=test(c,d,e)調(diào)用調(diào)用mex函數(shù)函數(shù)test時(shí),傳給時(shí),傳給test的這四的這四個(gè)參數(shù)分別是個(gè)參數(shù)分別是 2,plhs,3,prhs其中:其中: prhs0=c prhs1=d prhs2=e plhs0=a plhs1=b注意:注意:MEX文件的兩個(gè)主要部分在使用中可以是獨(dú)立的,文件的兩個(gè)主要部分在使用中可以是獨(dú)立的,也可以是組合在一起的。不管是

7、哪一種情況,也可以是組合在一起的。不管是哪一種情況,MEX文件都文件都必須包含頭文件必須包含頭文件mex.h,以便正常申明入口程序。,以便正常申明入口程序。MEX文件(續(xù))7Information Theory & Technology Center(ITTC)例:第一步:給出一個(gè)簡(jiǎn)單的C語言程序該程序的功能是將標(biāo)量該程序的功能是將標(biāo)量x加倍。加倍。 #include math.hvoid timestwo(double y, double x)y0=2.0*x0;return;Matlab與C語言混合編程示例8Information Theory & Technology Center(IT

8、TC)#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(需要一個(gè)輸入?yún)?shù) .); else if(nlhs1) mexErrMsgTxt(輸出參數(shù)太多 ); Matlab與C語言混合編程示例(續(xù))/*輸入變量必須是非復(fù)數(shù)類型的標(biāo)量輸入

9、變量必須是非復(fù)數(shù)類型的標(biāo)量 .*/ mrows = mxGetM(prhs0); ncols = mxGetN(prhs0); if( !mxIsDouble(prhs0) | mxIsComplex(prhs0) | !(mrows=1 & ncols=1) ) mexErrMsgTxt(輸入變量必須是非復(fù)數(shù)類型的標(biāo)量輸入變量必須是非復(fù)數(shù)類型的標(biāo)量 .); /*為返回參數(shù)創(chuàng)建矩陣為返回參數(shù)創(chuàng)建矩陣 . */ plhs0 = mxCreateDoubleMatrix(mrows,ncols, mxREAL); /*分配輸入輸出參數(shù)的指針分配輸入輸出參數(shù)的指針 . */ x = mxGetPr(prhs0); y = mxGetPr(plhs0); /*調(diào)用調(diào)用timestwo子函數(shù)子函數(shù) . */ timestwo(y,x);第二步:編寫與第二步:編寫與C語言程序功能相同的語言程序功能相同的MEX文件文件9Information Theory & Technology Center(ITTC) 第三步:將此MEX文件復(fù)制到當(dāng)前工作目錄進(jìn)行編譯和鏈接 在在MATLAB命令窗口中輸入:命令窗口中輸入: mex timestwo.c 第四步:編譯后就可以象調(diào)用M函數(shù)一樣調(diào)用timestwo了 在在MATLAB命令窗口中輸入

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論