MATLAB 4-1 第3章程序設(shè)計(jì)初步.ppt_第1頁(yè)
MATLAB 4-1 第3章程序設(shè)計(jì)初步.ppt_第2頁(yè)
MATLAB 4-1 第3章程序設(shè)計(jì)初步.ppt_第3頁(yè)
MATLAB 4-1 第3章程序設(shè)計(jì)初步.ppt_第4頁(yè)
MATLAB 4-1 第3章程序設(shè)計(jì)初步.ppt_第5頁(yè)
已閱讀5頁(yè),還剩80頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、MATLAB SDU,1,第3章 matlab的程序設(shè)計(jì)初步,MATLAB SDU,2,OUTLINE,MATLAB的m文件的創(chuàng)建和使用 MATLAB程序控制結(jié)構(gòu) 程序設(shè)計(jì) 調(diào)試的基本方法,MATLAB SDU,3,什么是m文件,用戶如想靈活應(yīng)用matlab去解決實(shí)際問題,充分調(diào)用matlab的科學(xué)技術(shù)資源,就需要編輯m文件 包含matlab語(yǔ)言代碼的文件稱為m文件,其擴(kuò)展名為m。 編輯m文件可使用各種文本編輯器。,MATLAB SDU,4,2. m文件 m文件的語(yǔ)法類似于c語(yǔ)言,但又有其自身特點(diǎn)。它只是一個(gè)簡(jiǎn)單的ASCII碼文本文件,執(zhí)行程序時(shí)逐行解釋運(yùn)行程序,matlab是解釋性的編程語(yǔ)言

2、。 m文件有兩類 獨(dú)立的m文件 稱命令文件,腳本(script) 可調(diào)用m文件 稱函數(shù)文件 Functions,MATLAB SDU,5,表3-1腳本文件與函數(shù)文件的區(qū)別,MATLAB SDU,6,Review: matlab的工作模式,指令驅(qū)動(dòng)模式 通常matlab以指令驅(qū)動(dòng)模式工作,即在matlab 窗口下當(dāng)用戶輸入單行指令時(shí),matlab 立即處理這條指令,并顯示結(jié)果,這就是matlab命令行方式。 命令行操作時(shí),matlab窗口只允許一次執(zhí)行一行上的一個(gè)或幾個(gè)語(yǔ)句。,MATLAB SDU,7,例如: x1=0:10 x1 = 0 1 2 3 4 5 6 7 8 9 10 x2=0:3:

3、11 x2 = 0 3 6 9 x3=11.5:-3:0 x3 = 11.5000 8.5000 5.5000 2.5000,MATLAB SDU,8,x1=0:10,x2=0:3:11,x3=11.5:-3:0 x1 = 0 1 2 3 4 5 6 7 8 9 10 x2 = 0 3 6 9 x3 = 11.5000 8.5000 5.5000 2.5000 命令行方式程序可讀性差,而且不能存儲(chǔ),對(duì)于處理復(fù)雜問題和大量數(shù)據(jù)時(shí)是不方便的,應(yīng)編寫成能存儲(chǔ)的程序文件。,MATLAB SDU,9,m文件模式 將matlab語(yǔ)句構(gòu)成的程序存儲(chǔ)成以m為擴(kuò)展名的文件,然后再執(zhí)行該程序文件,這種工作模式稱為

4、程序文件模式。 程序文件不能在指令窗口下建立,因?yàn)橹噶畲翱谥辉试S一次執(zhí)行一行上的一個(gè)或幾個(gè)語(yǔ)句。,MATLAB SDU,10,M 文件的創(chuàng)建和編輯,不管是創(chuàng)建或編輯腳本文件還是函數(shù)文件,可以使用各種文本編輯器: 例如Windows系統(tǒng)下的記事本,其它商業(yè)化軟件UltraEdit,EditPlus等等, 但是儲(chǔ)存格式必須是 ASCII 的格式,并且必須以.m 為后綴名。 通常情況下可以直接使用MATLAB中內(nèi)置的M文件編輯器。,MATLAB SDU,11,2. 點(diǎn)擊file Save Workspace As,將工作空間中的內(nèi)容存入文件。 *edit 用各種edit 編輯器編制m文件。 edit

