matlab里面調用函數(shù) matlab如何定義函數(shù)輸入?
matlab如何定義函數(shù)輸入?成立一個函數(shù)的M文件步驟:1,在下達命令窗口中鍵入edit,自動彈出一個函數(shù)編輯框作用于你下拉菜單一個函數(shù)2,函數(shù)的建立:格式為function空格fmyfun(x,y)
matlab如何定義函數(shù)輸入?
成立一個函數(shù)的M文件步驟:
1,在下達命令窗口中鍵入edit,自動彈出一個函數(shù)編輯框作用于你下拉菜單一個函數(shù)
2,函數(shù)的建立:格式為function空格fmyfun(x,y),這里f不是你函數(shù)的輸出,myfun就是你這個函數(shù)的函數(shù)文件名(這個名字你是可以自己你隨便訂的),然后括號里邊的那就是你的輸入。
matlab怎么輸入數(shù)學函數(shù)的程序怎么寫?
matlab輸入數(shù)學函數(shù)的程序寫的方法:
1,在下命令窗口中鍵入edit,自動彈出一個函數(shù)編輯框作用于你自定義一個函數(shù)。
2,函數(shù)的建立:格式為function空格fmyfun(x,y),這里f肯定是你函數(shù)的輸出,myfun肯定是你這個函數(shù)的函數(shù)文件名(這個名字你也可以自己你隨便訂的),然后括號里邊的應該是你的輸入。
matlab嵌套函數(shù)?
假設不成立你有兩個函數(shù)new_A()和new_B()
function[y1,y2]life_A(x1,x2)
...
...
...
然后把上面的保存為fun_A.m
run_B()要動態(tài)創(chuàng)建fun_A()
functionyrun_B()
...
[a,b]fun_A(x3,x4);
...
保存到為life_B.m
然后再matlab不提示符負責執(zhí)行
life_B()
就可以了
matlab調用c語言?
如果不是我有一個用C語言寫的函數(shù),實現(xiàn)方法了一個功能,如一個很簡單函數(shù):
doubleadd(doublex,doubley){
returnxy;
}
現(xiàn)在我要想在Matlab中建議使用它,.例如然后輸入:
aadd(1.1,2.2)
3.3000
要結論以上的結果,那應該該怎樣做呢?
解決方法之一是要通過建議使用MEX文件,MEX文件讓調用C函數(shù)和動態(tài)創(chuàng)建Matlab的內置函數(shù)一般比較方便。MEX文件是由原C代碼而且MEX文件膠的接口函數(shù)后代碼編譯而成的。
可以不那樣理解,MEX文件利用了一種接口,它把在Matlab中調用函數(shù)時輸入輸入的自變量某個特定的接口已調入了C函數(shù),得出的結果再該接口調去Matlab。該某個特定接口的操作,真包含在mexFunction這個函數(shù)中,由使用者詳細設置。
所以現(xiàn)在我們要寫一個中有add和mexFunction的C文件,Matlab調用函數(shù),把函數(shù)中的自變量(如前述例中的1.1和2.2)掌譜mexFunction的一個參數(shù),mexFunction把該值掌譜add,把得出來的結果趕回給mexFunction的另一個參數(shù),Matlab按照該參數(shù)來決定在Matlab語句中調用函數(shù)時的輸出值(如本例中的a)。
比如該C文件已寫好,名為assign.c。那就在Matlab中,輸入輸入:
mexadd.c
就能把add.c編譯器為MEX文件(編譯器的設置不使用指令mex-setup),在Windows中,MEX文件類型為mexw32,即現(xiàn)在我們得出文件?,F(xiàn)在,我們就可以像全局函數(shù)M函數(shù)那樣的話全局函數(shù)MEX文件,如上面說到的例子。所以我,實際MEX文件,在用C函數(shù)就和可以使用M函數(shù)是一樣的的了。
我們現(xiàn)在來說mexFunction怎樣才能寫。
mexFunction的定義為:
voidmexFunction(
intnlhs,
mxArray*plhs[],
intnrhs,
constmxArray*prhs[]){
}
看的到,mexFunction是沒返回值的,它又不是按照返回值把結果傳去Matlab的,而是通過對參數(shù)plhs的賦值。mexFunction的四個參數(shù)皆是只能說明Matlab動態(tài)鏈接庫MEX文件時的具體信息,如這樣調用函數(shù)時:
b1.1;c2.2;
aadd(b,c)
mexFunction四個參數(shù)的意思為:
nlhs1,說明內部函數(shù)語句左手面(lhs-lefthandside)有一個變量,即a。
nrhs2,那說明動態(tài)鏈接庫語句右手面(rhs-righthandside)有兩個自變量,即b和c。
plhs是一個數(shù)組,其內容為指針,該指針指向數(shù)據(jù)類型mxArray。而且現(xiàn)在左手面唯有一個變量,即該數(shù)組只有一個指針,plhs[0]指向的結果會賦值給a。
prhs和plhs類似,因為右手面有兩個自變量,即該數(shù)組有兩個指針,prhs[0]對準了b,prhs
matlab如何定義函數(shù)輸入?
指向了c。要注意prhs是const的指針數(shù)組,即肯定不能改變其對準內容。而且Matlab最基本的單元為array,無論是什么類型再說,如有doublearray、cellarray、structarray……所以a,b,c大都array,b1.1葉白兩個1x1的doublearray。而在C語言中,Matlab的array使用mxArray類型來表示。所以才就不難知道我想知道為什么plhs和prhs是對準mxArray類型的指針數(shù)組。
求下載的add.c萬分感謝:
//add.c
#includemex.h//可以使用MEX文件需要包含的頭文件
//想執(zhí)行具體職責的C函數(shù)
doubleadd(doublex,doubley){
returnxy;
}
//MEX文件接口函數(shù)
voidmexFunction(
intnlhs,
mxArray*plhs[],
intnrhs,
constmxArray*prhs[]){
extra*a;
doubleb,c;
plhs[0]mxCreateDoubleMatrix(1,1,mxREAL);
amxGetPr(plhs[0]);
b*(mxGetPr(prhs[0]));
c*(mxGetPr(prhs
matlab如何定義函數(shù)輸入?
));*aadd(b,c);
}
mexFunction的內容是什么意思呢?我們很清楚,如果沒有那樣的話調用函數(shù)時:
outputadd(1.1,2.2);
在未涉及具體一點的計算時,parameters的值是未知的,是未變量定義的。因為在具體詳細的程序中,我們成立一個1x1的實slip矩陣(可以使用mxCreateDoubleMatrix函數(shù),其前往指向剛確立的mxArray的指針),接著令plhs[0]指向它。緊接著令指針a打向plhs[0]所正指向的mxArray的第一個元素(可以使用mxGetPr函數(shù),返回對準mxArray的首元素的指針)。同時地,我們把prhs[0]和prhs
matlab如何定義函數(shù)輸入?
所對準的元素(即1.1和2.2)取出賦給b和c。索性我們也可以把b和c作自變量傳給函數(shù)add,不出給果賦給指針a所正指向的mxArray中的元素。只不過a是朝plhs[0]所正指向的mxArray的元素,因此后來作輸出來時,plhs[0]所打向的mxArray賦值給output,則input便是已計算好的結果了。上面說的一大堆朝這打向那,什么mxArray,初學者那肯定都會被弄到頭暈眼花了。很抱歉,要弄清楚這些亂糟糟的關系,只能多看多練。
雖然mexFunction是就沒這么大簡單的,我們要對用戶的輸入自變量的個數(shù)和類型并且測試,以確保
鍵入正確。如在assign函數(shù)的例子中,用戶輸入chararray便行一種錯誤了。
從上面的講述中我們系統(tǒng)的總結出,MEX文件利用了一種接口,把C語言中的計算結果適當?shù)鼗亟oMatlab罷了吧。當我們早有用Cc語言設計的規(guī)模大程序時,大可不必在Matlab里格式化處理,只寫個接口,做成MEX文件就成了。另,在Matlab程序中的部份換算瓶頸(如循環(huán)),可是從MEX文件用C語言實現(xiàn)方法,以提高計算速度。