MATLAB调用C语言程序—一个简单的例子
MATLAB在數(shù)值運算、圖像處理、實時仿真方面具有很大得優(yōu)勢,但它得運行速度遠(yuǎn)遠(yuǎn)不及C語言或C++,為了解決這一問題,MATLAB提供了和C/C++混合編程的接口,以此講MATLAB對運算、圖形處理得優(yōu)點和c語言運行速度快得特點想結(jié)合。
混合編程的一般步驟:MATLAB 函數(shù)使用MATLAB格式數(shù)據(jù) —>C/C++程序首先解析MATLAB數(shù)據(jù) —>解析后運行C/C++程序,得到結(jié)果 —>C/C++程序最后要把上述結(jié)果數(shù)據(jù)打包成MATLAB格式輸出給MATLAB中的主調(diào)程序。MATLAB是不能直接調(diào)用c語言的函數(shù)的,需要將c語言代碼編譯乘mex文件才可以調(diào)用,其中會用到一些輔助函數(shù),本文以一個加法的例子介紹一下MATLAB與C混合編程的方法。
第一步 創(chuàng)建一個C文件
文件命名為add.c。
第二步 添加頭文件“mex.h”
這一項是必須的,mex.h中包含了編譯中用到的接口變量,函數(shù)等。
第三步 定義c語言的功能函數(shù)
void add(double *x,double *y,double *z) { *z=*x+*y; }這里我們?nèi)坑弥羔樀姆绞絺鬟f輸入輸出參數(shù),實現(xiàn)z=x+y的功能。
第四步 定義MexFunction函數(shù)
這也是最關(guān)鍵的一步,MexFunction是c語言和MATLAB的接口函數(shù),完成文章開頭所敘述的操作。
void mexFunction( int nlhs, mxArray *plhs[],int nrhs, const mxArray *prhs[]) {double *x, *y; /*被加數(shù)和加數(shù)*/double *z; /*和*////判斷輸入輸出參數(shù)的維度if(nrhs!=2) {mexErrMsgIdAndTxt("MyToolbox:arrayProduct:nrhs","Two inputs required.");}if(nlhs!=1) {mexErrMsgIdAndTxt("MyToolbox:arrayProduct:nlhs","One outputs required.");} x=mxGetPr(prhs[0]);//獲取第一個輸入?yún)?shù)的指針y=mxGetPr(prhs[1]); //獲取第二個輸入?yún)?shù)的指針plhs[0] = mxCreateDoubleMatrix(1, 1, mxREAL); //創(chuàng)建輸出矩陣z = mxGetPr(plhs[0]);//獲取第一個輸出參數(shù)的指針add(x,y,z);調(diào)用add函數(shù)}代碼中有詳細(xì)的注釋,這里對四個輸入?yún)?shù)簡單的介紹:
nlhs說明調(diào)用語句左手面(lhs-left hand side)有幾個變量,輸出數(shù)據(jù)個數(shù)
nrhs說明調(diào)用語句右手面(rhs-right hand side)有幾個變量,輸入數(shù)據(jù)個數(shù)。
*plhs是一個數(shù)組,其內(nèi)容為指針,該指針指向數(shù)據(jù)類型mxArray。代表左手邊數(shù)據(jù),也就是輸出數(shù)據(jù)。
*prhs同上,代表輸入數(shù)據(jù)
第五步 編譯
需要提前安裝好MinGW-w64工具箱,一般安裝MATLAB的時候默認(rèn)是不安裝的,安裝方法很簡單,主頁-附加功能->搜索“MinGW-w64”。
搜索MinGW-w64
點進(jìn)去之后在右側(cè)回看到下載和下載并安裝,直接下載安裝就可以了。需要注意的是這個附加功能僅支持2017b以上的版本。
然后就可以在命令行編譯,直接輸入以下命令即可:
mex add.c
編譯成功后會在當(dāng)前文件夾生成一個mexw64文件(32位系統(tǒng)的話就是mexw32)。
第六步 MATLAB調(diào)用
直接在腳本文件或者命令行調(diào)用即可。
a=add(1,2);
要保證輸入有兩個參數(shù),輸出一個參數(shù),這里不能省略輸出參數(shù),因為我們在MexFunction中編寫了判斷輸入輸出參數(shù)的代碼,如果沒有輸出參數(shù)的話,就會報錯:
總結(jié)
以上是生活随笔為你收集整理的MATLAB调用C语言程序—一个简单的例子的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最新kali之hping3
- 下一篇: erc20钱包下载_【重要公告】VNT