第八章程序設(shè)計(jì)ppt課件_第1頁
第八章程序設(shè)計(jì)ppt課件_第2頁
第八章程序設(shè)計(jì)ppt課件_第3頁
第八章程序設(shè)計(jì)ppt課件_第4頁
第八章程序設(shè)計(jì)ppt課件_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第六章 M文件程序設(shè)計(jì)根底主要內(nèi)容M文本編輯器M文件MATLAB的數(shù)據(jù)類型MATLAB控制流程序調(diào)試函數(shù)句柄一、M文件M腳本命令文件M函數(shù)文件部分變量和全局變量M文件的普通構(gòu)造變量的檢測傳送和限權(quán)運(yùn)用函數(shù)1、M腳本命令文件Script 是假設(shè)干命令和函數(shù)的集合,執(zhí)行特定的功能 不存在參數(shù)的輸入和輸出 在MATLAB環(huán)境下,腳本可以直接訪問整個(gè)任務(wù)空間的變量;而且由腳本建立的變量在腳本文件執(zhí)行終了后仍堅(jiān)持在任務(wù)空間中,直到clear命令去除為止。例:建立fibonnaci.m文件,其內(nèi)容如下:%計(jì)算Fibonnaci數(shù)clear;f(1)=1;f(2)=1;for n=1:1:8 f(n+2)=

2、f(n)+f(n+1);endf2、M函數(shù)文件 Function 函數(shù)不但可以接受輸入?yún)?shù),還可以輸出參數(shù) 存儲函數(shù)的M文件的文件名必需與函數(shù)名一致 函數(shù)只能訪問本身空間的變量 每當(dāng)函數(shù)文件運(yùn)轉(zhuǎn),MATLAB就會(huì)專門為它開辟一個(gè)暫時(shí)函數(shù)任務(wù)空間(Function workspace)。一切中間變量都存放在函數(shù)任務(wù)空間中。當(dāng)執(zhí)行完文件最后一條指令或遇到return時(shí),就終了該函數(shù)文件的運(yùn)轉(zhuǎn),同時(shí)該暫時(shí)函數(shù)空間及其一切的中間變量就立刻被去除。MATLAB允許運(yùn)用比“標(biāo)稱數(shù)目較少的輸入輸出宗量,實(shí)現(xiàn)對函數(shù)的調(diào)用。函數(shù)空間隨詳細(xì)M函數(shù)文件的被調(diào)用而產(chǎn)生,隨調(diào)用終了而刪除。函數(shù)空間是相對獨(dú)立的、暫時(shí)的。

3、在MATLAB整個(gè)運(yùn)轉(zhuǎn)期間,可以產(chǎn)生恣意多個(gè)暫時(shí)函數(shù)空間。假設(shè)在函數(shù)文件中,發(fā)生對某腳本文件的調(diào)用,那么該腳本文件運(yùn)轉(zhuǎn)產(chǎn)生的一切變量都存放于該函數(shù)空間之中,而不是存放在根本空間。例:把前例計(jì)算fibonnaci數(shù)的腳本文件改成函數(shù)文件如下:function f=fibo(N)%FIBO; 計(jì)算參數(shù)N個(gè)Fibonnaci數(shù)的函數(shù)文件%f=fibo(N); N可取恣意自然數(shù)%.%編寫于.f(1)=1; %初始化1f(2)=1; %初始化2for n=1:N f(n+2)=f(n)+f(n+1);end;3、部分變量和全局變量部分Local變量它存在于函數(shù)空間內(nèi)部的中間變量,產(chǎn)生于該函數(shù)的運(yùn)轉(zhuǎn)過程中

4、,其影響范圍也僅限于該函數(shù)本身。全局Global變量經(jīng)過global指令,MATLAB也允許幾個(gè)不同的函數(shù)空間以及根本空間共享一個(gè)變量。這種被共享的變量稱為全局變量。每個(gè)希望共享全局變量的函數(shù)或MATLAB根本任務(wù)空間,必需逐個(gè)用global對詳細(xì)變量加以專門定義。沒采用global定義的函數(shù)或根本空間,將無權(quán)享用全局變量。假設(shè)某個(gè)函數(shù)的運(yùn)作使全局變量的內(nèi)容發(fā)生了變化,那么其他函數(shù)空間以及根本任務(wù)空間中的同名變量也就隨之變化。除非與全局變量聯(lián)絡(luò)的一切任務(wù)空間都被刪除,否那么全局變量依然存在。3、部分變量和全局變量4、M文件的普通構(gòu)造由于從構(gòu)造上看,腳本文件只是比函數(shù)文件少一個(gè)“函數(shù)聲明行。典型

