matlab函數(shù)中怎么調(diào)用另一個(gè)函數(shù) matlab函數(shù)怎么同時(shí)返回兩個(gè)值?
matlab函數(shù)怎么同時(shí)返回兩個(gè)值?哈哈,俺知道了!z4的后邊加上分號(hào);就再說(shuō)。z4(L^2/roul/sgm/on)^0.2;因?yàn)槟銊?dòng)態(tài)鏈接庫(kù)時(shí),是想執(zhí)行a_2。同時(shí)不顯示出去了。在matlab中怎
matlab函數(shù)怎么同時(shí)返回兩個(gè)值?
哈哈,俺知道了!
z4的后邊加上分號(hào);就再說(shuō)。z4(L^2/roul/sgm/on)^0.2;因?yàn)槟銊?dòng)態(tài)鏈接庫(kù)時(shí),是想執(zhí)行a_2。同時(shí)不顯示出去了。
在matlab中怎么直接調(diào)用函數(shù)?
1.然后打開(kāi)matlab2012b,直接點(diǎn)擊【funscript】,直接進(jìn)入m文件編輯區(qū)。
2.先再點(diǎn)【New】,再在下拉選項(xiàng)中你選擇【script】。
3.進(jìn)入m文件編輯區(qū),文件設(shè)置為名為:Untitled,即:未命名的。
4.在編輯區(qū)窗口定義方法要?jiǎng)?chuàng)建的函數(shù)。在這里我們編輯個(gè)函數(shù):functionyraicos(t)y1/2*(1cos(pi*t)).*(t
MATLAB里怎樣定義函數(shù)并保存?
怎么把變量保存到到工作空間(在兩次仿真中參數(shù)不變,那是一個(gè)變量)
assignin(#39base#39,#39A#39,#39x(1)#39)%……并非要是三角形的三邊的具體數(shù)才可以不用這個(gè)函數(shù)的
2、simulink模型怎末從工作空間內(nèi)部函數(shù)定義好的參數(shù)(是一個(gè)數(shù),不與時(shí)間查找)
matlab中input函數(shù)使用方法和實(shí)例?
1、簡(jiǎn)單推薦這個(gè)求乘函數(shù)的prod的語(yǔ)法格式,空間四邊形。
2、現(xiàn)在修改一個(gè)向量和一個(gè)矩陣。
3、先說(shuō)一下麻煩問(wèn)下一維矩陣(向量)的使用。
4、說(shuō)看看按行相乘的使用。
5、之后實(shí)驗(yàn)輸入input{0.9-a81,1.2-a82,1.5-rlm3,2.8-a84,3.9-dstrok6}pPredict。
6、基本上使用方法是Predict,a為那個(gè)的,b為指向的輸入后按shiftenter,會(huì)不自動(dòng)可以使用一種預(yù)測(cè)函數(shù)。就成功了。
matlab調(diào)用c語(yǔ)言?
如果我有一個(gè)用C語(yǔ)言寫(xiě)的函數(shù),基于了一個(gè)功能,如一個(gè)簡(jiǎn)單的函數(shù):
doubleadd(doublex,doubley){
returnxy;
}
現(xiàn)在我想要在Matlab中建議使用它,例如輸入輸入:
aadd(1.1,2.2)
3.3000
要得出的結(jié)論以上的結(jié)果,那估計(jì)怎么做呢?
解決方法之一是要按照可以使用MEX文件,MEX文件令調(diào)用C函數(shù)和動(dòng)態(tài)鏈接庫(kù)Matlab的內(nèi)置函數(shù)一樣更方便。MEX文件是由原C代碼另外MEX文件使用說(shuō)明的接口函數(shù)后編譯器而成的。
是可以這樣的理解,MEX文件實(shí)現(xiàn)了一種接口,它把在Matlab中調(diào)用函數(shù)時(shí)然后輸入的自變量是從某一特定的接口調(diào)入了C函數(shù),結(jié)論的結(jié)果再該接口調(diào)回來(lái)Matlab。該特定的事件接口的操作,真包含在mexFunction這個(gè)函數(shù)中,由使用者具體詳細(xì)設(shè)定。
因此現(xiàn)在我們要寫(xiě)一個(gè)包含add和mexFunction的C文件,Matlab調(diào)用函數(shù),把函數(shù)中的自變量(睽車(chē)志例中的1.1和2.2)傳mexFunction的一個(gè)參數(shù),mexFunction把該值傳給add,把結(jié)論的結(jié)果收到消息給mexFunction的另一個(gè)參數(shù),Matlab是從該參數(shù)來(lái)能提供在Matlab語(yǔ)句中調(diào)用函數(shù)時(shí)的輸出值(如本例中的a)。
諸如該C文件已寫(xiě)好,名為add.c。那你在Matlab中,輸入輸入:
mexadd.c
就能把a(bǔ)dd.c編譯器為MEX文件(編譯器的設(shè)置不使用指令mex-setup),在Windows中,MEX文件類(lèi)型為mexw32,即現(xiàn)在我們得出來(lái)文件?,F(xiàn)在,我們就是可以像動(dòng)態(tài)創(chuàng)建M函數(shù)那樣的話動(dòng)態(tài)鏈接庫(kù)MEX文件,如上面說(shuō)著的例子。因此,實(shí)際MEX文件,不使用C函數(shù)就和在用M函數(shù)是差不多的了。
我們現(xiàn)在來(lái)說(shuō)mexFunction怎樣寫(xiě)。
mexFunction的定義為:
voidmexFunction(
intnlhs,
mxArray*plhs[],
intnrhs,
constmxArray*prhs[]){
}
可以找到,mexFunction是沒(méi)返回值的,它又不是實(shí)際返回值把結(jié)果傳去Matlab的,完全是對(duì)參數(shù)plhs的賦值。mexFunction的四個(gè)參數(shù)皆是那說(shuō)明Matlab動(dòng)態(tài)鏈接庫(kù)MEX文件時(shí)的具體一點(diǎn)信息,如這樣調(diào)用函數(shù)時(shí):
b1.1;c2.2;
aadd(b,c)
mexFunction四個(gè)參數(shù)的意思為:
nlhs1,說(shuō)明動(dòng)態(tài)鏈接庫(kù)語(yǔ)句左手面(lhs-lefthandside)有一個(gè)變量,即a。
nrhs2,只能說(shuō)明調(diào)用語(yǔ)句右手面(rhs-righthandside)有兩個(gè)自變量,即b和c。
plhs是一個(gè)數(shù)組,其內(nèi)容為指針,該指針指向數(shù)據(jù)類(lèi)型mxArray。只不過(guò)現(xiàn)在左手面唯有一個(gè)變量,即該數(shù)組僅有一個(gè)指針,plhs[0]正指向的結(jié)果會(huì)定義變量給a。
prhs和plhs類(lèi)似,畢竟右手面有兩個(gè)自變量,即該數(shù)組有兩個(gè)指針,prhs[0]正指向了b,prhs
matlab函數(shù)怎么同時(shí)返回兩個(gè)值?
指向了c。要盡量prhs是const的指針數(shù)組,即沒(méi)法變化其打向內(nèi)容。因?yàn)镸atlab最基本的單元為array,不論是什么類(lèi)型還好,如有doublearray、cellarray、structarray……所以a,b,c大都array,b1.1葉白一個(gè)1x1的doublearray。而在C語(yǔ)言中,Matlab的array建議使用mxArray類(lèi)型來(lái)表示。因?yàn)榫筒浑y清楚為啥plhs和prhs大都朝mxArray類(lèi)型的指針數(shù)組。
發(fā)下的add.c::
//omit.c
#includemex.h//使用MEX文件需要中有的頭文件
//不能執(zhí)行具體工作的C函數(shù)
doubleadd(doublex,doubley){
returnxy;
}
//MEX文件接口函數(shù)
voidmexFunction(
intnlhs,
mxArray*plhs[],
intnrhs,
constmxArray*prhs[]){
soft*a;
doubleb,c;
plhs[0]mxCreateDoubleMatrix(1,1,mxREAL);
amxGetPr(plhs[0]);
b*(mxGetPr(prhs[0]));
c*(mxGetPr(prhs
matlab函數(shù)怎么同時(shí)返回兩個(gè)值?
));*aadd(b,c);
}
mexFunction的內(nèi)容是什么意思呢?我們明白了,如果沒(méi)有那樣調(diào)用函數(shù)時(shí):
outputadd(1.1,2.2);
在未牽涉到具體詳細(xì)的計(jì)算時(shí),output的值是未知的,是未變量的。因?yàn)樵诰唧w詳細(xì)的程序中,我們成立一個(gè)1x1的實(shí)extra矩陣(建議使用mxCreateDoubleMatrix函數(shù),其前往打向剛成立的mxArray的指針),然后把令plhs[0]指向它。隨即令指針a朝plhs[0]所朝的mxArray的第一個(gè)元素(使用mxGetPr函數(shù),回正指向mxArray的首元素的指針)。雖然地,我們把prhs[0]和prhs
matlab函數(shù)怎么同時(shí)返回兩個(gè)值?
所指向的元素(即1.1和2.2)取出去賦給b和c。隨后我們可以把b和c作自變量傳函數(shù)set,得出的結(jié)論給果賦給指針a所打向的mxArray中的元素。只不過(guò)a是對(duì)準(zhǔn)plhs[0]所指向的mxArray的元素,所以才后來(lái)作控制輸出時(shí),plhs[0]所朝的mxArray定義變量給output,則inputs葉白已計(jì)算出好的結(jié)果了。上面說(shuō)的一大堆打向這朝那,什么mxArray,初學(xué)者估計(jì)都會(huì)被弄到頭暈?zāi)垦A?。很抱歉啊,要弄清楚這些亂得的關(guān)系,僅有多看多練。
只不過(guò)mexFunction是還沒(méi)有這么大很簡(jiǎn)單,我們要對(duì)用戶的輸入自變量的個(gè)數(shù)和類(lèi)型通過(guò)測(cè)試,以必須保證
再輸入正確的。如在omit函數(shù)的例子中,用戶輸入chararray老祖一種錯(cuò)誤了。
從上面的講述中我們總結(jié)出,MEX文件基于了一種接口,把C語(yǔ)言中的計(jì)算結(jié)果盡量多地前往給Matlab罷了。當(dāng)我們?cè)缇陀杏肅c語(yǔ)言程序的規(guī)模很大程序時(shí),大可不必在Matlab里寫(xiě)回,只寫(xiě)個(gè)接口,先做成MEX文件就成了。另,在Matlab程序中的部份計(jì)算出瓶頸(如運(yùn)行),可按照MEX文件用C語(yǔ)言實(shí)現(xiàn),以提高計(jì)算速度。