第11講:函數(shù)與程序的調(diào)試_第1頁
第11講:函數(shù)與程序的調(diào)試_第2頁
第11講:函數(shù)與程序的調(diào)試_第3頁
第11講:函數(shù)與程序的調(diào)試_第4頁
第11講:函數(shù)與程序的調(diào)試_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第第11講講 函數(shù)與程序的調(diào)試函數(shù)與程序的調(diào)試2n本講教學目標本講教學目標 掌握函數(shù)文件的基本結(jié)構(gòu)掌握函數(shù)文件的基本結(jié)構(gòu) 掌握掌握Matlab函數(shù)的調(diào)用方法函數(shù)的調(diào)用方法 了解函數(shù)參數(shù)的可調(diào)性了解函數(shù)參數(shù)的可調(diào)性 掌握函數(shù)的句柄和常用的程序調(diào)試方法掌握函數(shù)的句柄和常用的程序調(diào)試方法 了解各種不同類型的函數(shù)了解各種不同類型的函數(shù)3n11.1 函數(shù)函數(shù)11.1.1 函數(shù)文件基本結(jié)構(gòu)函數(shù)文件基本結(jié)構(gòu)n由由function語句引導,其基本結(jié)構(gòu)為:語句引導,其基本結(jié)構(gòu)為: function 輸出形參表輸出形參表=函數(shù)名函數(shù)名(輸入形參表輸入形參表) 注釋說明部分注釋說明部分 函數(shù)體語句函數(shù)體語句n函數(shù)名

2、的命名規(guī)則與變量名相同。函數(shù)名的命名規(guī)則與變量名相同。n輸入形參為函數(shù)的輸入?yún)?shù),輸出形參為函數(shù)的輸輸入形參為函數(shù)的輸入?yún)?shù),輸出形參為函數(shù)的輸出參數(shù)。出參數(shù)。n當輸出形參多于一個時,則應該用方括號括起來。當輸出形參多于一個時,則應該用方括號括起來。 4n例例1:編寫函數(shù)文件求半徑為編寫函數(shù)文件求半徑為 r 的圓的面積的圓的面積和周長。和周長。 函數(shù)文件如下:函數(shù)文件如下: % calculate the area and perimeter of a circle of radii r function s,p=fcircle(r)% r 圓半徑圓半徑, s 圓面積圓面積, p 圓周長圓周長

3、 s=pi*r*r; p=2*pi*r;5n11.1.2 函數(shù)調(diào)用函數(shù)調(diào)用函數(shù)調(diào)用的一般格式是:函數(shù)調(diào)用的一般格式是: 輸出實參表輸出實參表=函數(shù)名函數(shù)名(輸入實參表輸入實參表)n注意:函數(shù)調(diào)用時各實參出現(xiàn)的順序和個數(shù),應與注意:函數(shù)調(diào)用時各實參出現(xiàn)的順序和個數(shù),應與函數(shù)定義時形參的順序和個數(shù)一致,否則會出錯。函數(shù)定義時形參的順序和個數(shù)一致,否則會出錯。n函數(shù)調(diào)用時,先將實參傳遞給相應的形參,從而實函數(shù)調(diào)用時,先將實參傳遞給相應的形參,從而實現(xiàn)參數(shù)傳遞,然后再執(zhí)行函數(shù)的功能?,F(xiàn)參數(shù)傳遞,然后再執(zhí)行函數(shù)的功能。在在MATLAB中,函數(shù)可以嵌套調(diào)用,即函數(shù)可中,函數(shù)可以嵌套調(diào)用,即函數(shù)可以調(diào)用別的

4、函數(shù),甚至調(diào)用它自身。一個函數(shù)以調(diào)用別的函數(shù),甚至調(diào)用它自身。一個函數(shù)調(diào)用它自身稱為遞歸調(diào)用。調(diào)用它自身稱為遞歸調(diào)用。6n例例2:利用函數(shù)文件,實現(xiàn)直角坐標利用函數(shù)文件,實現(xiàn)直角坐標(x, y)與極坐標與極坐標(rho, theta)之間的轉(zhuǎn)換。之間的轉(zhuǎn)換。 函數(shù)文件函數(shù)文件tran.m:nfunction rho,theta=tran(x,y) rho=sqrt(x*x+y*y); theta=atan(y/x); 調(diào)用調(diào)用tran.m的命令文件的命令文件main1.m:n x=input(Please input x=:); y=input(Please input y=:); rho,t

