第四講_MATLAB程序設(shè)計(jì)_第1頁
第四講_MATLAB程序設(shè)計(jì)_第2頁
第四講_MATLAB程序設(shè)計(jì)_第3頁
第四講_MATLAB程序設(shè)計(jì)_第4頁
第四講_MATLAB程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩53頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 M文件介紹 函數(shù)流程控制 函數(shù)變量 調(diào)試程序 優(yōu)化程序 1 M文件文件1.1 M文件概述文件概述 用用MATLAB語言編寫的程序,稱為語言編寫的程序,稱為M文件。文件。M文件可以根據(jù)調(diào)用方式的不同分為兩類:命令文件可以根據(jù)調(diào)用方式的不同分為兩類:命令文件文件(Script File)和函數(shù)文件和函數(shù)文件(Function File)。1.2 M文件的建立與打開文件的建立與打開 M文件是一個(gè)文本文件,它可以用任何編文件是一個(gè)文本文件,它可以用任何編輯程序來建立和編輯,而一般常用且最為輯程序來建立和編輯,而一般常用且最為方便的是使用方便的是使用MATLAB提供的文本編輯器。提供的文本編輯器。1建

2、立新的建立新的M文件文件 2打開已有的打開已有的M文件文件 函數(shù)式函數(shù)式 M 文件比命令式文件比命令式 M 文件相對復(fù)雜一些,文件相對復(fù)雜一些,命令文件不需要自帶參數(shù),也不一定返回結(jié)果,命令文件不需要自帶參數(shù),也不一定返回結(jié)果,而函數(shù)文件一般要自帶參數(shù),并且有返回結(jié)果,而函數(shù)文件一般要自帶參數(shù),并且有返回結(jié)果,以便于更好的把整個(gè)程序連為一段。函數(shù)文件也以便于更好的把整個(gè)程序連為一段。函數(shù)文件也可以不帶參數(shù),此時(shí)文件中一般使用一些全局變可以不帶參數(shù),此時(shí)文件中一般使用一些全局變量來實(shí)現(xiàn)與外界和其他函數(shù)之間的數(shù)據(jù)交換。量來實(shí)現(xiàn)與外界和其他函數(shù)之間的數(shù)據(jù)交換。 函數(shù)文件的第一行以函數(shù)文件的第一行以

3、function 開始,說明此文開始,說明此文件是一個(gè)函數(shù)。其實(shí)質(zhì)為用戶向件是一個(gè)函數(shù)。其實(shí)質(zhì)為用戶向 MATLAB 函數(shù)函數(shù)庫中添加的子函數(shù)。在默認(rèn)情況下,函數(shù)文件中庫中添加的子函數(shù)。在默認(rèn)情況下,函數(shù)文件中的變量都是局部變量,僅在函數(shù)運(yùn)行期間有效,的變量都是局部變量,僅在函數(shù)運(yùn)行期間有效,函數(shù)運(yùn)行結(jié)束后,這些變量將從工作區(qū)中清除。函數(shù)運(yùn)行結(jié)束后,這些變量將從工作區(qū)中清除。函數(shù)函數(shù)文件的基本結(jié)構(gòu)文件的基本結(jié)構(gòu)函數(shù)函數(shù)文件由文件由function語句引導(dǎo),其基本結(jié)構(gòu)為:語句引導(dǎo),其基本結(jié)構(gòu)為: function 輸出形參表輸出形參表=函數(shù)名函數(shù)名(輸入形參表輸入形參表) 注釋說明部分注釋說明部

