重慶工商大學(xué)數(shù)學(xué)模型與數(shù)學(xué)實(shí)驗(yàn)課件第05講 程序設(shè)計_第1頁
重慶工商大學(xué)數(shù)學(xué)模型與數(shù)學(xué)實(shí)驗(yàn)課件第05講 程序設(shè)計_第2頁
重慶工商大學(xué)數(shù)學(xué)模型與數(shù)學(xué)實(shí)驗(yàn)課件第05講 程序設(shè)計_第3頁
重慶工商大學(xué)數(shù)學(xué)模型與數(shù)學(xué)實(shí)驗(yàn)課件第05講 程序設(shè)計_第4頁
重慶工商大學(xué)數(shù)學(xué)模型與數(shù)學(xué)實(shí)驗(yàn)課件第05講 程序設(shè)計_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 第05講 MATLAB程序設(shè)計數(shù)據(jù)和函數(shù)的可視化主要內(nèi)容1、M文件2、matlab控制流3、matlab程序調(diào)試5.1 M文件 1、MATLAB的M文件有兩種(腳本文件和函數(shù)文件)腳本文件:將原來要在MATLAB環(huán)境直接輸入的語句, 放在一個以.m為后綴的文件中。函數(shù)文件:它的第一行必須是函數(shù)定義行, 用來標(biāo)示其與腳本文件的不同, 也存在.m文件中。 5.1 M文件腳本文件的特點(diǎn):1.)它是一串按用戶意圖排列而成的(包括控制流 向指令在內(nèi)的)MATLAB指令集合。2.) 腳本文件運(yùn)行后,所產(chǎn)生的所有變量都駐留在 MATLAB基本空間(workspace)中。只要用戶 不使用clear指令加以

2、清除,且MATLAB指令窗不 關(guān)閉,就可非常方便地從工作區(qū)中查詢當(dāng)前某個變 量的計算情況。 5.1 M文件函數(shù)文件的構(gòu)成(由5個部分組成)(1)函數(shù)定義行(腳本文件無需定義行) 位于函數(shù)文件的首行,以MATLAB關(guān)鍵字function開頭,函數(shù)名以及函數(shù)的輸入輸出變量都在這一行定義。 function f,g=fname(x,y);(2)函數(shù)信息說明行(H1) 緊隨函數(shù)定義行之后的以%開頭的注釋行的第一行。H1行包括:大寫體的函數(shù)文件名; 運(yùn)用關(guān)鍵詞簡要描述的函數(shù)功能。H1行作用: 供help幫助使用(3)函數(shù)幫助文本 H1行及其之后的連續(xù)以%開頭的所有注釋行構(gòu)成整個在線 幫助文本。 通常包括

3、:函數(shù)輸入輸出變量含義 函數(shù)調(diào)用格式的說明 5.1 M文件(4)函數(shù)體 是指完成指定功能的MATLAB指令集合,它接收輸入變量,進(jìn)行程序流控制,得到輸出變量??烧{(diào)用任何可用的MATLAB提供的函數(shù)和用戶自己定義的函數(shù)。(5)注釋 是指在函數(shù)體中對某些程序行所進(jìn)行的注釋。以%標(biāo)注,可以出現(xiàn)在函數(shù)體的任何需要的地方。舉例演示注釋行function b= mean(a)%MEAN Average or mean value. %For vectors, MEAN(a) is the mean value of a%For matrix, MEAN(a) is the row vector%conta

4、ining the mean value of each columnm,n=size(a) ; %The dimension of matrics aif m=1 m=n; end b= sum(a)/m; 函數(shù)定義行H1行幫助行函數(shù)體m,n=size(a) ; %The dimension of matrics Xif m=1 m=n; end b= sum(a)/m 腳本文件腳本文件和函數(shù)文件的比較5.1 M文件2、 函數(shù)工作空間每當(dāng)函數(shù)文件運(yùn)行時,matlab會為它開辟一個臨時工作空間稱之為函數(shù)工作空間。說明:1、函數(shù)工作空間相對于基本工作空間是獨(dú)立的、臨時的2、函數(shù)工作空間隨具體函數(shù)

5、文件的調(diào)用而產(chǎn)生,隨調(diào)用結(jié)束而刪除3、函數(shù)運(yùn)行時產(chǎn)生的所有中間變量都存放在函數(shù)工作空間中4、函數(shù)執(zhí)行完成后,臨時函數(shù)空間及所有的中間變量即被清除 5.1 M文件3、 函數(shù)的輸入、輸出變量相同點(diǎn): MATLAB中,函數(shù)的輸入、輸出變量的含義與C語言的函數(shù)相同。異同點(diǎn): 實(shí)際調(diào)用時,所用的輸入、輸出變量的個數(shù)可以少于原定義函數(shù)的變量的個數(shù)。5.1 M文件4、 局部變量和全局變量局部變量: 是存在于函數(shù)工作空間內(nèi)部的中間變量,產(chǎn)生于函數(shù)的運(yùn)行過程中,影響范圍僅限于該函數(shù)本身。全局變量: 通過globle指令定義的變量,可以同時由幾個不同的函數(shù)工作空間以及基本工作空間共享。 全局變量應(yīng)用示例.func

6、tion f=wadd(x,y)globle alpha betaf=alpha*x+beta*y;global alpha betaalpha=1;beta=2;s=wadd(1,2)在命令窗口中輸入: 5.1 M文件5、 主函數(shù)和子函數(shù)說明: 1、與c語言相似,matlab中也可以定義子函數(shù), 來擴(kuò)充函數(shù)的功能2、子函數(shù)只能被主函數(shù)或同一主函數(shù)下的其它子函數(shù)所調(diào)用定義: 在函數(shù)文件中題頭定義的函數(shù)被稱為 主函數(shù) 函數(shù)體內(nèi)定義的其它函數(shù)均被視為 子函數(shù)function c=testarg(a,b)c=test1(a,b)*test2(a,b);function c=test1(a,b) c=

7、a+b;function c=test2(a,b) c=a-b;%主函數(shù)%子函數(shù)1%子函數(shù)2 5.2 matlab控制流matlab提供了五種控制程序流的結(jié)構(gòu): 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)條件控制語句 5.2 matlab控制流1.if-else-end分支結(jié)構(gòu),條件控制語句。 (1)單分支 if expression commands end 如果表達(dá)式expression為真,執(zhí)行組命令commands,否則跳過該組命令。例: 假設(shè)定義mn的矩陣A。下面的語句是判斷 矩陣A的第1列元素是否為

