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