5、 用matlab自帶的編輯器編制m文件。 word 用word編輯m文件。 m文件編輯器的設(shè)定 m文件編輯器可自己設(shè)定,設(shè)定方法是matlab命令窗口 options 菜單下點(diǎn)擊 Edit Preference 選定m文件編輯器。,MATLAB SDU,12,m文件編輯器缺省設(shè)置是 matlab editor 還可設(shè)成:其他的Text Editor 從“file” “preference” editor/debugger設(shè)置 注意:所創(chuàng)建的m文件必須納入matlab搜索路 徑后,才能在matlab命令窗口運(yùn)行。,MATLAB SDU,13,matlab搜索路徑的設(shè)置 matlab 缺省路徑是c

6、:matlabbin . 用pathtool路徑瀏覽器設(shè)定當(dāng)前目錄 “file” - “set path” 方法設(shè)定當(dāng)前目錄,MATLAB SDU,14,matlab文件的數(shù)據(jù)文件類型mat,數(shù)據(jù)文件 .mat mat文件是matlab以標(biāo)準(zhǔn)二進(jìn)制格式保存的數(shù)據(jù)文件,可將工作空間中有用的數(shù)據(jù)變量保存下來(lái)。 mat文件的生成和調(diào)用是由函數(shù)save和load完成的。,MATLAB SDU,15,M文件結(jié)構(gòu),良好習(xí)慣建議 1. 程序盡量做到簡(jiǎn)單易懂; 2. 所有變量都用小寫,并且含義清晰明了,如用year作為變量保存年份等; 3. 帶有必要的注釋,這樣有助于他人和自己能快速知道程序執(zhí)行的目的或者算法

7、的含義,另外也可以有助于追溯記錄程序的更新過(guò)程。,MATLAB SDU,16,腳本(命令)文件(Script),命令文件 簡(jiǎn)單的m文件 命令文件實(shí)際上是一串指令的集合,與在命令窗口逐行執(zhí)行文件中的所有指令,其結(jié)果是一樣的。沒有輸入輸出參數(shù)。 “腳本”本身反映這樣一個(gè)事實(shí):MATLAB只是按文件所寫的指令執(zhí)行。 M腳本(命令)文件的構(gòu)成較簡(jiǎn)單,其特點(diǎn)是: 它只是一串按用戶意圖排列而成的(包括控制流向指令在內(nèi)的)MATLAB指令集。 腳本文件運(yùn)行后,所產(chǎn)生的所有變量都駐留在MATLAB基本工作空間(Base workspace)中。只要不使用clear指令加以清除,且MATLAB指令窗不關(guān)閉,這些

8、變量將一直保存在基本工作空間中?;竟ぷ骺臻g隨MATLAB的啟動(dòng)而產(chǎn)生;只有關(guān)閉MATLAB時(shí),該基本空間才被刪除。,MATLAB SDU,17,M函數(shù)文件( Function),與腳本(命令)文件不同,函數(shù)文件(Function file)猶如一個(gè)“黑箱”。從外界只能看到傳給它的輸入量和送出來(lái)的計(jì)算結(jié)果,而內(nèi)部運(yùn)作是藏而不見的。,MATLAB SDU,18,函數(shù)文件的特點(diǎn):,從形式上看,與腳本文件不同,函數(shù)文件的第一行總是以“function”引導(dǎo)的“函數(shù)申明行”(Function declaration line)。該行還羅列出函數(shù)與外界聯(lián)系的全部“標(biāo)稱”輸入輸出宗量。但對(duì)“輸入輸出宗量”

9、的標(biāo)稱數(shù)目并沒有限制,即可以完全沒有輸入輸出宗量,也可以是任意數(shù)目。 MATLAB允許使用比“標(biāo)稱數(shù)目”較少的輸入輸出宗量,實(shí)現(xiàn)對(duì)函數(shù)的調(diào)用。 從運(yùn)行上看,與腳本文件運(yùn)行不同,每當(dāng)函數(shù)文件運(yùn)行,MATLAB就會(huì)專門為它開辟一個(gè)臨時(shí)工作空間,稱之謂函數(shù)工作空間(Function workspace)。所有中間變量都存放在函數(shù)工作空間中。當(dāng)執(zhí)行完文件最后一條指令或遇到return時(shí),就結(jié)束該函數(shù)文件的運(yùn)行,同時(shí)該臨時(shí)函數(shù)空間及其所有的中間變量就立即被清除。 函數(shù)空間隨具體M函數(shù)文件的被調(diào)用而產(chǎn)生,隨調(diào)用結(jié)束而刪除。函數(shù)空間是相對(duì)獨(dú)立的、臨時(shí)的。在MATLAB整個(gè)運(yùn)行期間,可以產(chǎn)生任意多個(gè)臨時(shí)函數(shù)空

