ch07.MATLAB2007程序設計_第1頁
ch07.MATLAB2007程序設計_第2頁
ch07.MATLAB2007程序設計_第3頁
ch07.MATLAB2007程序設計_第4頁
ch07.MATLAB2007程序設計_第5頁
已閱讀5頁,還剩70頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設計 第1頁 第第7章章 MATLAB 2007程序設計程序設計 MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 教學目標 教學重點 教學內容 MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設計 第2頁 教學目標 l熟悉熟悉 MATLAB 的編程環境的編程環境 l掌握掌握 MATLAB 的變量類型的變量類型 l掌握掌握 MATLAB 中的流程控制語句中的流程控制語句

2、l掌握掌握 MATLAB 的函數類型和函數操作的函數類型和函數操作 l了解了解 MATLAB 中的錯誤處理中的錯誤處理 l了解了解 MATLAB 程序調試方法程序調試方法 l了解了解 MATLAB 代碼優化方法代碼優化方法 MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設計 第3頁 教學重點 lMATLAB 的編程環境的編程環境 lMATLAB 的變量類型的變量類型 lMATLAB 中的流程控制語句中的流程控制語句 lMATLAB 的函數類型和函數操作的函數類型和函數操作 l MATLAB 程序調試方法程序調試方法

3、 MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設計 第4頁 教學內容 lM文本文件介紹文本文件介紹 l函數流程控制函數流程控制 l函數變量函數變量 l函數類型函數類型 l函數操作函數操作 lMATLAB 編程錯誤處理編程錯誤處理 l程序設計的輔助函數程序設計的輔助函數 l調試程序調試程序 l優化程序優化程序 MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設計 第5頁 M文本文件介紹文本文件介紹 l一個一個 M 文件通常包含五個部分,函

4、數定義語句、文件通常包含五個部分,函數定義語句、H1 幫助幫助 行、幫助文本、函數體或者腳本文件語句和注釋語句。行、幫助文本、函數體或者腳本文件語句和注釋語句。 H1 行為緊隨函數定義語句后面的一行注釋語句。當用戶行為緊隨函數定義語句后面的一行注釋語句。當用戶 通過通過 help 命令查詢該函數的說明信息時命令查詢該函數的說明信息時 H1 行顯示為第行顯示為第 一行,另外一行,另外 lookfor 函數只檢索和顯示函數只檢索和顯示 H1 行。幫助文本行。幫助文本 為為 H1 行后面連續的注釋行,當在命令窗口中通過行后面連續的注釋行,當在命令窗口中通過 help 命令查詢該函數的說明信息時則在窗

5、口中顯示這些內容。命令查詢該函數的說明信息時則在窗口中顯示這些內容。 函數體為函數體為 M 文件的主要部分,是函數的執行代碼。除上文件的主要部分,是函數的執行代碼。除上 面的面的 H1 行和幫助文本外,為了易于理解,可以在書寫代行和幫助文本外,為了易于理解,可以在書寫代 碼時添加注釋語句。這些注釋語句在編譯程序時會被忽略,碼時添加注釋語句。這些注釋語句在編譯程序時會被忽略, 因此不會影響編譯速度和程序運行速度,但是能夠增加程因此不會影響編譯速度和程序運行速度,但是能夠增加程 序的可讀性。序的可讀性。 MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 c

6、h07.MATLAB2007程序設計 第6頁 l一個完整的一個完整的 M 文件的結構為:文件的結構為: function f = fact(n) 函數定義語句函數定義語句 % Compute a factorial value. H1 行行 % FACT(N) returns the factorial of N, 幫助文本幫助文本 % usually denoted by N! % Put simply, FACT(N) is PROD(1:N). 注釋語句注釋語句 f = prod(1:n); 函數體函數體 l函數定義語句只在函數文件中存在,定義函數名函數定義語句只在函數文件中存在,定義函

7、數名 稱、輸入輸出參數的數量和順序。函數定義語句稱、輸入輸出參數的數量和順序。函數定義語句 的格式為:的格式為: function y = fact(x)。 MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設計 第7頁 l函數式函數式M文件文件 l函數式函數式 M 文件比腳本式文件比腳本式 M 文件相對復雜一些,腳本文件文件相對復雜一些,腳本文件 不需要自帶參數,也不一定返回結果,而函數文件一般要不需要自帶參數,也不一定返回結果,而函數文件一般要 自帶參數,并且有返回結果,以便于更好的把整個程序連自帶參數,并且有返回

