第3章_Matlab程序設(shè)計(jì)_part2_第1頁(yè)
第3章_Matlab程序設(shè)計(jì)_part2_第2頁(yè)
第3章_Matlab程序設(shè)計(jì)_part2_第3頁(yè)
第3章_Matlab程序設(shè)計(jì)_part2_第4頁(yè)
第3章_Matlab程序設(shè)計(jì)_part2_第5頁(yè)
已閱讀5頁(yè),還剩44頁(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、3.3 M文件3.3.13.3.1 M M文件概述文件概述Matlab作為一種高級(jí)計(jì)算語(yǔ)言,不僅可以如前幾章那樣,以一種人機(jī)交互的命令行方式工作,還可以像Basic, Fortran, C 等其它高級(jí)語(yǔ)言一樣進(jìn)行程序設(shè)計(jì)。用用MATLABMATLAB語(yǔ)言編寫的程序,稱為語(yǔ)言編寫的程序,稱為M M文件文件。 M文件的分類1)命令式:命令式M文件(簡(jiǎn)稱命令文件,也稱為腳本式M文件,腳本文件)就是命令(或語(yǔ)句)的簡(jiǎn)簡(jiǎn)單疊加單疊加(不存在輸入?yún)?shù)和輸出參數(shù)的問(wèn)題)??稍诿畲翱谥苯虞斎胛募\(yùn)行。當(dāng)運(yùn)行命令式 M文件時(shí),MATLAB就會(huì)自動(dòng)按順序執(zhí)行文件中的語(yǔ)句(或命令),這樣就可以避免在命令窗口運(yùn)行

2、許多命令的麻煩和重復(fù)性工作,也便于修改。2 2)函數(shù)式:函數(shù)式M文件(簡(jiǎn)稱函數(shù)文件)用來(lái)定義函數(shù),主要解決參數(shù)傳遞和函數(shù)調(diào)用問(wèn)題,它的第一條語(yǔ)句以function語(yǔ)句為引導(dǎo)。3.3.2 M文件的創(chuàng)建與打開(kāi)M文件是一個(gè)文本文件,可以用任何編輯程序來(lái)建立和編輯。最常用的是利用Matlab提供的M文件編輯器。1. 1. 建立新的建立新的M M文件文件為建立新的文件,啟動(dòng)M文件編輯器的方法有三種:1)菜單方式。從Matlab主窗口中選擇File-New-M-file命令,出現(xiàn)M文件編輯器窗口。2)命令方式:在命令窗口輸入edit命令。3)命令按鈕方式:?jiǎn)螕鬗atlab主窗口工具欄上的New M-fil

3、e命令按鈕。例:繪制y=sin(x)在區(qū)間 內(nèi)的圖形。方式1. 交互的命令行工作方式: 直接在命令窗口輸入命令:x=linspace(0,2*pi, 101);y=sin(x);plot(x,y);方式2. M文件方式(程序方式): 按照前面三種方式之一啟動(dòng)M文件編輯器,依次輸入以上三條語(yǔ)句,保存文件(不妨將文件命名為test1.m)注意: 我們建立的M文件是命令式M文件(或簡(jiǎn)稱為命令文件)。2 , 0命令文件的運(yùn)行:在命令窗口中輸入該M文件名(test1),或者選擇M文件編輯器窗口中debug菜單下的run子菜單運(yùn)行該命令文件,就會(huì)順序執(zhí)行該命令文件中的語(yǔ)句(或命令)。關(guān)于函數(shù)的定義格式、調(diào)

4、用格式、參數(shù)傳遞及有關(guān)的問(wèn)題我們將在后面專門介紹。2. 打開(kāi)已有的文件打開(kāi)已有的文件有多種方法:1) 在當(dāng)前目錄窗口當(dāng)前目錄窗口選中要打開(kāi)的文件,雙擊鼠標(biāo)左鍵。2)菜單方式:從Matlab主窗口中選擇File-Open子菜單,則屏幕出現(xiàn)“Open”對(duì)話框,選擇所需打開(kāi)的M文件。3)命令按鈕方式:?jiǎn)螕鬗atlab主窗口工具欄上的Open file命令按鈕。4)命令方式:在命令窗口輸入命令edit edit 文件名文件名例:修改test1.m, 改為繪制 的圖形。方法:打開(kāi)文件test1.m,將語(yǔ)句y=sin(x)修改為y=exp(-0.5*x).*sin(x), 保存文件,然后運(yùn)行該命令文件即可