10、間。 假如在函數(shù)文件中,發(fā)生對(duì)某腳本文件的調(diào)用,那么該腳本文件運(yùn)行產(chǎn)生的所有變量都存放于該函數(shù)空間之中,而不是存放在基本空間。,MATLAB SDU,19,函數(shù)m文件的格式: function 返回變量=函數(shù)名(輸入變量) 注釋說(shuō)明語(yǔ)句段 程序語(yǔ)句段 特定規(guī)則: 函數(shù)m文件第一行必須以單詞function作為引導(dǎo)詞,必須遵循如下形式: function =() m文件的文件名必須是 .m。 程序中的變量均為局部變量,不保存在工作空間中。其變量只在函數(shù)運(yùn)行期間有效。,MATLAB SDU,20,M函數(shù)文件示例,function sa = circle(r,s) %CIRCLEplot a cir

11、cle of radii r in the line specified by s. %r指定半徑的數(shù)值 %s指定線色的字符串 %sa圓面積 % % circle(r)利用藍(lán)實(shí)線畫半徑為 r 的圓周線. % circle(r,s)利用串 s 指定的線色畫半徑為 r 的圓周線. % sa=circle(r)計(jì)算圓面積,并畫半徑為 r 的藍(lán)色圓面. % sa=circle(r,s)計(jì)算圓面積,并畫半徑為 r 的 s 色圓面. % 編寫于2001年4月7日,修改于2002年8月27日。 if nargin2 error(輸入宗量太多。); end; if nargin=1 s=b; end; ,MA

12、TLAB SDU,21,函數(shù)申明(定義)行(Function declaration line):,位于函數(shù)文件的首行,以MATLAB關(guān)鍵字function開頭,函數(shù)名以及函數(shù)的輸入輸出宗量都在這一行定義。,MATLAB SDU,22,H1行(The first help text line):,緊隨函數(shù)申明行之后以%開頭的第一注釋行。按MATLAB自身文件的規(guī)則,H1行包含:大寫體的函數(shù)文件名;運(yùn)用關(guān)鍵詞簡(jiǎn)要描述的函數(shù)功能。該H1行供lookfor關(guān)鍵詞查詢和help在線幫助使用。,MATLAB SDU,23,在線幫助文本(Help text)區(qū):,H1行及其之后的連續(xù)以%開頭的所有注釋行構(gòu)

13、成整個(gè)在線幫助文本。它通常包括:函數(shù)輸入輸出宗量的含義,調(diào)用格式說(shuō)明。,MATLAB SDU,24,編寫和修改記錄:,與在線幫助文本區(qū)相隔一個(gè)空行,也以%開頭,標(biāo)志編寫及修改該M文件的作者和日期、版本記錄。它用于軟件檔案管理。,MATLAB SDU,25,函數(shù)體(Function body):,為清晰起見,它與前面的注釋行以空行相隔。這部分內(nèi)容由實(shí)現(xiàn)該M函數(shù)文件功能的MATLAB指令組成。它接收輸入宗量,進(jìn)行程序流控制,得到輸出宗量。其中為閱讀、理解方便,也配置適當(dāng)?shù)目招泻妥⑨?。若僅從運(yùn)算角度看,惟有函數(shù)申明行和函數(shù)體兩部分是構(gòu)成M函數(shù)文件所必不可少的。,MATLAB SDU,26,funct