8、結果,以便于更好的把整個程序連 為一段。函數文件也可以不帶參數,此時文件中一般使用為一段。函數文件也可以不帶參數,此時文件中一般使用 一些全局變量來實現與外界和其他函數之間的數據交換。一些全局變量來實現與外界和其他函數之間的數據交換。 l函數文件的第一行以函數文件的第一行以 function 開始,說明此文件是一個開始,說明此文件是一個 函數。其實質為用戶向函數。其實質為用戶向 MATLAB 函數庫中添加的子函數。函數庫中添加的子函數。 在默認情況下,函數文件中的變量都是局部變量,僅在函在默認情況下,函數文件中的變量都是局部變量,僅在函 數運行期間有效,函數運行結束后,這些變量將從工作區數運行

9、期間有效,函數運行結束后,這些變量將從工作區 中清除。中清除。 MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設計 第8頁 函數流程控制函數流程控制 l順序結構順序結構 l判斷語句(判斷語句(ifelseend) l分支語句分支語句 l循環語句循環語句 ltrycatchend語句語句 l其他流程控制函數其他流程控制函數 MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設計 第9頁 順序結構順序結構 l順序結構是最簡單的程序結構,系統在編

10、順序結構是最簡單的程序結構,系統在編 譯程序時,按照程序的物理位置順序執行。譯程序時,按照程序的物理位置順序執行。 這種程序容易編制,但是結構單一,能夠這種程序容易編制,但是結構單一,能夠 實現的功能有限。實現的功能有限。 MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設計 第10頁 判斷語句(判斷語句(ifelseend) lifend lifelseend lifelseifelseend MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007

11、程序設計 第11頁 lifend l此時的程序結構如下:此時的程序結構如下: if 表達式表達式 執行代碼塊執行代碼塊 end l這是最簡單的判斷語句,只有一個判斷語句,其這是最簡單的判斷語句,只有一個判斷語句,其 中的表達式為邏輯表達式,當表達式為真時,執中的表達式為邏輯表達式,當表達式為真時,執 行相應的語句,否則,直接跳到下一段語句。行相應的語句,否則,直接跳到下一段語句。 MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設計 第12頁 lifelseend l當程序有兩個選擇時,可以選擇當程序有兩個選擇時,可

12、以選擇 ifelseend 結構,此時程序結構為:結構,此時程序結構為: if 表達式表達式 執行代碼塊執行代碼塊1 else 執行代碼塊執行代碼塊2 end l當判斷表達式為真時,執行代碼塊當判斷表達式為真時,執行代碼塊1,否則執行,否則執行 代碼塊代碼塊2。 MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設計 第13頁 lifelseifelseend l上面的兩種形式中,分別包含一個選擇和兩個選擇,當判斷包含多個上面的兩種形式中,分別包含一個選擇和兩個選擇,當判斷包含多個 選擇時,可以采用選擇時,可以采用el

13、seif 語句,結構為:語句,結構為: if 表達式表達式1 執行代碼塊執行代碼塊1 elseif 表達式表達式2 執行代碼塊執行代碼塊2 elseif . . . else 執行代碼塊執行代碼塊 end l其中可以包含任意多個其中可以包含任意多個 elseif 語句。語句。 MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設計 第14頁 分支語句分支語句 l上一節中的上一節中的 ifelseifelseend 語句可以適用于多種語句可以適用于多種 選擇的流程控制,此時對選擇的流程控制,此時對 else之外的每一個選

14、擇語句設之外的每一個選擇語句設 置一個表達式,表達式為真時則執行該模塊。置一個表達式,表達式為真時則執行該模塊。MATLAB 中的另一種多選擇語句為分支語句。分支語句的結構為:中的另一種多選擇語句為分支語句。分支語句的結構為: switch 分支語句分支語句 case 條件語句條件語句 執行代碼塊執行代碼塊 case 條件語句條件語句1, 條件語句條件語句2, 條件語句條件語句3, . 執行代碼塊執行代碼塊 otherwise 執行代碼塊執行代碼塊 end MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設計 第15

15、頁 l其中的分支語句為一個變量,可以是數值變量或其中的分支語句為一個變量,可以是數值變量或 者字符串變量,如果該變量的值與某一條件相符,者字符串變量,如果該變量的值與某一條件相符, 則執行相應的語句,否則,執行則執行相應的語句,否則,執行 otherwise 后面后面 的語句。在每一個條件中,可以包含一個條件語的語句。在每一個條件中,可以包含一個條件語 句,可以包含多個條件,當包含多個條件時,將句,可以包含多個條件,當包含多個條件時,將 條件以單元數組的形式表示。條件以單元數組的形式表示。 lMATLAB 的分支語句類似于的分支語句類似于 C 語言的分支語句,語言的分支語句, 但是又不完全相同

16、:但是又不完全相同:MATLAB 語句從上到下依次語句從上到下依次 判斷條件,條件符合則執行相應的代碼塊,之后判斷條件,條件符合則執行相應的代碼塊,之后 退出該分支語句,因此在代碼塊后面不需要添加退出該分支語句,因此在代碼塊后面不需要添加 “break”語句。語句。 MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設計 第16頁 循環語句循環語句 lfor 語句語句 lwhile 語句語句 MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設

17、計 第17頁 1for 語句語句 lfor 語句將相同的代碼執行預定義的次數。語句將相同的代碼執行預定義的次數。 for 語句的結構為:語句的結構為: for 循環變量循環變量 = 表達式表達式 執行代碼塊執行代碼塊 end lfor 循環的語句在前面的例子中已經有所涉循環的語句在前面的例子中已經有所涉 及,上節的例子中,第二個程序中也涉及及,上節的例子中,第二個程序中也涉及 到了到了 for 循環語句。下面為循環語句。下面為 for 循環的更多循環的更多 例子。例子。 MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程

18、序設計 第18頁 2while 語句語句 lwhile 語句用于將相同的代碼塊執行多次,語句用于將相同的代碼塊執行多次, 但是次數并不預先指定,當但是次數并不預先指定,當 while 的條件的條件 表達式為真時,執行代碼塊,直到條件表表達式為真時,執行代碼塊,直到條件表 達式為假。達式為假。while 語句的結構為:語句的結構為: while 表達式表達式 執行代碼塊執行代碼塊 end MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設計 第19頁 6.2.5 trycatchend語句語句 lMATLAB 中的另一

19、種判斷語句為中的另一種判斷語句為 trycatch 語句,這種語句可以包語句,這種語句可以包 容程序運行中的錯誤,并返回錯誤類型。這種語句的結構為:容程序運行中的錯誤,并返回錯誤類型。這種語句的結構為: try 運行代碼塊運行代碼塊 catch 運行代碼塊運行代碼塊 end l該語句首先從上到下依次執行,如果遇到程序錯誤則運行下一個該語句首先從上到下依次執行,如果遇到程序錯誤則運行下一個 catch 中的語句,依次向下進行。如果程序運行成功,則退出該判斷中的語句,依次向下進行。如果程序運行成功,則退出該判斷 語句。如果在語句。如果在 catch 和和 end之間的程序運行出錯,則程序運行終止,

20、之間的程序運行出錯,則程序運行終止, 或者如果存在其他的或者如果存在其他的 trycatch 結構,則運行下一個結構,則運行下一個 trycatch 結結 構。可以利用構。可以利用 lasterr 命令查看發生錯誤的原因。命令查看發生錯誤的原因。 MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設計 第20頁 6.2.6 其他流程控制函數其他流程控制函數 lcontinue:continue 語句通常用在循環控制中,語句通常用在循環控制中, 包括包括 for 循環和循環和 while 循環,用于結束當次循環,循環,用

21、于結束當次循環, 繼續執行下一次循環,但是不結束當前循環。一繼續執行下一次循環,但是不結束當前循環。一 般般 continue 語句與語句與 if 語句相結合,當滿足一定語句相結合,當滿足一定 的條件時,執行的條件時,執行 continue 語句。語句。 lbreak:與:與 continue 相同的是,相同的是,break 函數也是函數也是 用于循環控制,中斷當前循環。與用于循環控制,中斷當前循環。與 continue 不不 同,同,break 跳出當前循環,不再執行該循環的任跳出當前循環,不再執行該循環的任 何操作。何操作。 lreturn:結束該程序的執行,返回到調用函數或:結束該程序的

22、執行,返回到調用函數或 者鍵盤。者鍵盤。 MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設計 第21頁 6.3 函數變量函數變量 l6.3.1 變量類型變量類型 l局部變量局部變量 l全局變量全局變量 l永久變量永久變量 MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設計 第22頁 局部變量局部變量 l每個函數都有自己的局部變量,這些變量存儲在該函數獨每個函數都有自己的局部變量,這些變量存儲在該函數獨 立的工作區中,與其他函數的變量及主

23、工作區中的變量分立的工作區中,與其他函數的變量及主工作區中的變量分 開存儲。當函數調用結束時,這些變量隨之刪除,不保存開存儲。當函數調用結束時,這些變量隨之刪除,不保存 在內存中。并且,除了函數返回值,該函數不改變工作區在內存中。并且,除了函數返回值,該函數不改變工作區 中其他變量的值。中其他變量的值。 l然而腳本文件沒有獨立的工作區,當通過命令窗口調用腳然而腳本文件沒有獨立的工作區,當通過命令窗口調用腳 本文件時,腳本文件分享主工作區,當函數調用腳本文件本文件時,腳本文件分享主工作區,當函數調用腳本文件 時,腳本文件分享主調函數的工作區。需要注意的是,如時,腳本文件分享主調函數的工作區。需要

24、注意的是,如 果腳本中改變了工作區中變量的值,則在腳本文件調用結果腳本中改變了工作區中變量的值,則在腳本文件調用結 束后,該變量的值發生改變。束后,該變量的值發生改變。 l在函數中,變量默認為局部變量。在函數中,變量默認為局部變量。 MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設計 第23頁 全局變量全局變量 l局部變量只在一個工作區內有效,無論是函數工作區還是局部變量只在一個工作區內有效,無論是函數工作區還是 MATLAB 主工作區。與局部變量不同,全局變量可以在主工作區。與局部變量不同,全局變量可以在 定義該

25、變量的全部工作區中有效。當在一個工作區內改變定義該變量的全部工作區中有效。當在一個工作區內改變 該變量的值時,該變量在其他工作區中的變量同時改變。該變量的值時,該變量在其他工作區中的變量同時改變。 l任何函數如果需要使用全局變量,則必須首先聲明,聲明任何函數如果需要使用全局變量,則必須首先聲明,聲明 格式為:格式為: global 變量名變量名1 變量名變量名2 l如果一個如果一個 M 文件中包含的子函數需要訪問全局變量,則文件中包含的子函數需要訪問全局變量,則 需在子函數中聲明該變量,如果需要在命令行中訪問該變需在子函數中聲明該變量,如果需要在命令行中訪問該變 量,則需在命令行中聲明該變量。

26、量,則需在命令行中聲明該變量。 MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設計 第24頁 永久變量永久變量 l除局部變量和全局變量外,除局部變量和全局變量外,MATLAB 中還有一種中還有一種 變量類型為永久變量。永久變量的特點為:變量類型為永久變量。永久變量的特點為: 只能在只能在 M 文件內部定義;文件內部定義; 只有該變量從屬的函數能夠訪問該變量;只有該變量從屬的函數能夠訪問該變量; 當函數運行結束時,該變量的值保留在內存中,因此當函數運行結束時,該變量的值保留在內存中,因此 當該函數再次被調用時,可以再

27、次利用這些變量。當該函數再次被調用時,可以再次利用這些變量。 l永久變量的定義方法為:永久變量的定義方法為: persistent 變量名變量名1 變量名變量名2。 MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設計 第25頁 6.4 函數類型函數類型 l6.4.1 匿名函數匿名函數 l6.4.2 主函數主函數 l6.4.3 子函數子函數 l6.4.4 嵌套函數嵌套函數 l6.4.5 私有函數私有函數 l6.4.6 重載函數重載函數 MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/

28、2021 ch07.MATLAB2007程序設計 第26頁 匿名函數匿名函數 l關于匿名函數在前面關于匿名函數在前面“MATLAB 的數學運算的數學運算”一章中已一章中已 有初步涉及,在有初步涉及,在“函數運算函數運算”一節的示例中用到了大量的一節的示例中用到了大量的 匿名函數。本節對匿名函數做進一步的介紹。匿名函數。本節對匿名函數做進一步的介紹。 l匿名函數提供了一種創建簡單程序的方法,使用它用戶可匿名函數提供了一種創建簡單程序的方法,使用它用戶可 以不必每次都編寫以不必每次都編寫 M 文件。用戶可以在文件。用戶可以在 MATLAB 的命令的命令 窗口或是其他任意窗口或是其他任意 M 文件和

29、腳本文件中使用匿名函數。文件和腳本文件中使用匿名函數。 l匿名函數的格式為:匿名函數的格式為: fhandle = (arglist) expr l其中其中 fhandle 是為該函數創建的函數句柄;是為該函數創建的函數句柄; 符號用于符號用于 創建函數句柄;創建函數句柄;arglist 為用逗號分隔的參數列表;為用逗號分隔的參數列表;expr 為函數主體,為為函數主體,為 MATLAB 表達式。表達式。 MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設計 第27頁 主函數主函數 l通常每個通常每個 M 文件中的第

30、一個函數為主函數,文件中的第一個函數為主函數, 主函數可以被該文件之外的其他函數調用,主函數可以被該文件之外的其他函數調用, 而子函數只能被該文件內的函數調用。主而子函數只能被該文件內的函數調用。主 函數的調用通過存儲該函數的函數的調用通過存儲該函數的 M 文件的文文件的文 件名調用。我們在前面幾節中編寫的實驗件名調用。我們在前面幾節中編寫的實驗 程序,大多為主函數,如例程序,大多為主函數,如例 6-7。因此,這。因此,這 里不再過多介紹。里不再過多介紹。 MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設計 第28

31、頁 子函數子函數 l一個一個 M 文件中可以包括多個函數,除主函數之外文件中可以包括多個函數,除主函數之外 的其他函數稱為子函數。子函數只能被主函數或的其他函數稱為子函數。子函數只能被主函數或 該文件內的其他子函數調用。每個子函數以函數該文件內的其他子函數調用。每個子函數以函數 定義語句開頭,直至下一個函數的定義或文件的定義語句開頭,直至下一個函數的定義或文件的 結尾。結尾。 l當函數中調用函數時,系統判斷其函數類型的順當函數中調用函數時,系統判斷其函數類型的順 序為:首先判斷是否為子函數,然后判斷是否為序為:首先判斷是否為子函數,然后判斷是否為 私有函數,最后判斷其是否為當前目錄下的私有函數

32、,最后判斷其是否為當前目錄下的 M 文文 件函數或者系統內置函數。由于子函數具有最高件函數或者系統內置函數。由于子函數具有最高 的優先級別,因此,在定義子函數時,可以采用的優先級別,因此,在定義子函數時,可以采用 已有的其他外部函數的名稱。已有的其他外部函數的名稱。 MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設計 第29頁 嵌套函數嵌套函數 l一個函數內部可以定義其他的函數,這種一個函數內部可以定義其他的函數,這種 內部的函數稱作嵌套函數。內部的函數稱作嵌套函數。 l1嵌套函數的書寫嵌套函數的書寫 l定義嵌套函

33、數時,只要在一個函數內部直定義嵌套函數時,只要在一個函數內部直 接定義嵌套函數即可。需要注意的是當一接定義嵌套函數即可。需要注意的是當一 個個 M文件中存在嵌套函數時,該文件內的文件中存在嵌套函數時,該文件內的 所有函數必須以所有函數必須以 end 結尾。結尾。 MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設計 第30頁 l例例 6-14 嵌套函數的結構嵌套函數的結構 function x = A(p1, p2) . function y = B(p3) . end . end MATLAB R2007基礎教程基

34、礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設計 第31頁 l每個函數中可以嵌套多個函數。每個函數中可以嵌套多個函數。 l例例 6-15 多個平行嵌套函數多個平行嵌套函數 function x = A(p1, p2) . function y = B(p3) . end function z = C(p4) . end . end MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設計 第32頁 l在這個程序中,函數在這個程序中,函數 A 嵌套了函數嵌套了函數 B 和函數

35、和函數 C。另外,嵌套函數還。另外,嵌套函數還 可以包含嵌套函數,其結構如例可以包含嵌套函數,其結構如例 6-16。 l例例 6-16 多層嵌套函數多層嵌套函數 function x = A(p1, p2) . function y = B(p3) . function z = C(p4) . end . end . End l在這段程序中,函數在這段程序中,函數 A 嵌套了函數嵌套了函數 B,函數,函數 B 嵌套了函數嵌套了函數 C。 MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設計 第33頁 l2嵌套函數的調

36、用嵌套函數的調用 l一個嵌套函數可以被下列函數調用:一個嵌套函數可以被下列函數調用: (1)該嵌套函數的上一層函數,如上面例)該嵌套函數的上一層函數,如上面例 6- 13 中函數中函數 A 可以調用函數可以調用函數 B,函數,函數 B 可以調可以調 用函數用函數 C,但是函數,但是函數 A 不能調用函數不能調用函數 C; (2)同一母函數下的同級嵌套函數,如上面)同一母函數下的同級嵌套函數,如上面 例例 6-12 中函數中函數 B 可以調用函數可以調用函數 C; (3)被任一低級別的函數調用。)被任一低級別的函數調用。 MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4