5、he=tran(x,y)7n例例3:利用函數(shù)的遞歸調(diào)用,求利用函數(shù)的遞歸調(diào)用,求n!。遞歸調(diào)用函數(shù)文件遞歸調(diào)用函數(shù)文件factor.m如下:如下:nfunction f=factor(n) if n trigFun = sin, cos, tan; plot(trigFun2(-pi:0.01:pi)12n函數(shù)句柄的操作函數(shù)句柄的操作 13n11.1.5 匿名函數(shù)匿名函數(shù)匿名函數(shù)提供了一種創(chuàng)建簡單程序的方法,可匿名函數(shù)提供了一種創(chuàng)建簡單程序的方法,可以使用戶不必每次都編寫以使用戶不必每次都編寫M文件,可以在命令文件,可以在命令窗口或其他任意窗口或其他任意 M 文件和腳本文件中使用。文件和腳本文

6、件中使用。格式為:格式為: fhandle = (arglist) expr其中其中fhandle為該函數(shù)創(chuàng)建的函數(shù)句柄;為該函數(shù)創(chuàng)建的函數(shù)句柄; 符符號用于創(chuàng)建函數(shù)句柄;號用于創(chuàng)建函數(shù)句柄;arglist為用逗號分隔的為用逗號分隔的參數(shù)列表;參數(shù)列表;expr為函數(shù)主體,一般為表達式。為函數(shù)主體,一般為表達式。14n11.1.6 主函數(shù)主函數(shù)通常通常M文件中的第一個函數(shù)為主函數(shù),主函數(shù)文件中的第一個函數(shù)為主函數(shù),主函數(shù)之后可以是任意數(shù)量的子函數(shù),它們可以作為之后可以是任意數(shù)量的子函數(shù),它們可以作為主程序的子程序。主程序的子程序。一般來說,主函數(shù)可被該文件之外的其他函數(shù)一般來說,主函數(shù)可被該文

7、件之外的其他函數(shù)調(diào)用,而子函數(shù)只能被該文件內(nèi)的函數(shù)調(diào)用。調(diào)用,而子函數(shù)只能被該文件內(nèi)的函數(shù)調(diào)用。在命令窗口或在命令窗口或M文件種只能調(diào)用主函數(shù),調(diào)用文件種只能調(diào)用主函數(shù),調(diào)用的時候是通過存儲該函數(shù)的的時候是通過存儲該函數(shù)的M文件名進行。文件名進行。15n11.1.7 子函數(shù)子函數(shù)與其他語言一樣,在與其他語言一樣,在MATLAB 7語言中也可以語言中也可以很方便地定義子函數(shù),用來擴充函數(shù)的功能。很方便地定義子函數(shù),用來擴充函數(shù)的功能。在函數(shù)文件中題頭定義的函數(shù)為主函數(shù),而在在函數(shù)文件中題頭定義的函數(shù)為主函數(shù),而在函數(shù)體內(nèi)定義的其他函數(shù)都被視為子函數(shù)。每函數(shù)體內(nèi)定義的其他函數(shù)都被視為子函數(shù)。每個子

8、函數(shù)以函數(shù)定義語句開頭,直至下一個函個子函數(shù)以函數(shù)定義語句開頭,直至下一個函數(shù)的定義或文件的結(jié)尾。數(shù)的定義或文件的結(jié)尾。子函數(shù)只能為主函數(shù)或同一主函數(shù)下的其他子子函數(shù)只能為主函數(shù)或同一主函數(shù)下的其他子函數(shù)所使用。函數(shù)所使用。16n11.1.8 嵌套函數(shù)嵌套函數(shù) 一個函數(shù)內(nèi)部可以定義其他的函數(shù),這種內(nèi)部一個函數(shù)內(nèi)部可以定義其他的函數(shù),這種內(nèi)部的函數(shù)稱作嵌套函數(shù)。的函數(shù)稱作嵌套函數(shù)。定義嵌套函數(shù)時,只要在一個函數(shù)內(nèi)部直接定定義嵌套函數(shù)時,只要在一個函數(shù)內(nèi)部直接定義嵌套函數(shù)即可。義嵌套函數(shù)即可。注意:當一個注意:當一個 M文件中存在嵌套函數(shù)時,該文文件中存在嵌套函數(shù)時,該文件內(nèi)的所有函數(shù)必須以件內(nèi)的

9、所有函數(shù)必須以 end 結(jié)尾。結(jié)尾。17n例例6:嵌套函數(shù)的結(jié)構(gòu)嵌套函數(shù)的結(jié)構(gòu) function x = A(p1, p2) . function y = B(p3) . end . endn每個函數(shù)中可以嵌套多個函數(shù)。每個函數(shù)中可以嵌套多個函數(shù)。18n11.1.9 私有函數(shù)私有函數(shù) 這類函數(shù)位于名為這類函數(shù)位于名為“private”的子文件夾中,只能的子文件夾中,只能被上一級文件夾中的函數(shù)或者這些函數(shù)所調(diào)用的被上一級文件夾中的函數(shù)或者這些函數(shù)所調(diào)用的 M 文件調(diào)用。文件調(diào)用。如當前文件夾為如當前文件夾為math,其中包含,其中包含private文件夾,文件夾,則則 private 中的函數(shù)只

10、能被中的函數(shù)只能被 math 根目錄下的函數(shù)根目錄下的函數(shù)及這些函數(shù)調(diào)用的及這些函數(shù)調(diào)用的M文件調(diào)用。文件調(diào)用。用戶可開發(fā)自己的函數(shù)庫,其名稱可以與系統(tǒng)標用戶可開發(fā)自己的函數(shù)庫,其名稱可以與系統(tǒng)標準準 M函數(shù)庫名稱相同,而不必擔心在函數(shù)調(diào)用時函數(shù)庫名稱相同,而不必擔心在函數(shù)調(diào)用時發(fā)生沖突,因為發(fā)生沖突,因為 MATLAB 首先查找私有函數(shù),再首先查找私有函數(shù),再查找標準函數(shù)。查找標準函數(shù)。19n11.1.10 重載函數(shù)重載函數(shù)函數(shù)重載為程序編寫和用戶調(diào)用都提供了很大函數(shù)重載為程序編寫和用戶調(diào)用都提供了很大的方便。的方便。函數(shù)重載允許多個函數(shù)使用相同的函數(shù)名,不函數(shù)重載允許多個函數(shù)使用相同的函數(shù)

11、名,不同的輸入?yún)?shù)類型。同的輸入?yún)?shù)類型。在函數(shù)調(diào)用時,系統(tǒng)根據(jù)輸入?yún)?shù)的情況自動在函數(shù)調(diào)用時,系統(tǒng)根據(jù)輸入?yún)?shù)的情況自動選擇相應的函數(shù)執(zhí)行。選擇相應的函數(shù)執(zhí)行。20n11.2 程序的調(diào)試和優(yōu)化程序的調(diào)試和優(yōu)化 11.2.1 程序的調(diào)試程序的調(diào)試 n程序的錯誤種類程序的錯誤種類 n錯誤的識別和程序調(diào)試錯誤的識別和程序調(diào)試 11.2.2 程序的優(yōu)化程序的優(yōu)化 n程序優(yōu)劣的分析程序優(yōu)劣的分析 n程序優(yōu)化的技巧程序優(yōu)化的技巧 n有效地使用內(nèi)存有效地使用內(nèi)存 21n11.2.1 程序的調(diào)試程序的調(diào)試 程序的錯誤種類程序的錯誤種類 n在在MATLAB的表達式中存在兩種類型的錯誤:的表達式中存在兩種類型的