14、ion r = rank(A,tol) %RANK Matrix rank. % RANK(A) provides an estimate of the number of linearly % independent rows or columns of a matrix A. % RANK(A,tol) is the number of singular values of A % that are larger than tol. % RANK(A) uses the default tol = max(size(A) * norm(A) * eps. % % Class support

15、 for input A: % float: double, single % Copyright 1984-2004 The MathWorks, Inc. % $Revision: $ $Date: 2004/04/10 23:30:08 $ s = svd(A); if nargin=1 tol = max(size(A) * eps(max(s); end r = sum(s tol);.,程序部分,MATLAB SDU,27,matlab內(nèi)置函數(shù)文件 matlab自定義的函數(shù)文件稱內(nèi)置函數(shù)文件 調(diào)用內(nèi)置函數(shù)的方法:使用函數(shù)名并給出相應(yīng)的入口、出口參數(shù)即可。 例如:s

16、in.m函數(shù) 調(diào)用格式:y=sin(2*x) 實(shí)際應(yīng)用中: x=0:2*pi/180:2*pi; y=sin(2*x) plot(x,y),M 函數(shù)文件分兩類:內(nèi)置和自定義,MATLAB SDU,28,又如 sqrt(x) 求x的平方根 abs(x) 求x的絕對(duì)值 det(a) 求行列式的值 等等。matlab擁有大量的內(nèi)置數(shù)學(xué)函數(shù),供我們?cè)跀?shù)值運(yùn)算和符號(hào)運(yùn)算中調(diào)用。,MATLAB SDU,29,II 函數(shù)m文件 需要輸入變量,返回輸出變量 matlab用戶可以根據(jù)需要編輯自己的m文件,它們可以像庫(kù)函數(shù)一樣方便的調(diào)用,從而極大地?cái)U(kuò)展了matlab 的能力。 對(duì)于某一類特殊問題,如創(chuàng)建了許多m函

17、數(shù)文件,則可形成新的工具箱。 這種用matlab語(yǔ)言創(chuàng)建定義新的matlab函數(shù)的功能,正體現(xiàn)了matlab語(yǔ)言強(qiáng)大的擴(kuò)展功能。,MATLAB SDU,30,M文件命名以及調(diào)用,對(duì)于腳本文件的命名,規(guī)則和變量的命名規(guī)則一致,即必須以字母開頭,其余部分可以是字母、數(shù)字和下劃線的任意組合。調(diào)用腳本文件時(shí)只需要在MATLAB的主窗口輸入腳本文件的名字(不帶后綴),腳本文件內(nèi)的內(nèi)容就會(huì)得到執(zhí)行。,MATLAB SDU,31,函數(shù)文件命名與調(diào)用,函數(shù)文件的命名規(guī)則除了和變量的命名規(guī)則一致以往,另外慣用的規(guī)則是函數(shù)文件名和函數(shù)名相一致。 調(diào)用方式 out1,out2,.,outN=functionname

18、(in1,in2.inN) 輸出方括號(hào),輸入小括號(hào),MATLAB SDU,32,例,利用函數(shù)文件,實(shí)現(xiàn)直角坐標(biāo)(x,y)與極坐標(biāo)(,)之間的轉(zhuǎn)換,函數(shù)文件tran.m: function rho,theta=tran(x,y) rho=sqrt(x*x+y*y); theta=atan(y/x); 調(diào)用tran.m的命令文件main1.m: x=input(Please input x=:); y=input(Please input y=:); rho,the=tran(x,y); rho the,MATLAB SDU,33,補(bǔ)充:函數(shù)的遞歸調(diào)用,遞歸調(diào)用:函數(shù)調(diào)用其本身稱為函數(shù)的遞歸調(diào)用

19、例如求n! 階乘本身是用遞歸形式進(jìn)行定義的: 因此定義階乘函數(shù)文件可以采用遞歸調(diào)用,MATLAB SDU,34,function f = factor(n) If n=1 f=1; else f=factor(n-1)*n; end,MATLAB SDU,35,M文件和內(nèi)部偽代碼,調(diào)用M文件時(shí),matlab會(huì)對(duì)該文件進(jìn)行解析,并生成相應(yīng)的內(nèi)部偽代碼(pseudocode, pcode)存放在內(nèi)存,再次調(diào)用時(shí)直接調(diào)用內(nèi)存中的pcode,避免對(duì)相同M文件重復(fù)解析。 可以用pcode 產(chǎn)生偽代碼:難以閱讀,保密性好,MATLAB SDU,36,局部變量和全局變量,局部(Local)變量 它存在于函數(shù)