5、M函數(shù)文件的構(gòu)造:函數(shù)聲明定義行(Function declaration line):H1行(The first help text line):在線協(xié)助文本(Help text)區(qū):編寫和修正記錄:函數(shù)體(Function body):函數(shù)聲明定義行(Function declaration line)位于函數(shù)文件的首行,以MATLAB關(guān)鍵字function開頭,函數(shù)名以及函數(shù)的輸入輸出宗量都在這一行定義。H1行(The first help text line):緊隨函數(shù)聲明行之后以%開頭的第一注釋行。按MATLAB本身文件的規(guī)那么,H1行包含:大寫體的函數(shù)文件名;運(yùn)用關(guān)鍵詞簡要描畫的函

6、數(shù)功能。該H1行供lookfor關(guān)鍵詞查詢和help在線協(xié)助運(yùn)用。在線協(xié)助文本(Help text)區(qū):H1行及其之后的延續(xù)以%開頭的一切注釋行構(gòu)成整個(gè)在線協(xié)助文本。它通常包括:函數(shù)輸入輸出宗量的含義,調(diào)用格式闡明。編寫和修正記錄與在線協(xié)助文本區(qū)相隔一個(gè)空行,也以%開頭,標(biāo)志編寫及修正該M文件的作者和日期、版本記錄。它用于軟件檔案管理。函數(shù)體(Function body):為明晰起見,它與前面的注釋行以空行相隔。這部分內(nèi)容由實(shí)現(xiàn)該M函數(shù)文件功能的MATLAB指令組成。它接納輸入宗量,進(jìn)展程序流控制,得到輸出宗量。其中為閱讀、了解方便,也配置適當(dāng)?shù)目招泻妥⑨?。假設(shè)注解行很多,可以用注解塊操作符%

7、5、變量的檢測傳送和限權(quán)運(yùn)用函數(shù) 輸入輸出宗量檢測指令跨空間變量傳送子函數(shù)和私用函數(shù)輸入輸出宗量檢測指令nargin在函數(shù)體內(nèi),用于獲取實(shí)踐輸入宗量nargout在函數(shù)體內(nèi),用于獲取實(shí)踐輸出宗量nargin(fun)獲取fun指定函數(shù)的標(biāo)稱輸入宗量數(shù)nargout(fun)獲取fun指定函數(shù)的標(biāo)稱輸出宗量數(shù)inputname(n)在函數(shù)體內(nèi)運(yùn)用,給出第n個(gè)輸入宗量的實(shí)踐調(diào)用變量名跨空間變量傳送全局變量函數(shù)輸入?yún)?shù)跨空間計(jì)算串表達(dá)式的值跨空間賦值跨空間計(jì)算串表達(dá)式的值evalin(workspace,expression)跨空間計(jì)算串表達(dá)式值workspace可取兩個(gè)值:base和callerB