12、錯誤:n(1) 語法錯誤語法錯誤 n語法錯誤發(fā)生在語法錯誤發(fā)生在M文件程序代碼的生成過程中,一文件程序代碼的生成過程中,一般是由函數(shù)參數(shù)輸入類型有誤或是矩陣運算階數(shù)不般是由函數(shù)參數(shù)輸入類型有誤或是矩陣運算階數(shù)不符等引起。符等引起。 n(2) 運行錯誤運行錯誤 n運行錯誤一般指在程序運行過程中,出現(xiàn)溢出或是運行錯誤一般指在程序運行過程中,出現(xiàn)溢出或是死循環(huán)等異?,F(xiàn)象。死循環(huán)等異?,F(xiàn)象。 22n11.2.1 程序的調(diào)試程序的調(diào)試 錯誤的識別和程序調(diào)試錯誤的識別和程序調(diào)試 n錯誤識別函數(shù)及其功能錯誤識別函數(shù)及其功能 23n11.2.1 程序的調(diào)試程序的調(diào)試 錯誤的識別和程序調(diào)試錯誤的識別和程序調(diào)試

13、n程序斷點的設置程序斷點的設置 24n11.2.2 程序的優(yōu)化程序的優(yōu)化 程序優(yōu)劣的分析程序優(yōu)劣的分析n在在MATLAB 7語言中,使用語言中,使用profile函數(shù)以及計時函函數(shù)以及計時函數(shù)數(shù)tic和和toc來分析程序中各個部分的耗時情況,從來分析程序中各個部分的耗時情況,從而幫助用戶找出程序中需要改進的地方。而幫助用戶找出程序中需要改進的地方。n其中其中profile在計算相對耗時以及查找文件執(zhí)行過程在計算相對耗時以及查找文件執(zhí)行過程中瓶頸問題時更為有效,而中瓶頸問題時更為有效,而tic和和toc函數(shù)在計算絕函數(shù)在計算絕對耗時時更為有效。對耗時時更為有效。 25n11.2.2 程序的優(yōu)化程序的優(yōu)化 程序優(yōu)化的技巧程序優(yōu)化的技巧 n(1) 程序的向量化操作程序的向量化操作 n循環(huán)運算是循環(huán)運算是MATLAB中的最大弱點,在程序設計中,中的最大弱點,在程序設計中,應當盡量避免使用

溫馨提示

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

評論

0/150

提交評論