4、分 函數(shù)體語句函數(shù)體語句其中以其中以function開頭的一行為引導(dǎo)行,表示該開頭的一行為引導(dǎo)行,表示該M文件是一個(gè)函數(shù)文件。函數(shù)名的命名規(guī)則文件是一個(gè)函數(shù)文件。函數(shù)名的命名規(guī)則與變量名相同。輸入形參為函數(shù)的輸入?yún)?shù),與變量名相同。輸入形參為函數(shù)的輸入?yún)?shù),輸出形參為函數(shù)的輸出參數(shù)。當(dāng)輸出形參多輸出形參為函數(shù)的輸出參數(shù)。當(dāng)輸出形參多于一個(gè)時(shí),則應(yīng)該用方括號(hào)括起來。于一個(gè)時(shí),則應(yīng)該用方括號(hào)括起來。 例例 編寫函數(shù)文件求半徑為編寫函數(shù)文件求半徑為r的圓的面的圓的面積和周長。積和周長。 函數(shù)文件如下:函數(shù)文件如下: function s,p=fcircle(r)%CIRCLE calculate t

5、he area and perimeter of a circle of radii r%r 圓半徑圓半徑%s 圓面積圓面積%p 圓周長圓周長s=pi*r*r;p=2*pi*r; 函數(shù)調(diào)用函數(shù)調(diào)用函數(shù)調(diào)用的一般格式是:函數(shù)調(diào)用的一般格式是: 輸出實(shí)參表輸出實(shí)參表=函數(shù)名函數(shù)名(輸入實(shí)參表輸入實(shí)參表) 要注意的是,函數(shù)調(diào)用時(shí)各實(shí)參出現(xiàn)要注意的是,函數(shù)調(diào)用時(shí)各實(shí)參出現(xiàn)的順序、個(gè)數(shù),應(yīng)與函數(shù)定義時(shí)形參的順序、個(gè)數(shù),應(yīng)與函數(shù)定義時(shí)形參的順序、個(gè)數(shù)一致,否則會(huì)出錯(cuò)。函的順序、個(gè)數(shù)一致,否則會(huì)出錯(cuò)。函數(shù)調(diào)用時(shí),先將實(shí)參傳遞給相應(yīng)的形數(shù)調(diào)用時(shí),先將實(shí)參傳遞給相應(yīng)的形參,從而實(shí)現(xiàn)參數(shù)傳遞,然后再執(zhí)行參,從而實(shí)

6、現(xiàn)參數(shù)傳遞,然后再執(zhí)行函數(shù)的功能。函數(shù)的功能。 例例 利用函數(shù)文件,實(shí)現(xiàn)直角坐標(biāo)利用函數(shù)文件,實(shí)現(xiàn)直角坐標(biāo)(x,y)與極坐標(biāo)與極坐標(biāo)(,)之間的轉(zhuǎn)換。之間的轉(zhuǎn)換。 函數(shù)文件函數(shù)文件tran.m:function rho,theta=tran(x,y)rho=sqrt(x*x+y*y);theta=atan(y/x); 調(diào)用調(diào)用tran.m的命令文件的命令文件main1.m:x=input(Please input x=:);y=input(Please input y=:);rho,the=tran(x,y);rhothe 例例 利用函數(shù)的遞歸調(diào)用,求利用函數(shù)的遞歸調(diào)用,求n!。!。 n!本身

7、就是以遞歸的形式定義的:本身就是以遞歸的形式定義的:顯然,求顯然,求n!需要求需要求(n-1)!,這時(shí)可采用遞歸調(diào),這時(shí)可采用遞歸調(diào)用。遞歸調(diào)用函數(shù)文件用。遞歸調(diào)用函數(shù)文件factor.m如下:如下:function f=factor(n)if n=A & c=a& c=0& c mtimes Inner matrix dimensions must agree.1for語句語句for語句的格式為:語句的格式為: for 循環(huán)變量循環(huán)變量=表達(dá)式表達(dá)式1:表達(dá)式表達(dá)式2:表達(dá)式表達(dá)式3 循環(huán)體循環(huán)體語句語句 end其中表達(dá)式其中表達(dá)式1的值為循環(huán)變量的初值,表達(dá)式的值為循環(huán)變量的初值,表達(dá)式2

