matlab调用c语言驱动函数,[转载]Matlab调用C语言函数
3.3000
要得出以上的結果,那應該怎樣做呢?
解決方法之一是要通過使用MEX文件,MEX文件使得調用C函數和調用Matlab的內置函數一樣方便。MEX文件是由原C代碼加上MEX文件專用的接口函數后編譯而成的。
可以這樣理解,MEX文件實現了一種接口,它把在Matlab中調用函數時輸入的自變量通過特定的接口調入了C函數,得出的結果再通過該接口調回Matlab。該特定接口的操作,包含在mexFunction這個函數中,由使用者具體設定。
所以現在我們要寫一個包含add和mexFunction的C文件,Matlab調用函數,把函數中的自變量(如上例中的1.1和2.2)傳給mexFunction的一個參數,mexFunction把該值傳給add,把得出的結果傳回給mexFunction的另一個參數,Matlab通過該參數來給出在Matlab語句中調用函數時的輸出值(如上例中的a)。
比如該C文件已寫好,名為add.c。那么在Matlab中,輸入:
>> mex add.c
就能把add.c編譯為MEX文件(編譯器的設置使用指令mex
-setup),在Windows中,MEX文件類型為mexw32,即現在我們得出add.mexw32文件。現在,我們就可以像調用M函數那樣調用MEX文件,如上面說到的例子。所以,通過MEX文件,使用C函數就和使用M函數是一樣的了。
我們現在來說mexFunction怎樣寫。
mexFunction的定義為:
void mexFunction(
int nlhs,
mxArray *plhs[],
int nrhs,
const mxArray *prhs[]) {
}
可以看到,mexFunction是沒返回值的,它不是通過返回值把結果傳回Matlab的,而是通過對參數plhs的賦值。mexFunction的四個參數皆是說明Matlab調用MEX文件時的具體信息,如這樣調用函數時:
>> b = 1.1; c = 2.2;
>> a = add(b, c)
mexFunction四個參數的意思為:
nlhs = 1,說明調用語句左手面(lhs-left hand side)有一個變量,即a。
nrhs = 2,說明調用語句右手面(rhs-right hand side)有兩個自變量,即b和c。
plhs是一個數組,其內容為指針,該指針指向數據類型mxArray。因為現在左手面只有一個變量,即該數組只有一個指針,plhs[0]指向的結果會賦值給a。
prhs和plhs類似,因為右手面有兩個自變量,即該數組有兩個指針,prhs[0]指向了b,prhs[1]指向了c。要注意prhs是const的指針數組,即不能改變其指向內容。
因為Matlab最基本的單元為array,無論是什么類型也好,如有double array、 cell array、 struct
array……所以a,b,c都是array,b = 1.1便是一個1x1的double
array。而在C語言中,Matlab的array使用mxArray類型來表示。所以就不難明白為什么plhs和prhs都是指向mxArray類型的指針數組。
完整的add.c如下:
// add.c
#include "mex.h" // 使用MEX文件必須包含的頭文件
總結
以上是生活随笔為你收集整理的matlab调用c语言驱动函数,[转载]Matlab调用C语言函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言 游戏程序,C语言做的推箱子游戏源
- 下一篇: hilbert变换_希尔伯特变换 mat