37、/20/2021 ch07.MATLAB2007程序設計 第34頁 l在這段程序中,函數在這段程序中,函數 A 包含了嵌套函數包含了嵌套函數 B 和嵌套和嵌套 函數函數 D,函數,函數 B 和函數和函數 D 分別嵌套了函數分別嵌套了函數 C 和和 函數函數 E。這段程序中函數間的調用關系為:。這段程序中函數間的調用關系為: (1)函數)函數 A 為主函數,可以調用函數為主函數,可以調用函數 B 和函數和函數 D, 但是不能調用函數但是不能調用函數 C 和函數和函數 E; (2)函數)函數 B 和函數和函數 D 為一級嵌套函數,為一級嵌套函數,B 可以調用可以調用 函數函數 D 和函數和函數 C

38、,但是不能調用函數,但是不能調用函數 E;D 可以調用可以調用 函數函數 B 和函數和函數 E,但是不能調用,但是不能調用 C; (3)函數)函數 C 和函數和函數 E 為分屬兩個函數的嵌套函數,為分屬兩個函數的嵌套函數, 可以調用函數可以調用函數 B 和函數和函數 D,但是不能互相調用。,但是不能互相調用。 MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設計 第35頁 私有函數私有函數 l私有函數是私有函數是 MATLAB 中的另一類函數,這類函中的另一類函數,這類函 數位于名為數位于名為“private”的子文