8、0,若全為0,則從 矩陣A中刪除第1列。 if A(:,1)=0 m,n=size(A); A=A(1:m,2:n);end 5.2 matlab控制流(2)雙分支if expression 判決條件 commands1 表達(dá)式為真時,執(zhí)行命令commands1else commands2 表達(dá)式為假時,執(zhí)行命令commands2end5.2 matlab控制流判決表達(dá)式2(3)多分支 if expression1 commands1 elseif expression2 commands2 else commandsk end判決表達(dá)式1表達(dá)式1為真,執(zhí)行commands1,結(jié)束此結(jié)構(gòu)表達(dá)式

9、1為假,而表達(dá)2為真, 執(zhí)行commands2,結(jié)束此結(jié)構(gòu)當(dāng)前面所有表達(dá)式均為假時,執(zhí)行該組命令說明:表達(dá)式為空時,MATLAB認(rèn)為表達(dá)式為假。例:if n0 disp(input n must be positive.) elseif n=0 disp(n=0) elseif rem(n,2)=0 disp(n是2的整數(shù)倍) else disp(其它情況) end 5.2 matlab控制流2.switch-case結(jié)構(gòu),條件控制語句switch ex case test1 commands1 case test2 commands2 case testk commandsk otherwi

10、se commandsend ex為一標(biāo)量或字符串當(dāng)ex等于test1時,執(zhí)行組命令1,然后跳出該結(jié)構(gòu)當(dāng)ex等于testk時,執(zhí)行組命令k,然后跳出該結(jié)構(gòu)當(dāng)表達(dá)式不等于前面所有的檢測值時,則執(zhí)行該組命令檢測擲一次骰子所得的點(diǎn)數(shù)是單數(shù)還是雙數(shù)function dicetest(result)switch result case 1,3,5 disp(odd number of eye) case 2,4,6 disp(even number of eye) otherwise disp(what kind of dice do you have?)end 說明:case后的檢測值可以是標(biāo)量、字符

11、串和元胞數(shù)組 若檢測值是元胞數(shù)組,matlab將表達(dá)式的值和元胞數(shù)組 中的所有值進(jìn)行比較,只要元胞數(shù)組中有一個元素與表 達(dá)式的值相等,則認(rèn)為比較結(jié)果為真。 5.2 matlab控制流3. try-catch 結(jié)構(gòu),條件控制語句try commands1catch commands2end執(zhí)行commands1,若正確,則跳出此結(jié)構(gòu)若執(zhí)行commands1時出現(xiàn)錯誤,則執(zhí)行commands2N=4;A=rand(3);try A_N=A(N,:) catch A_end=A(end,:) endlasterr顯示最新出錯信息,并終止程序%如果取A(N,:)出錯,則改取A的最后一行5.2 matl

12、ab控制流4.指定重復(fù)次數(shù)的循環(huán)語句for variable=expression statementsend說明:在for和variable之間需要有一個空格。這里的variable 是循環(huán)變量名。在表達(dá)式中給出循環(huán)的初始值、步長和終值。功能:這個命令就是反復(fù)執(zhí)行一條語句或一組語句,而執(zhí)行的次數(shù)已預(yù)先定義好。以end結(jié)束這組語句 5.2 matlab控制流5.不指定重復(fù)次數(shù)的循環(huán)語句 說明: 無論是for循環(huán)還是while循環(huán)均可用break語句終止循環(huán)。while expression commandsend功能:只要邏輯表達(dá)式為真, while命令將反復(fù)執(zhí)行程序語句。舉例: 在區(qū)間2 ,