5、。)sin(5 . 0 xeyx3.3.3 輸入輸出語(yǔ)句1.1. inputinput 函數(shù)函數(shù) 調(diào)用格式為: A=input(提示信息,選項(xiàng)); 其中提示信息為一個(gè)字符串,用于提示用戶輸入什么樣的數(shù)據(jù)。 例如: R=input(input the value of radius); 如果在input函數(shù)調(diào)用時(shí)采用s選項(xiàng),則允許用戶輸入一個(gè)字符串。例如,想輸入一個(gè)人的姓名,可采用命令: xm=input(Whats your name? ,s)例3-11 建立一個(gè)命令文件,實(shí)現(xiàn)數(shù)組a的平方運(yùn)算和a中各個(gè)元素的平方。程序:a=input(a=? );x=a2y=a.2運(yùn)行以上程序:1) 輸入一個(gè)

6、標(biāo)量:例如輸入,觀察運(yùn)行結(jié)果.2) 輸入一個(gè)方陣:例如輸入1 2;3 4,觀察運(yùn)行結(jié)果3)輸入一個(gè)行向量:例如輸入1,2,3,4 ,觀察運(yùn)行結(jié)果)還可以輸入 ones(2), eye(2), etc.2. disp 和 display函數(shù) 調(diào)用格式為: disp(X) 或 display(X) 其中X既可以為字符串,也可以為矩陣。 注意:用disp函數(shù)顯示矩陣時(shí)將不顯示矩陣的名字,而且其格式更緊密,且不留任何沒(méi)有意義的空行。例 建立一個(gè)命令文件,實(shí)現(xiàn)以下功能:輸入數(shù)值型矩陣a,求a中所有元素的最大值、最小值、所有元素的和與乘積。程序如下:a=input(輸入矩陣a= )maxval=max(a

7、(:); minval=min(a(:);sum_a=sum(a(:); pro_a=prod(a(:);display(The max value is , num2str(maxval), The min value is, num2str(minval), The sum is , num2str(sum_a), The production is ,num2str(pro_a)運(yùn)行以上程序,每次輸入不同的值,觀察運(yùn)行結(jié)果。1) 輸入標(biāo)量:例如2) 輸入向量:例如1 2 3 4 5或1:5或linspace(1,5,5)3) 輸入矩陣:例如1 2 3;4 5 6 或 rand(3) 3.

8、 pause3. pause命令命令格式:pause 暫停程序的執(zhí)行,等待用戶按任意鍵后再繼續(xù)運(yùn)行 pause(n) 等待n秒后繼續(xù)運(yùn)行pause on 表示其后的pause命令起作用pause off 表示其后的pause命令不起作用pause query 查詢當(dāng)前pause命令的狀態(tài)3.4 分支結(jié)構(gòu)(選擇結(jié)構(gòu))3.4.13.4.1 if if 語(yǔ)句語(yǔ)句在MATLAB中,if語(yǔ)句有3種格式。1. 1. 單分支單分支ifif語(yǔ)句語(yǔ)句語(yǔ)句格式為: if if 條件表達(dá)式條件表達(dá)式 語(yǔ)句組語(yǔ)句組 endend 當(dāng)條件表達(dá)式的值為真(非零)時(shí),則執(zhí)行if和end之間的語(yǔ)句組;否則,(不執(zhí)行if和en

9、d之間的語(yǔ)句組),直接執(zhí)行if語(yǔ)句的后繼語(yǔ)句(end后面的語(yǔ)句)。 2. 雙分支雙分支if if語(yǔ)句語(yǔ)句語(yǔ)句格式為: if if 條件表達(dá)式條件表達(dá)式 語(yǔ)句組語(yǔ)句組1 1 else else 語(yǔ)句組語(yǔ)句組2 2 end end 當(dāng)條件表達(dá)式非零時(shí),執(zhí)行語(yǔ)句組1;否則執(zhí)行語(yǔ)句組2。 語(yǔ)句組1或語(yǔ)句組2執(zhí)行后,再執(zhí)行if語(yǔ)句的后繼語(yǔ)句(end后面的語(yǔ)句)。例3-12 計(jì)算分段函數(shù) 的值程序如下:x=input(please input x:);if x=A & c=a& c=0& c=9 disp(str2num(c)2);else disp(c);end練習(xí) 輸入x的值,

10、求以下分段函數(shù)的值練習(xí) 輸入x的值,求以下分段函數(shù)的值otherwisexxxy11112104410065062xxxxxxxy3.4.2 switch-case結(jié)構(gòu)switch語(yǔ)句根據(jù)表達(dá)式的取值不同,分別執(zhí)行不同的語(yǔ)句,其語(yǔ)句格式為:switch switch 表達(dá)式表達(dá)式 case case 表達(dá)式表達(dá)式1 1 語(yǔ)句塊語(yǔ)句塊1 1 case case 表達(dá)式表達(dá)式2 2 語(yǔ)句塊語(yǔ)句塊2 2 case case 表達(dá)式表達(dá)式n n 語(yǔ)句塊語(yǔ)句塊n n otherwise otherwise 語(yǔ)句塊語(yǔ)句塊n+1n+1 end endswitch子句后面的表達(dá)式應(yīng)為一個(gè)標(biāo)量或一個(gè)字符串,ca

11、se子句后面的表達(dá)式不僅可以為一個(gè)標(biāo)量或一個(gè)字符串,而且還可以是一個(gè)將多個(gè)值(標(biāo)量或字符串)用大括號(hào)括起來(lái)的單元數(shù)據(jù)(Cell)。如果case子句后面的表達(dá)式為一個(gè)單元數(shù)據(jù),則表達(dá)式的值等于該單元數(shù)據(jù)中的某個(gè)元素時(shí),執(zhí)行相應(yīng)的語(yǔ)句組。switch語(yǔ)句的執(zhí)行過(guò)程 例3-14 通過(guò)鍵盤輸入百分制成績(jī),輸出對(duì)應(yīng)的等級(jí)(A: 90100, B: 8089,C:7079,D:6069,E: 60)程序如下:n=input(n=);if n100 display(Error!);else i=fix(n/10); switch i case 9,10 display(A) case 8 display(B

12、) case 7 display(C) case 6 display(D) otherwise display(E)end %switchend % if例:判斷用戶選擇的是哪種插值方法(bilinear, cubic或nearest)method = input(Input method: (bilinear,cubic or nearest), s) switch lower(method) case linear,bilinear disp(Method is linear) case cubic disp(Method is cubic) case nearest disp(Metho

13、d is nearest) otherwise disp(Unknown method.)End練習(xí):利用if-elseif-else結(jié)構(gòu)重寫以上兩個(gè)程序。3.4.3 try-catch結(jié)構(gòu)Matlab從5.3版本開(kāi)始提供了一種新的試探式語(yǔ)句結(jié)構(gòu)。其一般格式為:try try 語(yǔ)句組語(yǔ)句組catchcatch 語(yǔ)句組語(yǔ)句組endend執(zhí)行時(shí),首先試探性地執(zhí)行語(yǔ)句組。如果在執(zhí)行語(yǔ)句組的過(guò)程中出錯(cuò),則將錯(cuò)誤信息賦給Matlab預(yù)定義變量lasterr后轉(zhuǎn)去執(zhí)行語(yǔ)句組(如果執(zhí)行語(yǔ)句組時(shí)也出錯(cuò),將終止程序的執(zhí)行)。例矩陣乘法運(yùn)算要求兩矩陣的維數(shù)相容,否則會(huì)出錯(cuò)。創(chuàng)建一個(gè)命令文件,先求兩矩陣的乘積,若出

14、錯(cuò),則自動(dòng)轉(zhuǎn)去求兩矩陣的點(diǎn)乘。A=input(請(qǐng)輸入A矩陣:)B=input(請(qǐng)輸入B矩陣:)lasterr(); %清除原有的錯(cuò)誤信息try C=A*B;catch C=A.*B;endCdisp(lasterr) %顯示出錯(cuò)原因運(yùn)行程序,觀察程序的執(zhí)行結(jié)果。輸入矩陣A:1 2 3;4 5 6輸入矩陣B :7 8 9;10 11 12運(yùn)行結(jié)果:(略)再運(yùn)行一次,輸入矩陣A:1 2 3;4 5 6輸入矩陣B :1 2;3 4;5 6運(yùn)行結(jié)果:(略)例采用單下標(biāo)方式對(duì)n階魔方陣的元素進(jìn)行引用。當(dāng)下標(biāo)超出元素個(gè)數(shù)(最大單下標(biāo))時(shí),改為引用最后一個(gè)元素,并顯示出錯(cuò)警告信息。程序如下:n=input(

15、輸入魔方矩陣的階數(shù):); A=magic(n)index=input(輸入單下標(biāo):)try a=A(index)catch a=A(end) lasterrend練習(xí): 用if語(yǔ)句來(lái)完成本題。 3.5 循環(huán)結(jié)構(gòu)Matlab中循環(huán)語(yǔ)句有兩種:for語(yǔ)句和while語(yǔ)句。3.5.1 for語(yǔ)句for 語(yǔ)句的一般格式:for for 循環(huán)變量循環(huán)變量= =數(shù)組數(shù)組 循環(huán)體語(yǔ)句循環(huán)體語(yǔ)句endend數(shù)組為向量或矩陣。執(zhí)行時(shí)依次將數(shù)組的各列賦值給循環(huán)變量,然后執(zhí)行循環(huán)體語(yǔ)句,直至各列元素處理完畢。例 建立命令文件,輸入以下程序,分析執(zhí)行過(guò)程A=input(A=)sumA=0;for x=A sumA=s

16、umA+x;end sumA請(qǐng)分別輸入以下數(shù)據(jù),觀察程序的運(yùn)行結(jié)果,分析程序的功能:1) 1 2 3;4 5 62) 1 2 3 4 5 63) 1;2;3說(shuō)明:本題可以用sum函數(shù)來(lái)改寫(留作練習(xí))。for語(yǔ)句最常用的形式格式:for for 循環(huán)變量循環(huán)變量= =表達(dá)式表達(dá)式1 1:表達(dá)式:表達(dá)式2 2:表達(dá)式:表達(dá)式3 3 循環(huán)體語(yǔ)句循環(huán)體語(yǔ)句endend其中,表達(dá)式1為循環(huán)變量的初值,表達(dá)式2的值為步長(zhǎng),表達(dá)式3的值為循環(huán)變量的終值。當(dāng)步長(zhǎng)為1時(shí),表達(dá)式2可以省略。執(zhí)行過(guò)程例3-18求 ,其中,n=10.程序如下:y=0;for k=1:10 y=y+1/2k;endy說(shuō)明:若用sum