39、件夾中,只能被上的子文件夾中,只能被上 一級文件夾中的函數或者這些函數所調用的一級文件夾中的函數或者這些函數所調用的 M 文文 件調用。如,當前文件夾為件調用。如,當前文件夾為 matlabmath, matlabmath 中包含子文件夾中包含子文件夾 private,則,則 private 中的函數只能被中的函數只能被 matlabmath 根目錄下根目錄下 的函數及這些函數調用的的函數及這些函數調用的 M 文件調用。文件調用。 l私有函數只能被其父文件夾中的函數調用,因此,私有函數只能被其父文件夾中的函數調用,因此, 用戶可以開發自己的函數庫,函數的名稱可以與用戶可以開發自己的函數庫,函數

40、的名稱可以與 系統標準系統標準 M 函數庫名稱相同,而不必擔心在函數函數庫名稱相同,而不必擔心在函數 調用時發生沖突,因為調用時發生沖突,因為 MATLAB 首先查找私有首先查找私有 函數,再查找標準函數。函數,再查找標準函數。 MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設計 第36頁 重載函數重載函數 l函數重載為程序編寫和用戶調用都提供了函數重載為程序編寫和用戶調用都提供了 很大的方便。函數重載允許多個函數使用很大的方便。函數重載允許多個函數使用 相同的函數名,不同的輸入參數類型。在相同的函數名,不同的輸入

