資源描述:
《matlab函數(shù)文件和腳本文件.ppt》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。
1、第五章腳本文件和函數(shù)文件本節(jié)內(nèi)容掌握腳本文件和函數(shù)文件的區(qū)別掌握函數(shù)文件的編寫和調(diào)用掌握M文件的調(diào)試方法掌握文件的打開和關(guān)閉§1M文件-腳本文件腳本文件只是一串按照用戶意圖排列而成的MATLAB指令集合,即只是簡單命令的疊加。它沒有輸入?yún)?shù),也沒有輸出參數(shù)。它運行后產(chǎn)生的變量都是全局變量,均駐留在workspace中。只要用戶不使用指令clear加以清除,或MATLAB指令窗不關(guān)閉,這些變量將一直保存在基本工作空間中。例:計算小于任意自然數(shù)n的fibonnaci數(shù)。運行文件(F5/Debug
2、Run)函數(shù)文件函數(shù)文件是一種特殊類型的運行在自己獨
3、立的工作空間的M文件,通過輸入形參表接收數(shù)據(jù),通過輸出形參返回結(jié)果到調(diào)用文件。function[輸出形參表]=fname(輸入形參表)%H1注釋行%其他注釋行……(可執(zhí)行代碼)……(return)以function開頭的一行為引導(dǎo)行,是函數(shù)定義語句,表示該M文件是一個函數(shù)文件。幫助文本的首行(H1行):用于help幫助使用和lookfor搜索幫助文本:指H1行之后到函數(shù)體之前的注釋行。包括函數(shù)的意義、各參數(shù)的意義、調(diào)用格式以及程序的作者、日期等。函數(shù)體是函數(shù)的執(zhí)行代碼,是文件主要部分。注釋:以%開頭,可出現(xiàn)在程序中任意一行,用綠色表示。編譯時會
4、被忽略,不會影響程序運行速度。例:編寫函數(shù)計算兩點之間的距離。當(dāng)函數(shù)的輸出參數(shù)多于一個時,應(yīng)該用方括號括起來,并以逗號隔開;傳遞給函數(shù)的變量不必與函數(shù)定義行中的參數(shù)同名;函數(shù)和文件的命名規(guī)則與變量命名規(guī)則相同;若保存的文件名與函數(shù)名不同,則在調(diào)用時必須使用文件名。建議:函數(shù)名與文件名應(yīng)一致(系統(tǒng)默認(rèn))注意事項函數(shù)文件運行時,MATLAB會專門為其開辟一臨時工作空間(函數(shù)空間),所有變量都存放于此。文件運行完畢后,該臨時空間以及所有中間變量就立即被清除;函數(shù)空間隨函數(shù)文件的調(diào)用而產(chǎn)生,隨調(diào)用而結(jié)束;函數(shù)文件的變量除特別聲明外均是局部變量函數(shù)運行-
5、調(diào)用注:1)函數(shù)調(diào)用時,先將實參傳遞給相應(yīng)的形參,實現(xiàn)參數(shù)傳遞,然后再執(zhí)行函數(shù)的功能。2)各實參出現(xiàn)的順序、個數(shù)應(yīng)與形參定義的順序和個數(shù)一致,否則會出錯。函數(shù)文件運行不能選中菜單Run,而是調(diào)用。[輸出實參表]=函數(shù)名(輸入實參表)函數(shù)調(diào)用的一般格式腳本文件和函數(shù)文件的區(qū)別相同:擴展名都是.m,可用文件編輯器編寫不同:1)腳本文件無輸入、輸出參數(shù);2)函數(shù)文件與指令空間只能通過輸入?yún)?shù)和輸出參數(shù)通信,中間變量不出現(xiàn);3)腳本文件產(chǎn)生的變量都是全局變量,存放在基本工作空間中;而函數(shù)文件產(chǎn)生的中間變量存放在臨時工作空間中,它隨函數(shù)的調(diào)用結(jié)束而刪除;
6、4)運行方式不同。1)以ffib.m為名存盤2)MATLAB命令窗口輸入命令:>>ffib(1000)即可求小于1000的Fibonacci數(shù)。例:編寫函數(shù)求小于任意自然數(shù)n的fibonnaci數(shù)。遞歸調(diào)用:函數(shù)調(diào)用其本身functionf=factor(n)ifn<=1f=1;elsef=factor(n-1)*nendfori=1:10fac(i)=factor(i);endfac打開文本編輯器編寫函數(shù)文件factor.m新打開一文件編輯器,在編寫的腳本文件中調(diào)用該函數(shù)文件factor.m§2函數(shù)操作參數(shù)值的傳遞函數(shù)參數(shù)數(shù)目的可調(diào)性narg
7、in/nargout:用于檢查被調(diào)用函數(shù)的輸入/輸出參數(shù)的數(shù)目-nargin:實際輸入?yún)?shù)的個數(shù)-nargout:實際輸出參數(shù)的個數(shù)在函數(shù)體內(nèi)確定輸入輸出參數(shù)后可以用條件語句確定需要執(zhí)行的操作輸入/輸出參數(shù)的可變性varagin/varargout:輸入/輸出參數(shù)列表,參數(shù)是以單元數(shù)組的形式進行傳輸functiontest(varargin)disp(['narginis'num2str(nargin)]);forv=1:numel(varargin)disp(['varargin{'num2str(v)'}is'class(varargin{
8、v})]);endtest(1,'a',uint8(32));narginis3varargin{1}isdoublevarargin{2}ischarvarargin{3}isuint8錯誤處理error:中斷函數(shù)并顯示出錯誤信息;warning:錯誤不是致命的,故繼續(xù)執(zhí)行函數(shù)并顯示出警示信息lasterror:返回最后發(fā)生的錯誤的相關(guān)信息lastwarning:返回最后發(fā)生的錯誤的警告信息局部變量和全局變量局部變量:僅存在于函數(shù)空間內(nèi)部的中間變量,影響范圍僅限于函數(shù)本身;全局變量:在腳本文件或基本工作空間中定義,它可作用于整個MATLAB工
9、作空間,所有函數(shù)都可以對其進行修改和存??;在函數(shù)內(nèi)訪問全局變量,必須首先在函數(shù)內(nèi)用global定義,而后才可以使用其他函數(shù)類型匿名函數(shù)的格式:fhan