20、空間內(nèi)部的中間變量,產(chǎn)生于該函數(shù)的運(yùn)行過(guò)程中,其影響范圍也僅限于該函數(shù)本身。 全局(Global)變量 通過(guò)global指令,MATLAB也允許幾個(gè)不同的函數(shù)空間以及基本空間共享一個(gè)變量。這種被共享的變量稱為全局變量。每個(gè)希望共享全局變量的函數(shù)或MATLAB基本工作空間,必須逐個(gè)用global對(duì)具體變量加以專門定義。沒采用global定義的函數(shù)或基本空間,將無(wú)權(quán)享用全局變量。 如果某個(gè)函數(shù)的運(yùn)作使全局變量的內(nèi)容發(fā)生了變化,那么其他函數(shù)空間以及基本工作空間中的同名變量也就隨之變化。 除非與全局變量聯(lián)系的所有工作空間都被刪除,否則全局變量依然存在。 通常情況下會(huì)選取全部是大寫字母的命名為全局變量名

21、。全局變量的使用可以減少參數(shù)的傳遞,如果合理的使用可以提高程序執(zhí)行效率,但是同時(shí)會(huì)損害函數(shù)的封裝性,增加程序調(diào)試和維護(hù)的難度,因此一般不推薦使用,MATLAB SDU,37,參數(shù)傳遞,在調(diào)用函數(shù)時(shí),MATLAB用兩個(gè)永久變量nargin和nargout分別記錄調(diào)用該函數(shù)時(shí)的輸入實(shí)參和輸出實(shí)參的個(gè)數(shù)。只要在函數(shù)文件中包含這兩個(gè)變量,就可以準(zhǔn)確地知道該函數(shù)文件被調(diào)用時(shí)的輸入輸出參數(shù)個(gè)數(shù),從而決定函數(shù)如何進(jìn)行處理。 nargin在函數(shù)體內(nèi),用于獲取實(shí)際輸入宗量 nargout在函數(shù)體內(nèi),用于獲取實(shí)際輸出宗量 nargin(fun) 獲取fun指定函數(shù)的標(biāo)稱輸入宗量數(shù) nargout(fun) 獲取f

22、un指定函數(shù)的標(biāo)稱輸出宗量數(shù),MATLAB SDU,38,例3-4 定義一個(gè)函數(shù),當(dāng)輸入1個(gè)參數(shù)求其絕對(duì)值,輸入2個(gè)參數(shù)求其平方根 函數(shù)文件內(nèi)容為 function c = calnar(a,b) %calnar.m: example2-4 %example2-4 if (nargin = = 1) c=abs(a); elseif (nargin = = 2) c=sqrt(a.2 + b.2); end,MATLAB SDU,39,主函數(shù)和子函數(shù),多個(gè)函數(shù)代碼,第一個(gè)是主函數(shù),其它是子函數(shù);主函數(shù)可外部調(diào)用,子函數(shù)不行;多個(gè)子函數(shù)排列次序可改變 例:定義了一個(gè)stat函數(shù),可以求一個(gè)向量的

23、均值和均方差,stat.m文件內(nèi)容如下: function mean,stdev = stat(x) n = length(x); mean = avg(x,n); stdev = sqrt(sum(x-avg(x,n).2)/n); function mean = avg(x,n) mean = sum(x)/n;,MATLAB SDU,40,子函數(shù)的性質(zhì):,每個(gè)子函數(shù)的第一行是其自己的函數(shù)申明行。 在M函數(shù)文件內(nèi),主函數(shù)的位置不可改變,但子函數(shù)的排列次序可任意改變。 子函數(shù)只能被處于同一文件的主函數(shù)或其他子函數(shù)調(diào)用。 在M函數(shù)文件中,任何指令通過(guò)“名字”對(duì)函數(shù)進(jìn)行調(diào)用時(shí),子函數(shù)的優(yōu)先級(jí)僅次

24、于內(nèi)裝函數(shù)。 同一文件的主函數(shù)、子函數(shù)的工作空間都是彼此獨(dú)立的。各函數(shù)間的信息,或通過(guò)輸入輸出宗量傳遞,或通過(guò)全局變量傳遞,或通過(guò)跨空間指令傳遞。 help, lookfor等幫助指令都不能提供關(guān)于子函數(shù)的任何幫助信息。(需要通過(guò)主函數(shù)),MATLAB SDU,41,二、MATLAB控制流,for循環(huán)結(jié)構(gòu) while循環(huán)結(jié)構(gòu) if-else-end分支結(jié)構(gòu) switch-case結(jié)構(gòu) try-catch結(jié)構(gòu) 控制程序流的其它常用指令,MATLAB SDU,42,1、for循環(huán)結(jié)構(gòu),for x=array (commands) end,MATLAB SDU,43,1、for循環(huán)結(jié)構(gòu),For循環(huán)的