41、參數類型。在 函數調用時,系統根據輸入參數的情況自函數調用時,系統根據輸入參數的情況自 動選擇相應的函數執行。動選擇相應的函數執行。 MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設計 第37頁 函數操作函數操作 l函數句柄函數句柄 l利用函數句柄可以實現對函數的間接操作,利用函數句柄可以實現對函數的間接操作, 可以通過將函數句柄傳遞給其他函數實現可以通過將函數句柄傳遞給其他函數實現 對函數的操作,也可以將函數句柄保存在對函數的操作,也可以將函數句柄保存在 變量中,留待以后調用操作。變量中,留待以后調用操作。 l函

42、數句柄是通過函數句柄是通過 符號創建的,格式為:符號創建的,格式為: fhandle = functionname。 MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設計 第38頁 l若要保存函數句柄,可以使用單元數組,若要保存函數句柄,可以使用單元數組, 如下:如下: trigFun = sin, cos, tan; l通過函數句柄實現對函數的間接調用,其通過函數句柄實現對函數的間接調用,其 調用格式與直接調用函數的格式相同:調用格式與直接調用函數的格式相同: fhandle(arg1, arg2, ., argn

43、),其中,其中 fhandle 為函數句柄。為函數句柄。 MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設計 第39頁 函數參數函數參數 l當調用函數時,主調函數通過函數參數的當調用函數時,主調函數通過函數參數的 形式向被調函數傳遞數據,被調函數通過形式向被調函數傳遞數據,被調函數通過 函數返回值的形式向主調函數返回數據。函數返回值的形式向主調函數返回數據。 本節介紹函數參數,內容包括:輸入參數本節介紹函數參數,內容包括:輸入參數 數目確定、輸入可變數目的參數、向嵌套數目確定、輸入可變數目的參數、向嵌套 函數輸入可

