




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
M文件函數(shù)使用MATLAB函數(shù)時(shí),例如inv,abs,angle和sqrt,MATLAB獲取傳遞給它的變量,利用所給的輸入,計(jì)算所要求的結(jié)果。然后,把這些結(jié)果返回。由函數(shù)執(zhí)行的命令,以及由這些命令所創(chuàng)建的中間變量,都是隱含的。所有可見的東西是輸入和輸出,也就是說函數(shù)是一個(gè)黑箱。這些屬性使得函數(shù)成為強(qiáng)有力的工具,用以計(jì)算命令。這些命令包括在求解一些大的問題時(shí),經(jīng)常出現(xiàn)的有用的數(shù)學(xué)函數(shù)或命令序列。由于這個(gè)強(qiáng)大的功能,MATLAB提供了一個(gè)創(chuàng)建用戶函數(shù)的結(jié)構(gòu),并以M文件的文本形式存儲(chǔ)在計(jì)算機(jī)上。MATLAB函數(shù)fliplr是一個(gè)M文件函數(shù)良好的例子。 functiony=fliplr(x) %FLIPLR Flipmatrixintheleft/rightdirection. % FLIPLR(X)returnsXwithrowpreservedandcolumnsflipped % intheleft/rightdirection. % % X=123becomes321 % 456654 % % SeealsoFLIPUD,ROT90. % Copyright(c)1984-94byTheMathWorks,Inc. [m,n]=size(x); y=x(:,n:-1:1);一個(gè)函數(shù)M文件與腳本文件類似之處在于它們都是一個(gè)有.m擴(kuò)展名的文本文件。如同腳本M文件一樣,函數(shù)M文件不進(jìn)入命令窗口,而是由文本編輯器所創(chuàng)建的外部文本文件。一個(gè)函數(shù)的M文件與腳本文件在通信方面是不同的。函數(shù)與MATLAB工作空間之間的通信,只通過傳遞給它的變量和通過它所創(chuàng)建的輸出變量。在函數(shù)內(nèi)中間變量不出現(xiàn)在MATLAB工作空間,或與MATLAB工作空間不交互。正如上面的例子所看到的,一個(gè)函數(shù)的M文件的第一行把M文件定義為一個(gè)函數(shù),并指定它的名字。它與文件名相同,但沒有.m擴(kuò)展名。它也定義了它的輸入和輸出變量。接下來的注釋行是所展示的文本,它與幫助命令:?helpfliplr相對(duì)應(yīng)。第一行幫助行稱為H1行,是由lookfor命令所搜索的行。最后,M文件的其余部分包含了MATLAB創(chuàng)建輸出變量的命令。8.1規(guī)則和屬性M文件函數(shù)必須遵循以下特定的規(guī)則。除此之外,它們有許多的重要屬性。包括:1.函數(shù)名和文件名必須相同。例如,函數(shù)fliplr存儲(chǔ)在名為fliplr.m文件中。2.MATLAB頭一次執(zhí)行一個(gè)M文件函數(shù)時(shí),它打開相應(yīng)的文本文件并將命令編輯成存儲(chǔ)器的內(nèi)部表示,以加速執(zhí)行以后所有的調(diào)用。如果函數(shù)包含了對(duì)其它M文件函數(shù)的引用,它們也同樣被編譯到存儲(chǔ)器。普通的腳本M文件不被編譯,即使它們是從函數(shù)M文件內(nèi)調(diào)用;打開腳本M文件,調(diào)用一次就逐行進(jìn)行注釋。3.在函數(shù)M文件中,到第一個(gè)非注釋行為止的注釋行是幫助文本。當(dāng)需要幫助時(shí),返回該文本。例如,?helpfliplr返回上述前八行注釋。4.第一行幫助行,名為H1行,是由lookfor命令搜索的行。5.函數(shù)可以有零個(gè)或更多個(gè)輸入?yún)⒘?。函?shù)可以有零個(gè)或更多個(gè)輸出參量。6.函數(shù)可以按少于函數(shù)M文件中所規(guī)定的輸入和輸出變量進(jìn)行調(diào)用,但不能用多于函數(shù)M文件中所規(guī)定的輸入和輸出變量數(shù)目。如果輸入和輸出變量數(shù)目多于函數(shù)M文件中function語句一開始所規(guī)定的數(shù)目,則調(diào)用時(shí)自動(dòng)返回一個(gè)錯(cuò)誤。7.當(dāng)函數(shù)有一個(gè)以上輸出變量時(shí),輸出變量包含在括號(hào)內(nèi)。例如,[V,D]=eig(A)。不要把這個(gè)句法與等號(hào)右邊的[V,D]相混淆。右邊的[V,D]是由數(shù)組V和D所組成。8.當(dāng)調(diào)用一個(gè)函數(shù)時(shí),所用的輸入和輸出的參量的數(shù)目,在函數(shù)內(nèi)是規(guī)定好的。函數(shù)工作空間變量nargin包含輸入?yún)⒘總€(gè)數(shù);函數(shù)工作空間變量nargout包含輸出參量個(gè)數(shù)。事實(shí)上,這些變量常用來設(shè)置缺省輸入變量,并決定用戶所希望的輸出變量。例如,考慮MATLAB函數(shù)linspace: functiony=linspace(d1,d2,n) %LINSPACELinearlyspacedvector. % LINSPACE(x1,x2)generatesarowvectorof100linearly % equallyspacedpointsbetweenx1andx2. % LINSPACE(x1,x2,N)generatesNpointsbetweenx1andx2. % % SeealsoLOGSPACE,:. % Copyright(c)1984-94byTheMathWorks,Inc. ifnargin==2 n=100; end y=[d1+(0:n-2)*(d2-d1)/(n-1)d2];這里,如果用戶只用兩個(gè)輸入?yún)⒘空{(diào)用linspace,例如linspace(0,10),linspace產(chǎn)生100個(gè)數(shù)據(jù)點(diǎn)。相反,如果輸入?yún)⒘康膫€(gè)數(shù)是3,例如,linspace(0,10,50),第三個(gè)參量決定數(shù)據(jù)點(diǎn)的個(gè)數(shù)。可用一個(gè)或兩個(gè)輸出參量調(diào)用的函數(shù)的一個(gè)例子是MATLAB函數(shù)size。盡管這個(gè)函數(shù)不是一個(gè)M文件函數(shù)(它是一個(gè)內(nèi)置函數(shù)),size函數(shù)的幫助文本說明了它的輸出參量的選擇。 SIZE Matrixdimensions. D=SIZE(X),forM-by-NmatrixX,returnsthetwo-element rowvectorD=[M,N]containingthenumberofrowsandcolumns inthematrix. [M,N]=SIZE(X)returnsthenumberofrowsandcolumns inseparateoutputvariables.如果函數(shù)僅用一個(gè)輸出參量調(diào)用,就返回一個(gè)二元素的行,它包含行數(shù)和列數(shù)。相反,如果出現(xiàn)兩個(gè)輸出參量,size分別返回行和列。在M文件函數(shù)里,變量nargout可用來檢驗(yàn)輸出參量的個(gè)數(shù),并按要求修正輸出變量的創(chuàng)建。9.當(dāng)一個(gè)函數(shù)說明一個(gè)或多個(gè)輸出變量,但沒有要求輸出時(shí),就簡單地不給輸出變量賦任何值。MATLAB函數(shù)toc闡明了這個(gè)屬性。 functiont=toc %TOC Readthestopwatchtimer. % TOC,byitself,printstheelapsedtimesinceTICwasused. % t=TOC;savestheelapsedtimeint,insteadofprintingitout. % % SeealsoTIC,ETIME,CLOCK,CPUTIME. % Copyright(c)1984-94byTheMathWorks,Inc. %TOCusesETIMEandthevalueofCLOCKsavedbyTIC. globalTICTOC ifnargout<1 elapsed_time=etime(clock,TICTOC) else t=etime(clock,TICTOC); end如果用戶用不以輸出參量調(diào)用toc,例如,?toc,就不指定輸出變量t的值,函數(shù)在命令窗口顯示函數(shù)工作空間變量elapsed_time,但在MATLAB工作空間里不創(chuàng)建變量。相反,如果toc是以?out=toc調(diào)用,則按變量out將消逝的時(shí)間返回到命令窗口。10.函數(shù)有它們自己的專用工作空間,它與MATLAB的工作空間分開。函數(shù)內(nèi)變量與MATLAB工作空間之間唯一的聯(lián)系是函數(shù)的輸入和輸出變量。如果函數(shù)任一輸入變量值發(fā)生變化,其變化僅在函數(shù)內(nèi)出現(xiàn),不影響MATLAB工作空間的變量。函數(shù)內(nèi)所創(chuàng)建的變量只駐留在函數(shù)的工作空間,而且只在函數(shù)執(zhí)行期間臨時(shí)存在,以后就消失。因此,從一個(gè)調(diào)用到下一個(gè)調(diào)用,在函數(shù)工作空間變量存儲(chǔ)信息是不可能的。(然而,如下所述,使用全局變量就提供這個(gè)特征。)11.如果一個(gè)預(yù)定的變量,例如,pi,在MATLAB工作空間重新定義,它不會(huì)延伸到函數(shù)的工作空間。逆向有同樣的屬性,即函數(shù)內(nèi)的重新定義變量不會(huì)延伸到MATLAB的工作空間中。12.當(dāng)調(diào)用一個(gè)函數(shù)時(shí),輸入變量不會(huì)拷貝到函數(shù)的工作空間,但使它們的值在函數(shù)內(nèi)可讀。然而,改變輸入變量內(nèi)的任何值,那么數(shù)組就拷貝到函數(shù)工作空間。進(jìn)而,按缺省,如果輸出變量與輸入變量相同,例如,函數(shù)x=fun(x,y,z)中的x,那么就將它拷貝到函數(shù)的工作空間。因此,為了節(jié)約存儲(chǔ)和增加速度,最好是從大數(shù)組中抽取元素,然后對(duì)它們作修正,而不是使整個(gè)數(shù)組拷貝到函數(shù)的工作空間。13.如果變量說明是全局的,函數(shù)可以與其它函數(shù)、MATLAB工作空間和遞歸調(diào)用本身共享變量。為了在函數(shù)內(nèi)或MATLAB工作空間中訪問全局變量,在每一個(gè)所希望的工作空間,變量必須說明是全局的。全局變量使用的例子可以在MATLAB函數(shù)tic和toc中看到,它們合在一起工作如一個(gè)跑表。 functiontic %TIC Startastopwatchtimer. % Thesequenceofcommands % TIC % anystuff % TOC % printsthetimerequiredforthestuff. % % SeealsoTOC,CLOCK,ETIME,CPUTIME. % Copyright(c)1984-94byTheMathWorks,Inc. %TICsimplystoresCLOCKinaglobalvariable. globalTICTOC TICTOC=clock; functiont=toc %TOC Readthestopwatchtimer. % TOC,byitself,printstheelapsedtimesinceTICwasused. % t=TOC;savestheelapsedtimeint,insteadofprintingitout. % % SeealsoTIC,ETIME,CLOCK,CPUTIME. % Copyright(c)1984-94byTheMathWorks,Inc. %TOCusesETIMEandthevalueofCLOCKsavedbyTIC. globalTICTOC ifnargout<1 elapsed_time=etime(clock,TICTOC) else t=etime(clock,TICTOC); end在函數(shù)tic中,變量TICTOC說明為全局的,因此它的值由調(diào)用函數(shù)clock來設(shè)定。以后在函數(shù)toc中,變量TICTOC也說明為全局的,讓toc訪問存儲(chǔ)在TICTOC中的值。利用這個(gè)值,toc計(jì)算自執(zhí)行函數(shù)tic以來消逝的時(shí)間。值得注意的是,變量TICTOC存在于tic和toc的工作空間,而不在MATLAB工作空間。14.實(shí)際編程中,無論什么時(shí)候應(yīng)盡量避免使用全局變量。要是用了全局變量,建議全局變量名要長,它包含所有的大寫字母,并有選擇地以首次出現(xiàn)的M文件的名字開頭。如果遵循建議,則在全局變量之間不必要的互作用減至最小。例如,如果另一函數(shù)或MATLAB工作空間說明TICTOC為全局的,那么它的值在該函數(shù)或MATLAB工作空間內(nèi)可被改變,而函數(shù)toc會(huì)得到不同的、可能是無意義的結(jié)果。15.MATLAB以搜尋腳本文件的同樣方式搜尋函數(shù)M文件。例如,輸入?cow,MATLAB首先認(rèn)為cow是一個(gè)變量。如果它不是,那么MATLAB認(rèn)為它是一個(gè)內(nèi)置函數(shù)。如果還不是,MATLAB檢查當(dāng)前cow.m的目錄或文件夾。如果它不存在,MATLAB就檢查cow.m在MATLAB搜尋路徑上的所有目錄或文件夾。如需要更多的信息,請(qǐng)參閱本書的2.10節(jié)或MATLAB用戶指南中“MATLAB搜尋路徑”。16.從函數(shù)M文件內(nèi)可以調(diào)用腳本文件。在這種情況下,腳本文件查看函數(shù)工作空間,不查看MATLAB工作空間。從函數(shù)M文件內(nèi)調(diào)用的腳本文件不必用調(diào)用函數(shù)編譯到內(nèi)存。函數(shù)每調(diào)用一次,它們就被打開和解釋。因此,從函數(shù)M文件內(nèi)調(diào)用腳本文件減慢了函數(shù)的執(zhí)行。17.函數(shù)可以遞歸調(diào)用。即M文件函數(shù)能調(diào)用它們本身。例如,考慮一個(gè)傻函數(shù)iforgot: functioniforgot(n) %IFORGOTRecursiveFunctionCallExample %Copyright(c)1996byPrentice-Hall,Inc ifnargin==0,n=20;end ifn>1 disp('Iwillremembertodomyhomework.') iforgot(n-1) else disp('MaybeNOT!') end調(diào)用這個(gè)函數(shù)產(chǎn)生 ?iforgot(10) Iwillremembertodomyhomework. Iwillremembertodomyhomework. Iwillremembertodomyhomework. Iwillremembertodomyhomework. Iwillremembertodomyhomework. Iwillremembertodomyhomework. Iwillremembertodomyhomework. Iwillremembertodomyhomework. Iwillremembertodomyhomework. MaybeNOT!遞歸調(diào)用函數(shù)功能在許多應(yīng)用場合是有用的。在編制要遞歸調(diào)用的函數(shù)時(shí),必須確保會(huì)終止,否則MATLAB會(huì)陷入死循環(huán)。最后,在一個(gè)遞歸函數(shù)內(nèi),如果變量說明是全局的,則該全局變量對(duì)以后所有函數(shù)調(diào)用是可用的。在這個(gè)意義下,全局變量變成靜態(tài)的,并在函數(shù)調(diào)用之間不會(huì)消失。18.當(dāng)函數(shù)M文件到達(dá)M文件終點(diǎn),或者碰到返回命令return,就結(jié)束執(zhí)行和返回。return命令提供了一種結(jié)束一個(gè)函數(shù)的簡單方法,而不必到達(dá)文件的終點(diǎn)。19.MATLAB函數(shù)error在命令窗口顯示一個(gè)字符串,放棄函數(shù)執(zhí)行,把控制權(quán)返回給鍵盤。這個(gè)函數(shù)對(duì)提示函數(shù)使用不當(dāng)很有用,如在以下文件片段中: iflength(val)>1 error('VALmustbeascalar.') end這里,如果變量val不是一個(gè)標(biāo)量,error顯示消息字符串,把控制權(quán)返回給命令窗口和鍵盤。20.當(dāng)一個(gè)函數(shù)的輸入?yún)⒘康膫€(gè)數(shù)超出了規(guī)定的范圍,MATLAB函數(shù)nargchk提供了統(tǒng)一的響應(yīng)。函數(shù)nargchk給定為: functionmsg=nargchk(low,high,number) %NARGCHKChecknumberofinputarguments. % Returnerrormessageifnotbetweenlowandhigh. % Ifitis,returnemptymatrix. % Copyright(c)1984-94byTheMathWorks,Inc. msg=[]; if(number<low) msg='Notenoughinputarguments.'; elseif(number>high) msg='Toomanyinputarguments.'; end下列的文件片段表明了在一個(gè)M文件函數(shù)內(nèi)的典型用法:error(nargchk(nargin,2,5))如上所示,如果nargin的值小于2,函數(shù)error象前面描述的那樣進(jìn)行處理,nargchk返回字符串‘沒有足夠的輸入?yún)⒘俊!?。如果nargin的值大于5,函數(shù)error執(zhí)行處理,nargchk返回字符串‘太多輸入?yún)⒘?。’。如果nargin是在2和5之間,函數(shù)error簡單地將控制傳遞給下一個(gè)語句,nargchk返回一個(gè)空字符串。也就是說,當(dāng)它的輸入?yún)⒘繛榭?,error函數(shù)什么也不做。21.當(dāng)MATLAB運(yùn)行時(shí),它緩存了(caches)存儲(chǔ)在Toolbox子目錄和Toolbox目錄內(nèi)的所有子目錄中所有的M文件的名字和位置。這使MATLAB很快地找到和執(zhí)行函數(shù)M文件。也使得命令lookfor工作更快。被緩存的M文件函數(shù)當(dāng)作是只讀的。如果執(zhí)行這些函數(shù),以后又發(fā)生變化,MATLAB將只執(zhí)行以前編譯到內(nèi)存的函數(shù),不管已改變的M文件。而且,在MATLAB執(zhí)行后,如果M文件被加到Toolbox目錄中,那么它們將不出現(xiàn)在緩存里,因此不可利用。所以,在M文件函數(shù)的使用中,最好把它們存儲(chǔ)在Toolbox目錄外,或許最好存儲(chǔ)在MATLAB目錄下,直至它們被認(rèn)為是完備的(complete)。當(dāng)它們是完備時(shí),就將它們移到一個(gè)只讀的Toolbox目錄或文件夾的子目錄內(nèi)。最后,要確保MATLAB搜索路徑改變,以確認(rèn)它們的存在。22.在Toolbox目錄外,MATLAB跟蹤M文件的修改日期。所以,當(dāng)遇到一個(gè)以前編譯到內(nèi)存的M文件函數(shù)時(shí),MATLAB把已編譯的M文件的修改日期與在磁盤上的M文件比較。如果日期是相同的,MATLAB執(zhí)行已編譯的M文件。相反,如果在磁盤上的M文件是新的,MATLAB清除以前已編譯的M文件,且編譯這個(gè)新的和修改過的M文件。23.M文件的緩存過程按MATLAB版本而稍有不同。例如,MATLAB4.2c在Macintosh機(jī)上同樣可以緩存當(dāng)前的目錄,因?yàn)檫@是第一個(gè)所搜索的磁盤位置。這個(gè)MATLAB版本也允許有選擇地將整個(gè)MATLAB搜索路徑緩存,并把高速緩存信息存儲(chǔ)在一個(gè)文件中。這樣,使MATLAB引導(dǎo)更快,尋找和編譯所有函數(shù)M文件更快。退出緩存,不檢測已修改的或已增加的M文件。當(dāng)新的M文件加到一個(gè)緩存區(qū)時(shí),只有當(dāng)高速緩存由命令?path刷新時(shí),MATLAB才能找到它們;另一方面,當(dāng)修改緩存的M文件時(shí),只有當(dāng)以前編譯過的版本由clea
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司倉庫升級(jí)方案(3篇)
- 商鋪踏步改造方案(3篇)
- 工程項(xiàng)目資金管理制度
- 列車物資配送管理制度
- 裝卸服務(wù)投標(biāo)方案(3篇)
- 宣威學(xué)校安全管理制度
- 小區(qū)保安工位管理制度
- 國企財(cái)務(wù)職工管理制度
- 啟動(dòng)電源檢修方案(3篇)
- 完善政府績效管理制度
- 深圳市城市規(guī)劃標(biāo)準(zhǔn)與準(zhǔn)則2024版
- 《低空經(jīng)濟(jì)及其產(chǎn)業(yè)發(fā)展-把握機(jī)會(huì)、布局未來》課件
- 我們的節(jié)日-端午
- 工貿(mào)培訓(xùn)課件
- 四川省2024年中考物理試題13套附解析答案
- 第1單元班級(jí)衛(wèi)生大掃除(教案)-三年級(jí)上冊(cè)勞動(dòng)魯科版
- 鋁合金造型施工方案
- 肱骨外上髁炎的健康宣教
- 交警執(zhí)勤執(zhí)法安全課件
- 內(nèi)墻涂料施工方案
- 委托取水許可驗(yàn)收合同(2篇)
評(píng)論
0/150
提交評(píng)論