25、結(jié)構(gòu)以及含義和其他高級(jí)語(yǔ)言的結(jié)構(gòu)和含義基本一致。 一個(gè)簡(jiǎn)單的for循環(huán)示例。 和其他語(yǔ)言一樣for循環(huán)可以有多重循環(huán)。 例:利用for循環(huán)求1!+2!+3!+ +5!的值,MATLAB SDU,44,例:利用for循環(huán)求1!+2!+3!+ +5!的值 sum=0; for i=1:5 pdr=1; for k=1:i pdr=pdr*k; end sum=sum+pdr; end,sum = 153,MATLAB SDU,45,2、while循環(huán)結(jié)構(gòu),while expression (commands) end,與for循環(huán)設(shè)置固定循環(huán)次數(shù)來(lái)執(zhí)行循環(huán)體相比較,MATLAB中的while循環(huán)是

26、應(yīng)用邏輯表達(dá)式來(lái)設(shè)置與判斷是否執(zhí)行循環(huán)體,循環(huán)次數(shù)依邏輯判斷條件來(lái)決定,循環(huán)次數(shù)是不固定的。 例:Fibonacci數(shù)組的元素滿足Fibonacci規(guī)則:a k+2=ak+ak+1,(k=1,2,);且a1=a2=1?,F(xiàn)要求該數(shù)組中第一個(gè)大于10000的元素。,MATLAB SDU,46,MATLAB SDU,47,a(1)=1;a(2)=1;i=2; while a(i)=10000 a(i+1)=a(i-1)+a(i); %當(dāng)現(xiàn)有的元素仍小于10000時(shí),求解下一個(gè)元素。 i=i+1; end; i,a(i),MATLAB SDU,48,Break/continue語(yǔ)句,break語(yǔ)句用來(lái)

27、退出for循環(huán)和while循環(huán)。 注意:break用與終止for循環(huán)或者while循環(huán)結(jié)構(gòu),當(dāng)在循環(huán)結(jié)構(gòu)內(nèi)執(zhí)行該命令時(shí),程序?qū)⑻鲅h(huán)結(jié)構(gòu),執(zhí)行循環(huán)結(jié)構(gòu)外面的下一條語(yǔ)句。當(dāng)為嵌套循環(huán)結(jié)構(gòu)時(shí),break只是跳出當(dāng)前的循環(huán)結(jié)構(gòu) 。 continue語(yǔ)句是控制的當(dāng)前的一個(gè)循環(huán),當(dāng)在循環(huán)結(jié)構(gòu)內(nèi)執(zhí)行continue命令后,程序?qū)⑻^(guò)此次循環(huán)剩下的那些執(zhí)行語(yǔ)句,而繼續(xù)執(zhí)行下一次循環(huán)。 在實(shí)際應(yīng)用中,break和continue命令常跟if條件結(jié)構(gòu)相結(jié)合 例:用for循環(huán)指令來(lái)尋求Fibonacc數(shù)組中第一個(gè)大于10000的元素。,MATLAB SDU,49,clear n=100; a=ones(1,n)

28、; for i=3:n a(i)=a(i-1)+a(i-2); if a(i)10000 a(i), break; %跳出所在的一級(jí)循環(huán)。 end; end, i,MATLAB SDU,50,3、if-else-end分支結(jié)構(gòu),if-else-end指令為程序流提供了一種分支結(jié)構(gòu),它最常用的使用方式:,MATLAB SDU,51,執(zhí)行過(guò)程,MATLAB SDU,52,注意,在if條件結(jié)構(gòu)中,elseif語(yǔ)句組部分可以沒有(0個(gè)),也可以是多個(gè)(m個(gè)),但是else語(yǔ)句組部分最多是一個(gè)。 if-end的一一配對(duì):也就是說(shuō)有一個(gè)if引導(dǎo)的條件,必然需要一個(gè)end來(lái)對(duì)應(yīng)。,MATLAB SDU,53

29、,例,一個(gè)簡(jiǎn)單的分支結(jié)構(gòu) 兩個(gè)分支結(jié)構(gòu) 多分支結(jié)構(gòu),MATLAB SDU,54,%一個(gè)簡(jiǎn)單的分支結(jié)構(gòu) clear cost=10; number=input(number =); if number8 sums=number*0.95*cost; end, sums %兩個(gè)分支結(jié)構(gòu) x=input(x=); if x=10 t=0:0.1*pi:2*pi;y=x*sin(t);plot(t,y) else t=0:0.1*pi:2*pi;y=x/10*cos(t);plot(t,y) end,MATLAB SDU,55,多分支結(jié)構(gòu): 設(shè)某批發(fā)貿(mào)易公司從事蘋果批發(fā),當(dāng)客戶購(gòu)買5000件以上,15