8、ase:表示計(jì)算eval(expression時(shí),將從根本任務(wù)空間獲得變量值。Caller:表示計(jì)算eval(expression時(shí),將從主調(diào)函數(shù)任務(wù)空間獲得變量值。主調(diào)函數(shù)是相對被調(diào)函數(shù)而言的。這里,被調(diào)函數(shù)是指evalin所在的函數(shù)。evalin(workspace,expression1, expression2)跨空間計(jì)算替代串表達(dá)式值workspace可取兩個(gè)值:base和caller該調(diào)用格式的執(zhí)行機(jī)理:先從所在函數(shù)空間獲得變量值用eval(expression1計(jì)算原串表達(dá)式;假設(shè)該計(jì)算失敗,那么在從workspace 指定的根本或主調(diào)函數(shù)任務(wù)空間獲取變量值,再經(jīng)過eval(ex

9、pression2計(jì)算替代串表達(dá)式 ??缈臻g賦值assignin(workspace,VN,x)把當(dāng)前任務(wù)空間內(nèi)變量x的值賦給workspace指定空間名的VN變量。子函數(shù)MATLAB允許一個(gè)M函數(shù)文件包含多個(gè)函數(shù)的代碼。其中,第一個(gè)出現(xiàn)的函數(shù)稱為主函數(shù)(Primary function),該文件中的其他函數(shù)稱為子函數(shù)(Subfunction)。保管時(shí)所用的函數(shù)名與主函數(shù)定義名一樣。外部程序只能對主函數(shù)進(jìn)展調(diào)用。子函數(shù)的性質(zhì):每個(gè)子函數(shù)的第一行是其本人的函數(shù)聲明行。在M函數(shù)文件內(nèi),主函數(shù)的位置不可改動(dòng),但子函數(shù)的陳列次序可恣意改動(dòng)。子函數(shù)只能被處于同一文件的主函數(shù)或其他子函數(shù)調(diào)用。在M函數(shù)文件

10、中,任何指令經(jīng)過“名字對函數(shù)進(jìn)展調(diào)用時(shí),子函數(shù)的優(yōu)先級僅次于內(nèi)裝函數(shù)。同一文件的主函數(shù)、子函數(shù)的任務(wù)空間都是彼此獨(dú)立的。各函數(shù)間的信息,或經(jīng)過輸入輸出宗量傳送,或經(jīng)過全局變量傳送,或經(jīng)過跨空間指令傳送。查看子函數(shù)的注釋用help mainfun/subfun的方式私用部分函數(shù)所謂私用部分函數(shù),是指位于private目錄上的M文件函數(shù)。私用部分函數(shù)的性質(zhì):私用部分函數(shù)的構(gòu)造與普通M函數(shù)完全一樣。私用部分函數(shù)的只能被private目錄的直接父目錄上的M函數(shù)文件所調(diào)用。它不能被其他目錄上的任何M函數(shù)、M腳本文件或MATLAB指令窗中的命令所調(diào)用,也不能被直接父目錄上的M腳本文件調(diào)用。M文件中,任何指

11、令經(jīng)過“名字對函數(shù)進(jìn)展調(diào)用時(shí),私用部分函數(shù)的優(yōu)先級雖低于內(nèi)裝函數(shù)和子函數(shù),但高與其他任何目錄上的函數(shù)。help,lookfor等指令都不能提供關(guān)于私用部分函數(shù)的任何協(xié)助信息。二、MATLAB的數(shù)據(jù)類型6種根本數(shù)據(jù)類型及假設(shè)干衍生類型。數(shù)據(jù)類型Data Types數(shù)值Numeric字符串Char元胞Cell構(gòu)架Structure函數(shù)句柄Function handleJAVA類JAVA Class雙精度double單精度single整數(shù)類Int*,uint*稀疏sparse數(shù)據(jù)文件MATLAB允許接受的數(shù)據(jù)文件大致可分為以下幾類:以.mat為擴(kuò)展名的二進(jìn)制數(shù)據(jù)文件。以.txt、.dat為擴(kuò)展名的A

12、SCII碼數(shù)據(jù)文件。以.bmp、.jpg、.tif等為擴(kuò)展名的圖像文件。以.wav為擴(kuò)展名的聲音文件。三、MATLAB控制流for循環(huán)構(gòu)造while循環(huán)構(gòu)造 if-else-end分支構(gòu)造 switch-case構(gòu)造 try-catch構(gòu)造 控制程序流的其它常用指令 1、for循環(huán)構(gòu)造for x=array(commands)endarray也可以為二維mn,此時(shí),以arry的列數(shù)n作為循環(huán)次數(shù)。每次循環(huán)時(shí),將數(shù)組的每一列向量賦給x2、while循環(huán)構(gòu)造while expression(commands)end當(dāng)expression為空數(shù)組時(shí),條件斷定為假假設(shè)expression為數(shù)組,只需它

13、一切元素的值不為,條件才為真3、if-else-end分支構(gòu)造單分支雙分支多分支if expression (commands)endif expression (commands1)else (commands2)endif expression1 (commands1)elseif expression2 (commands2)else (commandsk)end常用常用該使用方法常被switch-case所取代4、switch-case構(gòu)造switch express case test1 (commands1)case test2 (commands2)case testk (com

14、mandsk)otherwise(commands)endExpress可以是數(shù)值或字符串表達(dá)式5、try-catch構(gòu)造try(commands1)catch(commands2)end組命令1總被執(zhí)行。假設(shè)正確,那么跳出此構(gòu)造僅當(dāng)組命令1出現(xiàn)執(zhí)行錯(cuò)誤,組命令2才被執(zhí)行假設(shè)組命令2出錯(cuò),那么直接退出循環(huán),除非,其中有try catch語句6、控制程序流的其它常用指令指令及使用格式使用說明v=input(message)v=input(message,s)該指令執(zhí)行時(shí),“控制權(quán)”交給鍵盤;待輸入結(jié)束,按下Enter鍵,“控制權(quán)”交還MATLAB。message是提示用的字符串。第一種格式用于鍵

15、入數(shù)值、字符串、元胞數(shù)組等數(shù)據(jù);第二種格式,不管鍵入什么,總是以字符串形式賦給變量vkeyboard遇到keyboard時(shí),將“控制權(quán)”交給鍵盤,用戶可從鍵盤輸入各種MATLAB指令。僅當(dāng)用戶輸入return指令后,“控制權(quán)”才交還給程序。它與input的區(qū)別是:它允許輸入任意多個(gè)MATLAB指令,而input只能輸入賦給變量的值breakbreak指令可導(dǎo)致包含該指令的while、for環(huán)終止;也可在if-end,switch-case,try-catch中導(dǎo)致中斷continue跳過位于其后的循環(huán)中的其他指令,執(zhí)行循環(huán)的下一個(gè)迭代pausepause(n)第一種格式使程序暫停執(zhí)行,等待用戶

16、按任意鍵繼續(xù);第二種格式使程序暫停n秒后,再繼續(xù)執(zhí)行指令及使用格式使用說明return結(jié)束return指令所在函數(shù)的執(zhí)行,而把控制轉(zhuǎn)至主調(diào)函數(shù)或指令窗。否則,只有待整個(gè)被調(diào)函數(shù)執(zhí)行完后,才會(huì)轉(zhuǎn)出error(message)顯示出錯(cuò)信息message,終止程序lasterr顯示最新出錯(cuò)原因,并終止程序lastwarm顯示MATLAB自動(dòng)給出的最新警告程序繼續(xù)運(yùn)行warning(message)顯示警告信息message,程序繼續(xù)運(yùn)行6、控制程序流的其它常用指令四、程序調(diào)試與優(yōu)化程序調(diào)試概述普通調(diào)試技巧程序調(diào)試器的運(yùn)用程序設(shè)計(jì)的優(yōu)化M文件調(diào)用記錄程序調(diào)試概述MATLAB的調(diào)試器(Debugger)

17、可以迅速地幫您找出程序錯(cuò)誤所在,其功能包含:查詢每一個(gè)函數(shù)的任務(wù)空間(Workspace).顯示函數(shù)調(diào)用的堆棧(Function Call Stack).一行一行地執(zhí)行M文件.普通調(diào)試技巧普通而言,計(jì)算機(jī)程序能夠發(fā)生的錯(cuò)誤可分為兩種:語法錯(cuò)誤Syntax Errors邏輯錯(cuò)誤Logic Errors普通檢測邏輯錯(cuò)誤的方法:刪除表達(dá)式最尾端的分號。假設(shè)調(diào)試一個(gè)單獨(dú)函數(shù),可在其第一行的函數(shù)聲明行加上%,并定義輸入變量的值,直接以腳本的方式來執(zhí)行此M文件,并保管一切變量于MATLAB任務(wù)空間中,以便后續(xù)查看及調(diào)試。在程序中參與keyboard命令,可使程序執(zhí)行至此處即暫停,并顯示“k的提示號。此時(shí)可恣意查看或改動(dòng)任務(wù)空間的任何變量。假設(shè)要繼續(xù)執(zhí)行程序,可在命令窗輸入“return并按下Enter鍵。運(yùn)用MATLAB程序調(diào)試器。程序設(shè)計(jì)的優(yōu)化以矩陣運(yùn)算替代循環(huán)運(yùn)算數(shù)據(jù)的預(yù)定義內(nèi)存的管理五、函數(shù)句柄函數(shù)句柄(Function handle)是MATLAB6.0版啟用的新數(shù)據(jù)類型。它保管著“為該函數(shù)創(chuàng)建句柄時(shí)的途徑、視野、函數(shù)名,以及能夠存在的重載方法。函數(shù)句柄的創(chuàng)建和察看函數(shù)句柄并不是伴隨函數(shù)文

溫馨提示

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

評論

0/150

提交評論