8、的值為步長,表達(dá)式的值為步長,表達(dá)式3的值為循環(huán)變量的的值為循環(huán)變量的終值。步長為終值。步長為1時(shí),表達(dá)式時(shí),表達(dá)式2可以省略。可以省略。2.3 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)例例 一個(gè)三位整數(shù)各位數(shù)字的立方和等于該數(shù)本身則一個(gè)三位整數(shù)各位數(shù)字的立方和等于該數(shù)本身則稱該數(shù)為水仙花數(shù)。輸出全部水仙花數(shù)。稱該數(shù)為水仙花數(shù)。輸出全部水仙花數(shù)。 程序如下:程序如下:for m=100:999m1=fix(m/100); %求求m的百位數(shù)字的百位數(shù)字m2=rem(fix(m/10),10); %求求m的十位數(shù)字的十位數(shù)字m3=rem(m,10); %求求m的個(gè)位數(shù)字的個(gè)位數(shù)字if m=m1*m1*m1+m2*m2*m

9、2+m3*m3*m3disp(m)endendfor語句更一般的格式為:語句更一般的格式為: for 循環(huán)變量循環(huán)變量=矩陣表達(dá)式矩陣表達(dá)式 循環(huán)體語句循環(huán)體語句 end 執(zhí)行過程是依次將矩陣的各列元執(zhí)行過程是依次將矩陣的各列元素賦給循環(huán)變量,然后執(zhí)行循環(huán)體素賦給循環(huán)變量,然后執(zhí)行循環(huán)體語句,直至各列元素處理完畢。語句,直至各列元素處理完畢。 例例 寫出下列程序的執(zhí)行結(jié)果。寫出下列程序的執(zhí)行結(jié)果。 s=0; a=12,13,14;15,16,17;18,19,20;21,22,23; for k=a s=s+k; end disp(s); 程序運(yùn)行結(jié)果為: 39 48 57 66 即分別求出矩

10、陣每行元素之和。2while語句語句 while語句的一般格式為:語句的一般格式為: while (條件條件) 循環(huán)體語句循環(huán)體語句 end 其執(zhí)行過程為:若條件成立,則執(zhí)行其執(zhí)行過程為:若條件成立,則執(zhí)行循環(huán)體語句,執(zhí)行后再判斷條件是否循環(huán)體語句,執(zhí)行后再判斷條件是否成立,如果不成立則跳出循環(huán)。成立,如果不成立則跳出循環(huán)。 例例 從鍵盤輸入若干個(gè)數(shù),當(dāng)輸入從鍵盤輸入若干個(gè)數(shù),當(dāng)輸入0時(shí)結(jié)束輸入,求這些時(shí)結(jié)束輸入,求這些數(shù)的平均值和它們之和。數(shù)的平均值和它們之和。程序如下:程序如下:sum=0;cnt=0;val=input(Enter a number (end in 0):);while

11、(val=0) sum=sum+val; cnt=cnt+1; val=input(Enter a number (end in 0):);endif (cnt 0) sum mean=sum/cntend3break語句和語句和continue語句語句 與循環(huán)結(jié)構(gòu)相關(guān)的語句還有與循環(huán)結(jié)構(gòu)相關(guān)的語句還有break語句和語句和continue語句。它們一般與語句。它們一般與if語句配合使用。語句配合使用。break語句用于終止循環(huán)的執(zhí)行。當(dāng)在循環(huán)體語句用于終止循環(huán)的執(zhí)行。當(dāng)在循環(huán)體內(nèi)執(zhí)行到該語句時(shí),程序?qū)⑻鲅h(huán),繼內(nèi)執(zhí)行到該語句時(shí),程序?qū)⑻鲅h(huán),繼續(xù)執(zhí)行循環(huán)語句的下一語句。續(xù)執(zhí)行循環(huán)語句的下