44、選參數和修改參數值并返回。函數輸入可選參數和修改參數值并返回。 MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設計 第40頁 l1函數參數數目確定函數參數數目確定 l函數函數 nargin 和函數和函數 nargout 分別用于確定分別用于確定 函數的輸入輸出參數個數。在函數體內部函數的輸入輸出參數個數。在函數體內部 用用 nargin(nargout)確定輸入輸出參數)確定輸入輸出參數 后可以用條件語句確定需要執行的操作。后可以用條件語句確定需要執行的操作。 MATLAB R2007基礎教程基礎教程 清華大學出版

45、社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設計 第41頁 l函數函數 nargin 和函數和函數 nargout 允許函數接收或返允許函數接收或返 回任意數目的參數。本節介紹參數數目可變的函回任意數目的參數。本節介紹參數數目可變的函 數。數。 l在在 MATLAB 中,輸入輸出參數是以單元數組的中,輸入輸出參數是以單元數組的 形式進行傳輸的:輸入參數以單元數組的形式傳形式進行傳輸的:輸入參數以單元數組的形式傳 遞給函數,單元數組的每個元素為相應的參數,遞給函數,單元數組的每個元素為相應的參數, 同樣,輸出參數也是以單元數組的形式組織的。同樣,輸出參數也是以單元數組