30、元/件;25005000件,16元/件;10002500件,17元/件;5001000件,18元/件;250500件,19元/件;100250件,20元/件;50100件,22元/件;1050件,24元/件;9件以下,28元/件。試編寫程序根據(jù)客戶購(gòu)買的件數(shù),求出總的 金額數(shù)。,MATLAB SDU,56,n=input(請(qǐng)輸入客戶擬購(gòu)買蘋果的件數(shù)); if n=5000 sum=15*n; else if 5000n,MATLAB SDU,57,4、switch-case結(jié)構(gòu),switch ex case test1 (commands1) case test2 (commands2) ca

31、se testk (commandsk) otherwise (commands) end,MATLAB SDU,58,MATLAB SDU,59,例2-10 用switch結(jié)構(gòu)編寫程序,實(shí)現(xiàn)判斷鍵盤輸入的任意一個(gè)實(shí)數(shù)是正數(shù)、負(fù)數(shù)還是零。 用switch結(jié)構(gòu)實(shí)現(xiàn)的程序內(nèi)容如下: va = input(請(qǐng)輸入數(shù)值); t=va/abs(va); switch t case -1 disp(輸入為負(fù)數(shù)); case 1 disp(輸入為正數(shù)); otherwise disp(輸入為零);; end,MATLAB SDU,60,注意,switch后面的表達(dá)式的值既可以是數(shù)值,也可以是字符串。 每一個(gè)

32、case子句后面可以處理多個(gè)條件,此時(shí),多個(gè)條件要用單元數(shù)組的形式表示,當(dāng)其中switch的表達(dá)式的值只需要滿足單元數(shù)組的任一值都會(huì)執(zhí)行相對(duì)應(yīng)的語(yǔ)言組。,MATLAB SDU,61,例2-11 用switch結(jié)構(gòu)編寫程序,實(shí)現(xiàn)判斷鍵盤輸入的任一110的數(shù)為偶數(shù)、奇數(shù)還是其他。 用switch結(jié)構(gòu)編寫程序內(nèi)容如下: va = input(請(qǐng)輸入數(shù)值); switch va case 1,3,5,7,9 disp(輸入為奇數(shù)); case 2,4,6,8,10 disp(輸入為偶數(shù)); otherwise disp(輸入非奇非偶);; end,MATLAB SDU,62,%劃分區(qū)域:滿分(100)

33、,優(yōu)秀(90-99),良好(80-89),及格(60-79),不及格(60)。 for i=1:10;ai=89+i;bi=79+i;ci=69+i;di=59+i;end;c=d,c; Name= Jack,Marry,Peter, Rose, Tom;%元胞數(shù)組 Mark=72,83,56,94,100;Rank=cell(1,5); %創(chuàng)建一個(gè)含5個(gè)元素的構(gòu)架數(shù)組S,它有三個(gè)域。 S=struct(Name,Name,Marks,Mark,Rank,Rank); %根據(jù)學(xué)生的分?jǐn)?shù),求出相應(yīng)的等級(jí)。 for i=1:5 switch S(i).Marks case 100 %得分為100時(shí)

34、 S(i).Rank=滿分; %列為滿分等級(jí) case a %得分在90和99之間 S(i).Rank= 優(yōu)秀; %列為優(yōu)秀等級(jí) case b %得分在80和89之間 S(i).Rank= 良好; %列為良好等級(jí) case c %得分在60和79之間 S(i).Rank= 及格; %列為及格等級(jí) otherwise %得分低于60。 S(i).Rank=不及格; %列為不及格等級(jí) end end %將學(xué)生姓名,得分,登記等信息打印出來(lái)。 disp(學(xué)生姓名 , 得分 , 等級(jí));disp( ) for i=1:5; disp(S(i).Name,blanks(6),num2str(S(i).M

35、arks),blanks(6),S(i).Rank); end;,MATLAB SDU,63,5、try-catch結(jié)構(gòu),錯(cuò)誤控制指令 try (commands1)組命令1總被執(zhí)行。若正確,則跳出此結(jié)構(gòu) catch (commands2)僅當(dāng)組命令1出現(xiàn)執(zhí)行錯(cuò)誤,組命令2才被執(zhí)行 end,MATLAB SDU,64,例2-12 判斷下列程序的運(yùn)行結(jié)果。 程序內(nèi)容如下: a = 1 2; 3 4; 5 6; b = 7 8; 9 10; try a*2 a.*b a*b catch disp(發(fā)生錯(cuò)誤) end lasterr,MATLAB SDU,65,%try-catch結(jié)構(gòu)應(yīng)用實(shí)例 cl