12、一語句。continue語句控制跳過循環(huán)體中的某些語句。語句控制跳過循環(huán)體中的某些語句。當(dāng)在循環(huán)體內(nèi)執(zhí)行到該語句時(shí),程序?qū)⑻?dāng)在循環(huán)體內(nèi)執(zhí)行到該語句時(shí),程序?qū)⑻^循環(huán)體中所有剩下的語句,繼續(xù)下一次過循環(huán)體中所有剩下的語句,繼續(xù)下一次循環(huán)。循環(huán)。例例 求求100,200之間第一個(gè)能被之間第一個(gè)能被21整除的整整除的整數(shù)。數(shù)。程序如下:程序如下:for n=100:200if rem(n,21)=0 continueendbreakenddisp(n)4循環(huán)的嵌套循環(huán)的嵌套 如果一個(gè)循環(huán)結(jié)構(gòu)的循環(huán)體又包括一個(gè)循環(huán)結(jié)構(gòu),就稱為如果一個(gè)循環(huán)結(jié)構(gòu)的循環(huán)體又包括一個(gè)循環(huán)結(jié)構(gòu),就稱為循環(huán)的嵌套,或稱為多重循

13、環(huán)結(jié)構(gòu)。循環(huán)的嵌套,或稱為多重循環(huán)結(jié)構(gòu)。 例例3-13 若一個(gè)數(shù)等于它的各個(gè)真因子之和,則稱該數(shù)為若一個(gè)數(shù)等于它的各個(gè)真因子之和,則稱該數(shù)為完數(shù),如完數(shù),如6=1+2+3,所以,所以6是完數(shù)。求是完數(shù)。求1,500之間的全部完之間的全部完數(shù)。數(shù)。for m=1:500s=0;for k=1:m/2if rem(m,k)=0s=s+k;endendif m=s disp(m);endend 局部變量 全局變量 永久變量 每個(gè)函數(shù)都有自己的局部變量,這些變量存儲(chǔ)在該函數(shù)獨(dú)立的工作區(qū)中,與其他函數(shù)的變量及主工作區(qū)中的變量分開存儲(chǔ)。當(dāng)函數(shù)調(diào)用結(jié)束時(shí),這些變量隨之刪除,不保存在內(nèi)存中。并且,除了函數(shù)返回

14、值,該函數(shù)不改變工作區(qū)中其他變量的值。 然而命令文件沒有獨(dú)立的工作區(qū),當(dāng)通過命令窗口調(diào)用命令文件時(shí),命令文件分享主工作區(qū),當(dāng)函數(shù)調(diào)用命令文件時(shí),命令文件分享主調(diào)函數(shù)的工作區(qū)。需要注意的是,如果命令文件中改變了工作區(qū)中變量的值,則在命令文件調(diào)用結(jié)束后,該變量的值發(fā)生改變。 在函數(shù)中,變量默認(rèn)為局部變量。 局部變量只在一個(gè)工作區(qū)內(nèi)有效,無論是函數(shù)工作區(qū)還是 MATLAB 主工作區(qū)。與局部變量不同,全局變量可以在定義該變量的全部工作區(qū)中有效。當(dāng)在一個(gè)工作區(qū)內(nèi)改變該變量的值時(shí),該變量在其他工作區(qū)中的變量同時(shí)改變。 任何函數(shù)如果需要使用全局變量,則必須首先聲明,聲明格式為:global 變量名1 變量名

15、2 如果一個(gè) M 文件中包含的子函數(shù)需要訪問全局變量,則需在子函數(shù)中聲明該變量,如果需要在命令行中訪問該變量,則需在命令行中聲明該變量。例例 全局變量應(yīng)用示例。全局變量應(yīng)用示例。 先建立函數(shù)文件先建立函數(shù)文件wadd.m,該函數(shù)將輸入的參數(shù)加權(quán)相加。,該函數(shù)將輸入的參數(shù)加權(quán)相加。function f=wadd(x,y)global ALPHA BETAf=ALPHA*x+BETA*y; 在命令窗口中輸入:在命令窗口中輸入:global ALPHA BETAALPHA=1;BETA=2;s=wadd(1,2) 除局部變量和全局變量外,MATLAB 中還有一種變量類型為永久變量。永久變量的特點(diǎn)為:

16、 只能在 M 文件內(nèi)部定義; 只有該變量從屬的函數(shù)能夠訪問該變量; 當(dāng)函數(shù)運(yùn)行結(jié)束時(shí),該變量的值保留在內(nèi)存中,因此當(dāng)該函數(shù)再次被調(diào)用時(shí),可以再次利用這些變量。 永久變量的定義方法為:persistent 變量名1 變量名2。(1) 主函數(shù) (2) 子函數(shù) (3) 局部函數(shù) M文件中的第一個(gè)函數(shù)就叫做主函數(shù)文件中的第一個(gè)函數(shù)就叫做主函數(shù),前邊章節(jié)中所引用的函數(shù)事實(shí)上都是主函數(shù),主函數(shù)之后可以是任意數(shù)量主函數(shù)之后可以是任意數(shù)量的子函數(shù)的子函數(shù),它們可以作為主程序的子程序.一般來說,在命令窗口或是其他的M文件只能調(diào)用主函數(shù),調(diào)用的時(shí)候就是調(diào)用的時(shí)候就是直接調(diào)用其函數(shù)名直接調(diào)用其函數(shù)名. .主函數(shù)主函

17、數(shù) 比如,函數(shù)average的M文件average.m如下:function y = average(x) % AVERAGE Mean of vector elements.y = sum(x)/length(x); % Actual computation 與其他的高級語言一樣,在MATLAB 7語言中也可以很方便地定義子函數(shù),用來擴(kuò)充函數(shù)的功能。在函數(shù)文件中題頭定義的函數(shù)為主函數(shù),而在函數(shù)體內(nèi)定義的其他函數(shù)都被視為子函數(shù)。子函數(shù)只能為主函數(shù)或同一主函數(shù)下的其他子函數(shù)所使用。(必須和相應(yīng)的主函數(shù)放到同一目錄下!)例 利用函數(shù)的遞歸調(diào)用,求n!. n!本身就是以遞歸的形式定義的:顯然,求n!

18、需要求(n-1)!,這時(shí)可采用遞歸調(diào)用.遞歸調(diào)用函數(shù)文件factor.m如下:function f=factor(n)if n提示符,用戶可以查看工作區(qū)中的變量,可以改變變量的值。輸入 return 指定返回程序,繼續(xù)運(yùn)行。 (4)在調(diào)試一個(gè)單獨(dú)的函數(shù)時(shí),可以將函數(shù)改寫為腳本文件,此時(shí)可以直接對輸入?yún)?shù)賦值,然后以腳本方式運(yùn)行該 M 文件,這樣可以保存中間變量,在運(yùn)行完成后,可以查看中間變量的值,對結(jié)果進(jìn)行分析,查找錯(cuò)誤所在。函數(shù)函數(shù)功能功能dbstop設(shè)置斷點(diǎn)設(shè)置斷點(diǎn)dbclear刪除斷點(diǎn)刪除斷點(diǎn)dbcont重新開始重新開始dbdown恢復(fù)由恢復(fù)由 dbup 修改的變量值修改的變量值dbme

19、x啟動(dòng)啟動(dòng) MEX 文件調(diào)試文件調(diào)試dbstack列出調(diào)用關(guān)系列出調(diào)用關(guān)系dbstatus列出所有的斷點(diǎn)列出所有的斷點(diǎn)dbstep執(zhí)行一行或多行執(zhí)行一行或多行dbtype列出列出 M 文件并標(biāo)出每行文件并標(biāo)出每行dbup修改工作區(qū)中變量的值修改工作區(qū)中變量的值dbquit退出調(diào)試模式退出調(diào)試模式函數(shù)函數(shù)功能功能echo顯示執(zhí)行的腳本或函數(shù)代碼顯示執(zhí)行的腳本或函數(shù)代碼disp顯示指定變量的值或者其他信息顯示指定變量的值或者其他信息sprintf,fprintf格式化輸出不同類型的變量格式化輸出不同類型的變量whos查看工作區(qū)中的變量查看工作區(qū)中的變量size顯示數(shù)組維數(shù)顯示數(shù)組維數(shù)keyboar