46、的形式組織的。 如此的參數組織形式便于函數接受任意數目的參如此的參數組織形式便于函數接受任意數目的參 數。見下面的例子。數。見下面的例子。 MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設計 第42頁 l在調用該函數時可以輸入任意數目的參數,參數在調用該函數時可以輸入任意數目的參數,參數 可以為二元數組或者表示線型的字符串,該函數可以為二元數組或者表示線型的字符串,該函數 將用指定的線型繪制輸入數據的圖像。指定線型將用指定的線型繪制輸入數據的圖像。指定線型 的字符串可以在任意位置輸入,并且可以輸入多的字符串可以在任

47、意位置輸入,并且可以輸入多 個,但是需要注意的是,只有最后一個字符串起個,但是需要注意的是,只有最后一個字符串起 作用。作用。 l在上面的程序中,將所有輸入參數作為一個單元在上面的程序中,將所有輸入參數作為一個單元 數組,利用花括號和圓括號對數組元素進行訪問,數組,利用花括號和圓括號對數組元素進行訪問, 實現輸入參數的調用。實現輸入參數的調用。 MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設計 第43頁 l在嵌套函數中也可以使用可變參數。但是需要注意的是,在嵌套函數中也可以使用可變參數。但是需要注意的是, var

48、argin、varargout、nargin 和和 nargout 的意義可能有的意義可能有 所不同。下面介紹這四個元素的應用規則。所不同。下面介紹這四個元素的應用規則。 varargin 和和 varargout 這兩個元素為變量,與 MATLAB 其他變量的作用范圍相同。由于嵌 套函數與主函數使用相同的工作區,因此 varargin 和 varargout 既可 以表示嵌套函數的輸入輸出參數,也可以是主函數的輸入輸出函數, 具體值取決于程序中的變量聲明: 如果嵌套函數在函數聲明中包含 varargin 或者 varargout,則在該函 數內部調用這兩個變量時,變量內容為該函數的輸入輸出參