36、ear, N=4; A=magic(3); %設(shè)置3行3列矩陣A。 try A_N=A(N,:),取A的第N行元素 catch A_end=A(end,:),%如果取A(N,:)出錯(cuò),則改取A的最后一行。 end lasterr%顯示出錯(cuò)原因,MATLAB SDU,66,echo命令,通常運(yùn)行一個(gè)M文件時(shí),文件中的命令不在屏幕上顯示出來(lái)。 如果M文件被執(zhí)行之前,首先在MATLAB命令窗中輸入echo命令并予以執(zhí)行,然后再運(yùn)行M文件,則M文件中的程序?qū)⒃贛ATLAB命令窗中顯示出來(lái),但影響程序的執(zhí)行速度。 若要清除echo命令的影響,在MATLAB命令窗中鍵入“echo off”并回車即可。,M

37、ATLAB SDU,67,Input( )語(yǔ)句,Input( )語(yǔ)句用在M文件中,執(zhí)行到input( )命令時(shí),MATLAB暫停程序的執(zhí)行,等待用戶用鍵盤賦值給input( )指定的變量。 Input( )語(yǔ)句還可用于等待用戶輸入MATLAB表達(dá)式和字符串,跟其他語(yǔ)句配合,可以實(shí)現(xiàn)“菜單”的功能。不過(guò)MATLAB中有專用的菜單設(shè)置命令,一般并不使用input( )來(lái)建立。,MATLAB SDU,68,keyboard命令,類似于input( )但功能更強(qiáng)的keyboard命令是等待鍵盤輸入內(nèi)容,并把鍵盤輸入的內(nèi)容作為一個(gè)M文件來(lái)調(diào)用。 例如,建立一個(gè)M文件us.m: x=0:0.01*pi:2

38、*pi; keyboard 執(zhí)行us.m,計(jì)算機(jī)返回一個(gè)提示符:k 此時(shí),可以輸入一個(gè)函數(shù),但要注意這個(gè)函數(shù)自變量和因變量的對(duì)應(yīng)關(guān)系。 return命令返回正常狀態(tài),表示增加輸入的文本內(nèi)容輸入完畢,這一條命令是必須的。,MATLAB SDU,69,6、控制程序流的其它常用指令(1),MATLAB SDU,70,控制程序流的其它常用指令(2),MATLAB SDU,71,四、程序調(diào)試與優(yōu)化,程序調(diào)試概述 一般調(diào)試技巧 程序調(diào)試器的使用 程序設(shè)計(jì)的優(yōu)化,MATLAB SDU,72,程序調(diào)試概述,MATLAB的調(diào)試器(Debugger)可以迅速地幫您找出程序錯(cuò)誤所在,其功能包含: 查詢每一個(gè)函數(shù)的工作空間(Workspace). 顯示函數(shù)調(diào)用的堆棧(Function Call Stack). 一行一行地執(zhí)行M文件.,MATLAB SDU,73,一般調(diào)試技巧,一般而言,計(jì)算機(jī)程序可能發(fā)生的錯(cuò)誤可分為兩種: 語(yǔ)法錯(cuò)誤(Syntax Errors) 邏輯錯(cuò)誤(Logic Errors) 一般檢測(cè)邏輯錯(cuò)誤的方法: 刪除表達(dá)式最尾端的分號(hào)。 若調(diào)試一個(gè)單獨(dú)函數(shù),可在其第一行的函數(shù)申明行加上%,并定義輸入變量的值,直接以腳本的方式來(lái)執(zhí)行此M文件,并保留所有變量于MATLAB工作空間中,以便后續(xù)查看及調(diào)試。 在程序中加入keyboard命令,可使程序執(zhí)行至此處

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論