matlab中def是什么?
在matlab的主界面設置中,有一個指定的存儲路徑,就是matlab中的pathd
matlab怎么導入數據并做二叉樹模型?
直接加載數據,將數據文件存儲在工作區,然后在當前文件夾雙擊,matlab會自動加載數據文件。
實際上,上面的方法使用了load命令。
加載(文件名)
打開matlab,將當前工作區指向對應的數據存儲文件夾,然后在命令窗口中輸入load(fil:迅雷下載#39)。
matlab調用c語言?
如果我有一個用C語言寫的函數,實現了一個函數,比如一個簡單的函數:
doubleadd(doublex,doubley){
returnxy;
}
現在我想在Matlab中使用它,比如輸入:
aadd(1.1,2.2)
3.3000
要達到以上效果,應該怎么做?
解決方法之一是使用MEX文件,這樣調用C函數就像調用Matlab的內置函數。MEX文件由原C代碼和MEX文件的特殊接口函數編譯而成。
可以理解為MEX文件實現了一個接口,通過特定的接口將Matlab中調用函數時輸入的自變量傳遞到C函數中,通過這個接口得到結果。回到Matlab。這個特定接口的操作包含在mexFunction函數中,由用戶具體設置。
所以現在我們需要寫一個包含add和mexFunction的C文件。Matlab調用函數,將自變量(上例中的1.1和2.2)傳遞給mexFunction的一個參數。mexFunction傳遞要添加的值,并將獲得的結果返回給mexFunction的另一個參數。通過此參數調用Matlab語句中的函數時,Matlab給出輸出值(上例中的A)。
例如,已經編寫了c文件并命名為add.c,然后在Matlab中輸入:
mexadd.c
可以將add.c編譯成MEX文件(編譯器設置使用命令mex-setup)。在Windows中,MEX文件類型是mexw32,也就是現在我們得到的文件。現在,我們可以像調用M函數一樣調用MEX文件,就像上面提到的例子一樣。所以通過MEX文件,使用C函數和使用M函數是一樣的。
現在讓我們讓我們來談談如何編寫mexFunction。
MexFunction定義為:
voidmexFunction(
intnlhs,
mxArray*plhs[],
intnrhs,
constmxArray*prhs[]){
}
可以看到,mexFunction沒有返回值。它不是通過返回值,而是通過給參數plhs賦值,將結果發送回Matlab。mexFunction的四個參數都是Matlab調用MEX文件時需要解釋的具體信息。例如,當像這樣調用函數時:
b1.1c2.2
aadd(b,c)
mexFunction的四個參數表示:
Nlhs1,表示調用語句的lhs-lefthandside上有一個變量,即a。
Nrhs2,這意味著調用語句的rhs-righthandside有兩個自變量,分別是B和c。
Plhs是一個數組,指針指向數據類型mxArray。因為左手邊只有一個變量,也就是數組只有一個指針,plhs[0]指向的結果會賦給a。
Prhs類似于plhs,因為在右手邊有兩個獨立變量,也就是說,數組有兩個指針,prhs[0]指向B,prhs[1]指向c,注意,prhs是指向const的指針數組,也就是說,不能改變它所指向的內容。
因為Matlab最基本的單元是數組,不管什么類型,比如doublearray,cellarray,structarray……...所以A,B,C都是A。Rray,b1.1是一個1x1雙陣列。在c語言中,Matlab的數組用mxArray類型表示。所以不難理解為什么plhs和prhs都是指向mxArray類型的指針數組。
完整的add.c如下所示:
//add.c
#includemex.h//使用mex文件必須包含的頭文件。
//C函數來執行特定的工作
doubleadd(doublex,doubley){
returnxy;
}
//MEX文件接口函數
voidmexFunction(
intnlhs,
mxArray*plhs[],
intnrhs,
constmxArray*prhs[]){
雙*a;
doubleb,c;
plhs[0]mxCreateDoubleMatrix(1,1,MXreal);
amxGetPr(plhs[0]);
b*(mxGetPr(prhs[0]);
c*(mxGetPr(prhs[1]);
*aadd(b,c);
}
mexFunction的內容是什么意思?我們知道如果函數被這樣調用:
outputadd(1.1,2.2);
當不涉及具體計算時,產出的價值是未知和未分配的。所以在具體的程序中,我們構建一個1x1的實雙矩陣(使用mxCreateDoubleMatrix函數,該函數返回一個指向新創建的mxArray的指針),然后讓plhs[0]指向它。然后使指針指向plhs[0]指向的mxArray的第一個元素(使用mxGetPr函數返回指向mxArray第一個元素的指針)。同樣,我們把prhs[0]和prhs[1]所指向的元素(也就是1.1和2.2)取出來,賦給B和c,這樣我們就可以把B和c作為獨立變量傳遞給函數add,得到的結果賦給指針A所指向的mxArray中的元素,因為A是指向plhs[0]所指向的mxArray的元素,所以最后輸出的時候,plhs[0]所指向的mxArray被賦給output,output就是計算的結果。
上面說的很多東西都是點這里點那里,還有mxArray,新手肯定會暈。我對不起,要理解這些亂七八糟的關系,我們必須多看多練。
其實mexFunction沒這么簡單。我們需要測試用戶輸入自變量的數量和類型,以確保。
輸入是正確的。例如,在add函數的例子中,用戶輸入chararray就是其中之一。不對。
從上面的描述我們可以得出結論,MEX文件實現了一個接口,將C語言中的計算結果恰當地返回給Matlab。當我們有一個用C語言編寫的大程序時,我們不會。;不需要在Matlab中重寫,只需寫一個接口,使它成為一個MEX文件。另外,Matlab程序中的一些計算瓶頸(如循環)可以通過MEX文件用C語言實現,提高計算速度。