49、數; 如果嵌套函數聲明中沒有包含 varargin 或者 varargout,而在該函數 的上層函數聲明中包含 varargin 或者 varargout,則當在該嵌套函數 內部調用這兩個變量時,變量內容為上層函數的輸入輸出參數。 MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設計 第44頁 nargin 和和 nargout nargin 和 nargout 是函數,當在函數中調用這兩個 函數時,其值為該函數的輸入或輸出參數,而不需 要進行聲明。如上面的例子中,在函數 A 中調用 nargin(B(nargin,

50、 y * rand(4)) 表示函數 A 的輸入 參數個數,在函數 C 中調用 nargin 表示函數 C 的 輸入參數個數。 MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設計 第45頁 MATLAB 編程錯誤處理編程錯誤處理 l通過通過 try-catch 語句檢測錯誤語句檢測錯誤 l對錯誤進行處理并且從錯誤中恢復對錯誤進行處理并且從錯誤中恢復 l消息標志符消息標志符 l警告處理警告處理 MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程

51、序設計 第46頁 通過通過 try-catch 語句檢測錯誤語句檢測錯誤 l無論程序的編寫多么謹慎,在不同的環境下運行時都有可能產生意外的錯誤。無論程序的編寫多么謹慎,在不同的環境下運行時都有可能產生意外的錯誤。 因此,有必要在程序中添加錯誤檢測語句,保證程序在所有的條件下都能夠因此,有必要在程序中添加錯誤檢測語句,保證程序在所有的條件下都能夠 正常運行。正常運行。 lMATLAB 中的中的 try-catch 語句可用于錯誤檢測。如果程序中的一些語句可能語句可用于錯誤檢測。如果程序中的一些語句可能 會產生非預計的結果,可以將這些語句放在會產生非預計的結果,可以將這些語句放在 try-catc

52、h 塊中。塊中。try-catch 語句語句 可以檢測所有錯誤,并且分別進行處理。格式如下:可以檢測所有錯誤,并且分別進行處理。格式如下: try 表達式表達式1 catch 表達式表達式2 end l一個一個 try-catch 塊分為兩個部分。第一個部分以塊分為兩個部分。第一個部分以 try 開始,第二個部分以開始,第二個部分以 catch 開始,整個塊以開始,整個塊以 end 結束。程序首先正常執行第一部分,如果有錯誤結束。程序首先正常執行第一部分,如果有錯誤 發生,則停止執行該部分的其他語句,轉而執行發生,則停止執行該部分的其他語句,轉而執行 catch 中的語句。中的語句。catch

53、 部部 分對錯誤進行處理,可以顯示錯誤提示、執行默認語句等。分對錯誤進行處理,可以顯示錯誤提示、執行默認語句等。 MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設計 第47頁 l在在 try-catch 語句中,可以嵌套其他的語句中,可以嵌套其他的 try-catch 語句,其格式為:語句,其格式為: try 表達式表達式 1 % 執行表達式執行表達式 1 catch try 表達式表達式 2 % 嘗試從錯誤中恢復嘗試從錯誤中恢復 catch disp Operation failed % 處理錯誤處理錯誤 end

54、 end MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設計 第48頁 對錯誤進行處理并且從錯誤中恢復對錯誤進行處理并且從錯誤中恢復 l1發出錯誤報告發出錯誤報告 lMATALB 中中 error 函數可以報告錯誤并且函數可以報告錯誤并且 中斷程序運行。用戶可以通過指定中斷程序運行。用戶可以通過指定 error 函數參數的方式指定將要發出的錯誤信息。函數參數的方式指定將要發出的錯誤信息。 MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設

55、計 第49頁 l2識別錯誤發生的原因識別錯誤發生的原因 l當錯誤發生時,用戶需要知道錯誤發生的位置及錯誤原因,當錯誤發生時,用戶需要知道錯誤發生的位置及錯誤原因, 以便能夠正確處理錯誤。以便能夠正確處理錯誤。lasterror 函數可以返回最后發函數可以返回最后發 生的錯誤的相關信息,輔助用戶識別錯誤。生的錯誤的相關信息,輔助用戶識別錯誤。 llasterror 返回結果為一個結構體,該結構體包含三個域,返回結果為一個結構體,該結構體包含三個域, 分別為分別為 message、identifier、stack。message 為字符為字符 串,起內容為最近發生的錯誤的相關文本信息;串,起內容為

56、最近發生的錯誤的相關文本信息; identifier 也是一個字符串,內容為錯誤消息的類別標志;也是一個字符串,內容為錯誤消息的類別標志; stack 為一結構體,其內容為該錯誤的堆棧中的相關信息。為一結構體,其內容為該錯誤的堆棧中的相關信息。 stack 包含三個域,為包含三個域,為 和和 line,分別為文件名、函數名,分別為文件名、函數名 和錯誤發生的行數。和錯誤發生的行數。 MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設計 第50頁 l3錯誤重現錯誤重現 l在一些情況下,需要重現已經拋出過的錯誤,以便于對

57、錯誤進行分析。在一些情況下,需要重現已經拋出過的錯誤,以便于對錯誤進行分析。 MATLAB 中函數中函數 rethrow 可以重新拋出指定的錯誤。該函數的格式可以重新拋出指定的錯誤。該函數的格式 為為 rethrow(err),其中輸入參數,其中輸入參數 err 用于指定需要重現的錯誤。該語用于指定需要重現的錯誤。該語 句執行后程序運行中斷,將控制權轉給鍵盤或句執行后程序運行中斷,將控制權轉給鍵盤或 catch 語句的上一層模語句的上一層模 塊。輸入參數塊。輸入參數 err 需為需為 MATLAB 結構體,包含結構體,包含 message、 identifier、stack 中至少一個域,這三

58、個域的類型與中至少一個域,這三個域的類型與 lasterror 返回返回 結果相同。結果相同。 lrethrow 函數通常與函數通常與 try-catch 語句一起使用。如:語句一起使用。如: try 表達式表達式 1 catch do_cleanup rethrow(lasterror) end MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB2007程序設計 第51頁 消息標志符消息標志符 l1消息標志符的格式消息標志符的格式 l標志符為一個字符串,指定錯誤或警告消息的類別(標志符為一個字符串,指定錯誤或警告消息的類別(co

59、mponent)及詳細信)及詳細信 息(息(mnemonic)。通常為)。通常為“類別類別:詳細信息詳細信息”的格式。如:的格式。如: MATLAB:divideByZero Simulink:actionNotTaken TechCorp:notFoundInPath l等。兩個部分都需要滿足如下的規則:等。兩個部分都需要滿足如下的規則: (1)不能包含空格)不能包含空格 (2)第一個字符必須為字母)第一個字符必須為字母 (3)后面的字符可以為數字或下劃線)后面的字符可以為數字或下劃線 l類別部分指定錯誤或警告可能發生的大體位置,通常為某一產品的名字或者類別部分指定錯誤或警告可能發生的大體位

60、置,通常為某一產品的名字或者 工具箱的名字,如工具箱的名字,如 MATLAB 或者或者 Control。MATLAB 支持使用多層次的類支持使用多層次的類 別名稱。別名稱。 l詳細信息用于指定消息的具體內容,如除數為詳細信息用于指定消息的具體內容,如除數為 0 等。等。 l如下面的例子為一個完整的標志符:如下面的例子為一個完整的標志符: error(MATLAB:ambiguousSyntax, Syntax %s could be ambiguous.n, inputstr)。 MATLAB R2007基礎教程基礎教程 清華大學出版社清華大學出版社 4/20/2021 ch07.MATLAB

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論