17、函數(shù),本題可改寫為:K=1:10; x=1./2.K; y=sum(x) nkk121或者:n=10; k=1; term=1/2; y=term;for i=2:n term=term/2; y=y+term;endy 練習(xí)已知y= ,求y的值程序如下:n=100;y=0;for i=1:n y=y+(-1)(i+1)/i;endy思考:本題不用循環(huán)如何實(shí)現(xiàn)?(利用sum函數(shù))10014131211或者:n=100; i=1; sig=1; y=1;for i=2:n sig=-sig; y=y+sig/i;endy 練習(xí)分別用循環(huán)語(yǔ)句和sum函數(shù)兩種方法求解以下兩題:(1)求(2)編寫程序

18、,計(jì)算的值(用input語(yǔ)句輸入n的值)100131nny) 12(7531ny例3-19 設(shè) , 求 分析:為計(jì)算定積分我們將積分區(qū)間a,b分成n等分,則第i個(gè)分點(diǎn)為第i個(gè)小區(qū)間為 ,于是,當(dāng)n充分大時(shí)6sin6cos)(xxxf20)(dxxfsbadxxf)(,1iixx1,.,1,) 1(ninabhhiaxihxfxfdxxfiixxii2)()()(11hxfxfdxxfdxxfniiinixxbaii1112)()()()(1(梯形公式)程序如下:a=0;b=2*pi;n=1000; h=(b-a)/n;x=a:h:b; %或x=linspace(a,b,n+1); f=cos(

19、x-pi/6).*sin(x+pi/6);y=0;for i=1:n s(i)=(f(i)+f(i+1)/2*h; y=y+s(i);endy思考本題不用循環(huán)如何實(shí)現(xiàn)? 練習(xí) 編寫程序,求定積分3021dxxxs例3-20 求100,200之間第一個(gè)能被13整除的整數(shù)。程序如下:for n=100:200 if rem(n,13)=0 break; endendn思考:不用循環(huán),如何實(shí)現(xiàn)相同的功能?(提示:利用find函數(shù))例3-22 一個(gè)整數(shù)各位數(shù)字的立方和等于這個(gè)數(shù)本身,則稱該數(shù)為水仙花數(shù)。輸出全部三位的水仙花數(shù)。程序如下:for m=100:999 m1=fix(m/100); %求m的

20、百位數(shù) r1=rem(m,100); %m的后兩位 m0=fix(r1/10); %m的十位數(shù) m3=rem(r1,10) %m的個(gè)位數(shù) if m13+m23+m33=m display(m) endend 循環(huán)的嵌套例3-24 編程:輸入n,輸出n階Hilert矩陣說(shuō)明:Hilbert矩陣的第i行第 j列元素為程序如下:N=input(N=); format rat ; H=zeros(N);for i=1:N for j=1:N H(i,j)=1/(i+j-1); endendH11,jihji例 設(shè)x,y,z均為正整數(shù),下列不定方程組共有多少組解?求出它的所有正整數(shù)解。分析:根據(jù)題意,

21、, 我們用枚舉法求解程序:n=0; solutions=;for x=1:18 for y=1:18 z=20-x-y; 40016202520zyxzyx18,1zyx if z0 & 25*x+20*y+16*z=400 solutions =solutions; x,y,z; n=n+1; end %if end % for yend % for x display(方程共有 num2str(n) 組解)disp(solutions)3.5.2 while語(yǔ)句while語(yǔ)句的一般格式為: while while 條件表達(dá)式條件表達(dá)式 循環(huán)體語(yǔ)句循環(huán)體語(yǔ)句 endend 其執(zhí)行過(guò)程為:若條件表達(dá)式為真(非零),則執(zhí)行循環(huán)體語(yǔ)句,否則,跳出循環(huán)。每次執(zhí)行循環(huán)體語(yǔ)句后,重新判斷條件表達(dá)式是否為真(如果為真,則繼續(xù)執(zhí)行循環(huán)體語(yǔ)句,否則跳出循環(huán))。重復(fù)以上過(guò)程,直至條件表達(dá)式為假(零)時(shí),跳出循環(huán)。 break和continue命令另外,在執(zhí)行循環(huán)體語(yǔ)句時(shí),當(dāng)執(zhí)行到break 命令時(shí),也跳出for循環(huán)或while 循環(huán)(注意:只跳出break所在的一層循環(huán))。如果在循環(huán)體語(yǔ)句中遇到continue 語(yǔ)句,則停止執(zhí)行剩余的循環(huán)體語(yǔ)句,轉(zhuǎn)到下一次循環(huán)的開(kāi)始執(zhí)行(對(duì)于for語(yǔ)句,則

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論