20、d中斷程序執(zhí)行,將控制權(quán)交給鍵盤,允許鍵盤輸入中斷程序執(zhí)行,將控制權(quán)交給鍵盤,允許鍵盤輸入return在在 keyboard 中斷后繼續(xù)返回程序執(zhí)行中斷后繼續(xù)返回程序執(zhí)行warning顯示指定的警告消息顯示指定的警告消息error顯示指定的錯(cuò)誤消息顯示指定的錯(cuò)誤消息lasterr返回最后一條錯(cuò)誤消息返回最后一條錯(cuò)誤消息lasterror返回最后一條錯(cuò)誤消息及相關(guān)信息返回最后一條錯(cuò)誤消息及相關(guān)信息lastwarn返回最后一條警告消息返回最后一條警告消息 文本編輯器中的 Debug 菜單提供了全部的調(diào)試選項(xiàng),另外,MATLAB 主窗口中的 Debug 菜單提供了一些調(diào)試命令,方便調(diào)試時(shí)在命令窗口中

21、查看運(yùn)行狀態(tài)。調(diào)試選項(xiàng)及其功能如表所示。選項(xiàng)選項(xiàng)功能功能對應(yīng)快捷鍵對應(yīng)快捷鍵Open M-files when Debbuging選擇該選項(xiàng)則在調(diào)試打開選擇該選項(xiàng)則在調(diào)試打開 M 文件文件無無Step下一步下一步F10Step In進(jìn)入被調(diào)用函數(shù)內(nèi)部進(jìn)入被調(diào)用函數(shù)內(nèi)部F11Step Out跳出當(dāng)前函數(shù)跳出當(dāng)前函數(shù)Shift+F11Continue執(zhí)行,直至下一斷點(diǎn)執(zhí)行,直至下一斷點(diǎn)F5Go until Cursor執(zhí)行至當(dāng)前光標(biāo)處執(zhí)行至當(dāng)前光標(biāo)處無無Set/Clear Breakpoint設(shè)置或刪除斷點(diǎn)設(shè)置或刪除斷點(diǎn)F12Set/Modify Conditional Breakpoint設(shè)置或

22、修改條件斷點(diǎn)設(shè)置或修改條件斷點(diǎn)無無Enable/Disable Breakpoint開啟或關(guān)閉光標(biāo)行的斷點(diǎn)開啟或關(guān)閉光標(biāo)行的斷點(diǎn)無無Clear Breakpoints in All Files刪除所有文件中的斷點(diǎn)刪除所有文件中的斷點(diǎn)無無Stop if Errors/Warings遇到錯(cuò)誤或者警告時(shí)停止遇到錯(cuò)誤或者警告時(shí)停止無無 Set/Clear Breakpoint,設(shè)置或清除斷點(diǎn)??梢赃x擇該選項(xiàng)對當(dāng)前行進(jìn)行操作,或者通過快捷鍵 F12,或者直接點(diǎn)擊該行左側(cè)的“-”,如圖所示。 設(shè)置斷點(diǎn)時(shí)該處顯示為紅點(diǎn)。再次進(jìn)行相同的操作則刪除該斷點(diǎn)。 Set/Modify Conditional Breakpoint,該選項(xiàng)用于設(shè)置或修改條件斷點(diǎn)。條件斷點(diǎn)為一種特殊的斷點(diǎn),當(dāng)滿足指定的條

溫馨提示

  • 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)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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

提交評論