13、0.75 內(nèi),步長為0.25, 對函數(shù)y=f(x) = 1 + 1 /x求值,并列表。將所得x值和y值分別存入向量r和s中,并列表顯示。r=;s=;for x=-2.0:0.25:-0.75; y=1+1/x; r=r x; s=s y;end r;svar=1 2 3 4 5 6 -1 7 8 0 ;a=;k=1;while var(k) if var(k)=-1 break; end a=a var(k).2; k=k+1;end disp(a) 例題開講不必等到循環(huán)自然結(jié)束,當(dāng)在循環(huán)體內(nèi)執(zhí)行到該語句時,程序?qū)⑻鲅h(huán),繼續(xù)執(zhí)行循環(huán)語句的下一語句.continue控制跳過循環(huán)體中的某些語句

14、,當(dāng)在循環(huán)體內(nèi)執(zhí)行到該語句時,程序?qū)⑻^循環(huán)體中所有剩下的語句,繼續(xù)執(zhí)行下一次循環(huán)求:100,200之間第一個能被21整除的整數(shù)?for n=100:200 if rem(n,21)=0 continue end breakendn 5.2 matlab控制流控制流的其它常用指令:1、利用input函數(shù)輸入?yún)?shù),并可同時顯示出提示信息 利用disp函數(shù),可向命令窗口輸出信息2、利用keyboard函數(shù)進(jìn)入鍵盤主控狀態(tài), 直接修改或輸入變量;3、 pause error和warning指令5.2 matlab控制流1.用 input ( ) 函數(shù)輸入?yún)?shù)(1)當(dāng)輸入?yún)?shù)是數(shù)值時: y=input

15、(the value of y is:); f=input(frequency is : );在指令窗的工作區(qū)中會顯示提示信息5.2 matlab控制流(2)當(dāng)直接輸入字符串變量時: 需要用s選項(xiàng)對其進(jìn)行類型說明。 y=input(methods:,s);說明: 這里的input函數(shù)與c語言中的不同. 它不需要對輸入?yún)?shù)的類型進(jìn)行說明. 如:%f,%d.x=input(請輸入x的值:);if x=10 y=cos(x+1)+sqrt(x*x+1);else y=x*sqrt(x+sqrt(x);endydisp(y)5.2 matlab控制流2.鍵盤控制 keyboard 說明:1、遇到key

16、board時,將“控制權(quán)”交給鍵盤,用戶可以從 鍵盤輸入各種matlab指令。2、僅當(dāng)用戶輸入return指令后,“控制權(quán)”才交還給程序keyboardm,n=size(x);if m=1 m=n; endy = sum(x)/m 5.2 matlab控制流3、pause、error和warning指令pausepause(n)暫停執(zhí)行文件,等待用戶按任意鍵后繼續(xù)暫停執(zhí)行文件n秒,在繼續(xù)執(zhí)行t=0:2*pi/99:2*pi;x=1.15*cos(t);y=3.25*sin(t); plot(x,y),axis normal,grid on,title(Normal and Grid on)di

17、sp( 以上是軸的通常設(shè)置。)disp(按任意鍵繼續(xù)!下面是X-Y軸刻度等長度設(shè)置情況。)pauseplot(x,y),axis equal,grid on,title(Equal) 5.2 matlab控制流error(message)lasterrwarning(message) lastwarn顯示出錯信息message,并終止程序顯示matlab自動判斷的最新出錯原因,并終止程序顯示警告信息message,程序繼續(xù)運(yùn)行顯示matlab自動給出的最新警告信息,并繼續(xù)運(yùn)行N=4;A=rand(3);try A_N=A(N,:);catch A_end=A(end,:);endlasterr

18、lastwarn5.3 程序的調(diào)試 所謂的程序調(diào)試,就是指當(dāng)發(fā)現(xiàn)你所編制的程序無法得到你所期望的結(jié)果時,所進(jìn)行的錯誤修正。一般情況下的程序錯誤可以分為兩類(1)格式錯誤 這類錯誤比較容易定位和檢查。(2)運(yùn)行錯誤 這類錯誤通常是因?yàn)檫壿嫽蛩惴ㄉ嫌袉栴}而導(dǎo)致的錯誤,這類問題比較不容易找到。5.3 程序的調(diào)試錯誤的識別:將程序每一步執(zhí)行的結(jié)果輸出到命令窗口,以檢查運(yùn)行的結(jié)果;實(shí)現(xiàn)方法:將程序中屏蔽輸出的“;”去掉。在m文件中可能發(fā)生錯誤的地方加入keyboard,讓MATLAB程序暫停來檢查相關(guān)的信息。 注釋掉函數(shù)的定義行,將其轉(zhuǎn)換成腳本文件, 對其中的信息進(jìn)行觀測。用MATLAB提供的調(diào)試器debugger來檢查錯誤。5.3 程序的調(diào)試 下面我們介紹如何利用調(diào)試器(debugger)進(jìn)行MATLAB的程序調(diào)試。

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論