版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、MATLAB SDU,1,第3章 matlab的程序設(shè)計初步,MATLAB SDU,2,OUTLINE,MATLAB的m文件的創(chuàng)建和使用 MATLAB程序控制結(jié)構(gòu) 程序設(shè)計 調(diào)試的基本方法,MATLAB SDU,3,什么是m文件,用戶如想靈活應(yīng)用matlab去解決實際問題,充分調(diào)用matlab的科學(xué)技術(shù)資源,就需要編輯m文件 包含matlab語言代碼的文件稱為m文件,其擴展名為m。 編輯m文件可使用各種文本編輯器。,MATLAB SDU,4,2. m文件 m文件的語法類似于c語言,但又有其自身特點。它只是一個簡單的ASCII碼文本文件,執(zhí)行程序時逐行解釋運行程序,matlab是解釋性的編程語言
2、。 m文件有兩類 獨立的m文件 稱命令文件,腳本(script) 可調(diào)用m文件 稱函數(shù)文件 Functions,MATLAB SDU,5,表3-1腳本文件與函數(shù)文件的區(qū)別,MATLAB SDU,6,Review: matlab的工作模式,指令驅(qū)動模式 通常matlab以指令驅(qū)動模式工作,即在matlab 窗口下當(dāng)用戶輸入單行指令時,matlab 立即處理這條指令,并顯示結(jié)果,這就是matlab命令行方式。 命令行操作時,matlab窗口只允許一次執(zhí)行一行上的一個或幾個語句。,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 命令行方式程序可讀性差,而且不能存儲,對于處理復(fù)雜問題和大量數(shù)據(jù)時是不方便的,應(yīng)編寫成能存儲的程序文件。,MATLAB SDU,9,m文件模式 將matlab語句構(gòu)成的程序存儲成以m為擴展名的文件,然后再執(zhí)行該程序文件,這種工作模式稱為
4、程序文件模式。 程序文件不能在指令窗口下建立,因為指令窗口只允許一次執(zhí)行一行上的一個或幾個語句。,MATLAB SDU,10,M 文件的創(chuàng)建和編輯,不管是創(chuàng)建或編輯腳本文件還是函數(shù)文件,可以使用各種文本編輯器: 例如Windows系統(tǒng)下的記事本,其它商業(yè)化軟件UltraEdit,EditPlus等等, 但是儲存格式必須是 ASCII 的格式,并且必須以.m 為后綴名。 通常情況下可以直接使用MATLAB中內(nèi)置的M文件編輯器。,MATLAB SDU,11,2. 點擊file Save Workspace As,將工作空間中的內(nèi)容存入文件。 *edit 用各種edit 編輯器編制m文件。 edit
5、 用matlab自帶的編輯器編制m文件。 word 用word編輯m文件。 m文件編輯器的設(shè)定 m文件編輯器可自己設(shè)定,設(shè)定方法是matlab命令窗口 options 菜單下點擊 Edit Preference 選定m文件編輯器。,MATLAB SDU,12,m文件編輯器缺省設(shè)置是 matlab editor 還可設(shè)成:其他的Text Editor 從“file” “preference” editor/debugger設(shè)置 注意:所創(chuàng)建的m文件必須納入matlab搜索路 徑后,才能在matlab命令窗口運行。,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)二進制格式保存的數(shù)據(jù)文件,可將工作空間中有用的數(shù)據(jù)變量保存下來。 mat文件的生成和調(diào)用是由函數(shù)save和load完成的。,MATLAB SDU,15,M文件結(jié)構(gòu),良好習(xí)慣建議 1. 程序盡量做到簡單易懂; 2. 所有變量都用小寫,并且含義清晰明了,如用year作為變量保存年份等; 3. 帶有必要的注釋,這樣有助于他人和自己能快速知道程序執(zhí)行的目的或者算法
7、的含義,另外也可以有助于追溯記錄程序的更新過程。,MATLAB SDU,16,腳本(命令)文件(Script),命令文件 簡單的m文件 命令文件實際上是一串指令的集合,與在命令窗口逐行執(zhí)行文件中的所有指令,其結(jié)果是一樣的。沒有輸入輸出參數(shù)。 “腳本”本身反映這樣一個事實:MATLAB只是按文件所寫的指令執(zhí)行。 M腳本(命令)文件的構(gòu)成較簡單,其特點是: 它只是一串按用戶意圖排列而成的(包括控制流向指令在內(nèi)的)MATLAB指令集。 腳本文件運行后,所產(chǎn)生的所有變量都駐留在MATLAB基本工作空間(Base workspace)中。只要不使用clear指令加以清除,且MATLAB指令窗不關(guān)閉,這些
8、變量將一直保存在基本工作空間中?;竟ぷ骺臻g隨MATLAB的啟動而產(chǎn)生;只有關(guān)閉MATLAB時,該基本空間才被刪除。,MATLAB SDU,17,M函數(shù)文件( Function),與腳本(命令)文件不同,函數(shù)文件(Function file)猶如一個“黑箱”。從外界只能看到傳給它的輸入量和送出來的計算結(jié)果,而內(nèi)部運作是藏而不見的。,MATLAB SDU,18,函數(shù)文件的特點:,從形式上看,與腳本文件不同,函數(shù)文件的第一行總是以“function”引導(dǎo)的“函數(shù)申明行”(Function declaration line)。該行還羅列出函數(shù)與外界聯(lián)系的全部“標(biāo)稱”輸入輸出宗量。但對“輸入輸出宗量”
9、的標(biāo)稱數(shù)目并沒有限制,即可以完全沒有輸入輸出宗量,也可以是任意數(shù)目。 MATLAB允許使用比“標(biāo)稱數(shù)目”較少的輸入輸出宗量,實現(xiàn)對函數(shù)的調(diào)用。 從運行上看,與腳本文件運行不同,每當(dāng)函數(shù)文件運行,MATLAB就會專門為它開辟一個臨時工作空間,稱之謂函數(shù)工作空間(Function workspace)。所有中間變量都存放在函數(shù)工作空間中。當(dāng)執(zhí)行完文件最后一條指令或遇到return時,就結(jié)束該函數(shù)文件的運行,同時該臨時函數(shù)空間及其所有的中間變量就立即被清除。 函數(shù)空間隨具體M函數(shù)文件的被調(diào)用而產(chǎn)生,隨調(diào)用結(jié)束而刪除。函數(shù)空間是相對獨立的、臨時的。在MATLAB整個運行期間,可以產(chǎn)生任意多個臨時函數(shù)空
10、間。 假如在函數(shù)文件中,發(fā)生對某腳本文件的調(diào)用,那么該腳本文件運行產(chǎn)生的所有變量都存放于該函數(shù)空間之中,而不是存放在基本空間。,MATLAB SDU,19,函數(shù)m文件的格式: function 返回變量=函數(shù)名(輸入變量) 注釋說明語句段 程序語句段 特定規(guī)則: 函數(shù)m文件第一行必須以單詞function作為引導(dǎo)詞,必須遵循如下形式: function =() m文件的文件名必須是 .m。 程序中的變量均為局部變量,不保存在工作空間中。其變量只在函數(shù)運行期間有效。,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)利用藍實線畫半徑為 r 的圓周線. % circle(r,s)利用串 s 指定的線色畫半徑為 r 的圓周線. % sa=circle(r)計算圓面積,并畫半徑為 r 的藍色圓面. % sa=circle(r,s)計算圓面積,并畫半徑為 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ù)文件名;運用關(guān)鍵詞簡要描述的函數(shù)功能。該H1行供lookfor關(guān)鍵詞查詢和help在線幫助使用。,MATLAB SDU,23,在線幫助文本(Help text)區(qū):,H1行及其之后的連續(xù)以%開頭的所有注釋行構(gòu)
13、成整個在線幫助文本。它通常包括:函數(shù)輸入輸出宗量的含義,調(diào)用格式說明。,MATLAB SDU,24,編寫和修改記錄:,與在線幫助文本區(qū)相隔一個空行,也以%開頭,標(biāo)志編寫及修改該M文件的作者和日期、版本記錄。它用于軟件檔案管理。,MATLAB SDU,25,函數(shù)體(Function body):,為清晰起見,它與前面的注釋行以空行相隔。這部分內(nèi)容由實現(xiàn)該M函數(shù)文件功能的MATLAB指令組成。它接收輸入宗量,進行程序流控制,得到輸出宗量。其中為閱讀、理解方便,也配置適當(dāng)?shù)目招泻妥⑨?。若僅從運算角度看,惟有函數(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) 實際應(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的絕對值 det(a) 求行列式的值 等等。matlab擁有大量的內(nèi)置數(shù)學(xué)函數(shù),供我們在數(shù)值運算和符號運算中調(diào)用。,MATLAB SDU,29,II 函數(shù)m文件 需要輸入變量,返回輸出變量 matlab用戶可以根據(jù)需要編輯自己的m文件,它們可以像庫函數(shù)一樣方便的調(diào)用,從而極大地擴展了matlab 的能力。 對于某一類特殊問題,如創(chuàng)建了許多m函
17、數(shù)文件,則可形成新的工具箱。 這種用matlab語言創(chuàng)建定義新的matlab函數(shù)的功能,正體現(xiàn)了matlab語言強大的擴展功能。,MATLAB SDU,30,M文件命名以及調(diào)用,對于腳本文件的命名,規(guī)則和變量的命名規(guī)則一致,即必須以字母開頭,其余部分可以是字母、數(shù)字和下劃線的任意組合。調(diào)用腳本文件時只需要在MATLAB的主窗口輸入腳本文件的名字(不帶后綴),腳本文件內(nèi)的內(nèi)容就會得到執(zhí)行。,MATLAB SDU,31,函數(shù)文件命名與調(diào)用,函數(shù)文件的命名規(guī)則除了和變量的命名規(guī)則一致以往,另外慣用的規(guī)則是函數(shù)文件名和函數(shù)名相一致。 調(diào)用方式 out1,out2,.,outN=functionname
18、(in1,in2.inN) 輸出方括號,輸入小括號,MATLAB SDU,32,例,利用函數(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,補充:函數(shù)的遞歸調(diào)用,遞歸調(diào)用:函數(shù)調(diào)用其本身稱為函數(shù)的遞歸調(diào)用
19、例如求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文件時,matlab會對該文件進行解析,并生成相應(yīng)的內(nèi)部偽代碼(pseudocode, pcode)存放在內(nèi)存,再次調(diào)用時直接調(diào)用內(nèi)存中的pcode,避免對相同M文件重復(fù)解析。 可以用pcode 產(chǎn)生偽代碼:難以閱讀,保密性好,MATLAB SDU,36,局部變量和全局變量,局部(Local)變量 它存在于函數(shù)
20、空間內(nèi)部的中間變量,產(chǎn)生于該函數(shù)的運行過程中,其影響范圍也僅限于該函數(shù)本身。 全局(Global)變量 通過global指令,MATLAB也允許幾個不同的函數(shù)空間以及基本空間共享一個變量。這種被共享的變量稱為全局變量。每個希望共享全局變量的函數(shù)或MATLAB基本工作空間,必須逐個用global對具體變量加以專門定義。沒采用global定義的函數(shù)或基本空間,將無權(quán)享用全局變量。 如果某個函數(shù)的運作使全局變量的內(nèi)容發(fā)生了變化,那么其他函數(shù)空間以及基本工作空間中的同名變量也就隨之變化。 除非與全局變量聯(lián)系的所有工作空間都被刪除,否則全局變量依然存在。 通常情況下會選取全部是大寫字母的命名為全局變量名
21、。全局變量的使用可以減少參數(shù)的傳遞,如果合理的使用可以提高程序執(zhí)行效率,但是同時會損害函數(shù)的封裝性,增加程序調(diào)試和維護的難度,因此一般不推薦使用,MATLAB SDU,37,參數(shù)傳遞,在調(diào)用函數(shù)時,MATLAB用兩個永久變量nargin和nargout分別記錄調(diào)用該函數(shù)時的輸入實參和輸出實參的個數(shù)。只要在函數(shù)文件中包含這兩個變量,就可以準(zhǔn)確地知道該函數(shù)文件被調(diào)用時的輸入輸出參數(shù)個數(shù),從而決定函數(shù)如何進行處理。 nargin在函數(shù)體內(nèi),用于獲取實際輸入宗量 nargout在函數(shù)體內(nèi),用于獲取實際輸出宗量 nargin(fun) 獲取fun指定函數(shù)的標(biāo)稱輸入宗量數(shù) nargout(fun) 獲取f
22、un指定函數(shù)的標(biāo)稱輸出宗量數(shù),MATLAB SDU,38,例3-4 定義一個函數(shù),當(dāng)輸入1個參數(shù)求其絕對值,輸入2個參數(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ù),多個函數(shù)代碼,第一個是主函數(shù),其它是子函數(shù);主函數(shù)可外部調(diào)用,子函數(shù)不行;多個子函數(shù)排列次序可改變 例:定義了一個stat函數(shù),可以求一個向量的
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ì):,每個子函數(shù)的第一行是其自己的函數(shù)申明行。 在M函數(shù)文件內(nèi),主函數(shù)的位置不可改變,但子函數(shù)的排列次序可任意改變。 子函數(shù)只能被處于同一文件的主函數(shù)或其他子函數(shù)調(diào)用。 在M函數(shù)文件中,任何指令通過“名字”對函數(shù)進行調(diào)用時,子函數(shù)的優(yōu)先級僅次
24、于內(nèi)裝函數(shù)。 同一文件的主函數(shù)、子函數(shù)的工作空間都是彼此獨立的。各函數(shù)間的信息,或通過輸入輸出宗量傳遞,或通過全局變量傳遞,或通過跨空間指令傳遞。 help, lookfor等幫助指令都不能提供關(guān)于子函數(shù)的任何幫助信息。(需要通過主函數(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)以及含義和其他高級語言的結(jié)構(gòu)和含義基本一致。 一個簡單的for循環(huán)示例。 和其他語言一樣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ù)來執(zhí)行循環(huán)體相比較,MATLAB中的while循環(huán)是
26、應(yīng)用邏輯表達式來設(shè)置與判斷是否執(zhí)行循環(huán)體,循環(huán)次數(shù)依邏輯判斷條件來決定,循環(huán)次數(shù)是不固定的。 例:Fibonacci數(shù)組的元素滿足Fibonacci規(guī)則:a k+2=ak+ak+1,(k=1,2,);且a1=a2=1?,F(xiàn)要求該數(shù)組中第一個大于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時,求解下一個元素。 i=i+1; end; i,a(i),MATLAB SDU,48,Break/continue語句,break語句用來
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í)行該命令時,程序?qū)⑻鲅h(huán)結(jié)構(gòu),執(zhí)行循環(huán)結(jié)構(gòu)外面的下一條語句。當(dāng)為嵌套循環(huán)結(jié)構(gòu)時,break只是跳出當(dāng)前的循環(huán)結(jié)構(gòu) 。 continue語句是控制的當(dāng)前的一個循環(huán),當(dāng)在循環(huán)結(jié)構(gòu)內(nèi)執(zhí)行continue命令后,程序?qū)⑻^此次循環(huán)剩下的那些執(zhí)行語句,而繼續(xù)執(zhí)行下一次循環(huán)。 在實際應(yīng)用中,break和continue命令常跟if條件結(jié)構(gòu)相結(jié)合 例:用for循環(huán)指令來尋求Fibonacc數(shù)組中第一個大于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; %跳出所在的一級循環(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í)行過程,MATLAB SDU,52,注意,在if條件結(jié)構(gòu)中,elseif語句組部分可以沒有(0個),也可以是多個(m個),但是else語句組部分最多是一個。 if-end的一一配對:也就是說有一個if引導(dǎo)的條件,必然需要一個end來對應(yīng)。,MATLAB SDU,53
29、,例,一個簡單的分支結(jié)構(gòu) 兩個分支結(jié)構(gòu) 多分支結(jié)構(gòu),MATLAB SDU,54,%一個簡單的分支結(jié)構(gòu) clear cost=10; number=input(number =); if number8 sums=number*0.95*cost; end, sums %兩個分支結(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)客戶購買5000件以上,15
30、元/件;25005000件,16元/件;10002500件,17元/件;5001000件,18元/件;250500件,19元/件;100250件,20元/件;50100件,22元/件;1050件,24元/件;9件以下,28元/件。試編寫程序根據(jù)客戶購買的件數(shù),求出總的 金額數(shù)。,MATLAB SDU,56,n=input(請輸入客戶擬購買蘋果的件數(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)編寫程序,實現(xiàn)判斷鍵盤輸入的任意一個實數(shù)是正數(shù)、負數(shù)還是零。 用switch結(jié)構(gòu)實現(xiàn)的程序內(nèi)容如下: va = input(請輸入數(shù)值); t=va/abs(va); switch t case -1 disp(輸入為負數(shù)); case 1 disp(輸入為正數(shù)); otherwise disp(輸入為零);; end,MATLAB SDU,60,注意,switch后面的表達式的值既可以是數(shù)值,也可以是字符串。 每一個
32、case子句后面可以處理多個條件,此時,多個條件要用單元數(shù)組的形式表示,當(dāng)其中switch的表達式的值只需要滿足單元數(shù)組的任一值都會執(zhí)行相對應(yīng)的語言組。,MATLAB SDU,61,例2-11 用switch結(jié)構(gòu)編寫程序,實現(xiàn)判斷鍵盤輸入的任一110的數(shù)為偶數(shù)、奇數(shù)還是其他。 用switch結(jié)構(gòu)編寫程序內(nèi)容如下: va = input(請輸入數(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)建一個含5個元素的構(gòu)架數(shù)組S,它有三個域。 S=struct(Name,Name,Marks,Mark,Rank,Rank); %根據(jù)學(xué)生的分數(shù),求出相應(yīng)的等級。 for i=1:5 switch S(i).Marks case 100 %得分為100時
34、 S(i).Rank=滿分; %列為滿分等級 case a %得分在90和99之間 S(i).Rank= 優(yōu)秀; %列為優(yōu)秀等級 case b %得分在80和89之間 S(i).Rank= 良好; %列為良好等級 case c %得分在60和79之間 S(i).Rank= 及格; %列為及格等級 otherwise %得分低于60。 S(i).Rank=不及格; %列為不及格等級 end end %將學(xué)生姓名,得分,登記等信息打印出來。 disp(學(xué)生姓名 , 得分 , 等級);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),錯誤控制指令 try (commands1)組命令1總被執(zhí)行。若正確,則跳出此結(jié)構(gòu) catch (commands2)僅當(dāng)組命令1出現(xiàn)執(zhí)行錯誤,組命令2才被執(zhí)行 end,MATLAB SDU,64,例2-12 判斷下列程序的運行結(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ā)生錯誤) end lasterr,MATLAB SDU,65,%try-catch結(jié)構(gòu)應(yīng)用實例 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,:)出錯,則改取A的最后一行。 end lasterr%顯示出錯原因,MATLAB SDU,66,echo命令,通常運行一個M文件時,文件中的命令不在屏幕上顯示出來。 如果M文件被執(zhí)行之前,首先在MATLAB命令窗中輸入echo命令并予以執(zhí)行,然后再運行M文件,則M文件中的程序?qū)⒃贛ATLAB命令窗中顯示出來,但影響程序的執(zhí)行速度。 若要清除echo命令的影響,在MATLAB命令窗中鍵入“echo off”并回車即可。,M
37、ATLAB SDU,67,Input( )語句,Input( )語句用在M文件中,執(zhí)行到input( )命令時,MATLAB暫停程序的執(zhí)行,等待用戶用鍵盤賦值給input( )指定的變量。 Input( )語句還可用于等待用戶輸入MATLAB表達式和字符串,跟其他語句配合,可以實現(xiàn)“菜單”的功能。不過MATLAB中有專用的菜單設(shè)置命令,一般并不使用input( )來建立。,MATLAB SDU,68,keyboard命令,類似于input( )但功能更強的keyboard命令是等待鍵盤輸入內(nèi)容,并把鍵盤輸入的內(nèi)容作為一個M文件來調(diào)用。 例如,建立一個M文件us.m: x=0:0.01*pi:2
38、*pi; keyboard 執(zhí)行us.m,計算機返回一個提示符:k 此時,可以輸入一個函數(shù),但要注意這個函數(shù)自變量和因變量的對應(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è)計的優(yōu)化,MATLAB SDU,72,程序調(diào)試概述,MATLAB的調(diào)試器(Debugger)可以迅速地幫您找出程序錯誤所在,其功能包含: 查詢每一個函數(shù)的工作空間(Workspace). 顯示函數(shù)調(diào)用的堆棧(Function Call Stack). 一行一行地執(zhí)行M文件.,MATLAB SDU,73,一般調(diào)試技巧,一般而言,計算機程序可能發(fā)生的錯誤可分為兩種: 語法錯誤(Syntax Errors) 邏輯錯誤(Logic Errors) 一般檢測邏輯錯誤的方法: 刪除表達式最尾端的分號。 若調(diào)試一個單獨函數(shù),可在其第一行的函數(shù)申明行加上%,并定義輸入變量的值,直接以腳本的方式來執(zhí)行此M文件,并保留所有變量于MATLAB工作空間中,以便后續(xù)查看及調(diào)試。 在程序中加入keyboard命令,可使程序執(zhí)行至此處
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度農(nóng)產(chǎn)品批發(fā)市場中英文購銷合同范本2篇
- 生產(chǎn)科研樓及倉庫建設(shè)項目申請備案可行性研究報告
- 二零二五年度辦事處跨境電商合作合同3篇
- 二零二五年養(yǎng)殖場技術(shù)研發(fā)合同3篇
- 二零二五年度房產(chǎn)代持協(xié)議范本解讀2篇
- 2025年度體育場館建設(shè)與運營管理合同3篇
- 2025年度工業(yè)自動化控制系統(tǒng)安裝與調(diào)試合同
- 教育使命:實現(xiàn)理想
- 二零二五年度企業(yè)多人股權(quán)投資與產(chǎn)業(yè)鏈整合合同3篇
- 教學(xué)的藝術(shù)模板
- DB11T 1611-2018 建筑工程組合鋁合金模板施工技術(shù)規(guī)范
- 湖南省益陽市2023-2024學(xué)年高二上學(xué)期普通高中期末質(zhì)量檢測數(shù)學(xué)試題 含解析
- 物業(yè)項目移交清單表
- 2024-2030年中國核醫(yī)學(xué)行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略分析報告
- VTE評分量表解讀 課件2024.8
- 手術(shù)室安全核查制度及流程課件
- 2024-2025學(xué)年高中英語選擇性必修 第二冊北師大版(2019)教學(xué)設(shè)計合集
- 高標(biāo)準(zhǔn)農(nóng)田跟蹤審計、工程中間計量、變更價格調(diào)整及竣工結(jié)算審核項目 投標(biāo)方案(技術(shù)方案)
- 感恩節(jié)英文課件
- 慈溪市2024-2025學(xué)年四上數(shù)學(xué)期末教學(xué)質(zhì)量檢測模擬試題含解析
- 人教版小學(xué)一年級語文上冊全冊試卷全套含答案
評論
0/150
提交評論