講稿-程序設(shè)計(jì)-MATLAB入門(mén).ppt_第1頁(yè)
講稿-程序設(shè)計(jì)-MATLAB入門(mén).ppt_第2頁(yè)
講稿-程序設(shè)計(jì)-MATLAB入門(mén).ppt_第3頁(yè)
講稿-程序設(shè)計(jì)-MATLAB入門(mén).ppt_第4頁(yè)
講稿-程序設(shè)計(jì)-MATLAB入門(mén).ppt_第5頁(yè)
已閱讀5頁(yè),還剩29頁(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)介

MATLAB入門(mén),第三部分 程序設(shè)計(jì),一、關(guān)系運(yùn)算、邏輯運(yùn)算,二、程序結(jié)構(gòu)與控制,三、M文件,二、程序結(jié)構(gòu)與控制語(yǔ)句,控制語(yǔ)句:forend循環(huán)、whileend循環(huán)、if-else-end、Swich語(yǔ)句,順序結(jié)構(gòu)(按照順序執(zhí)行命令) 循環(huán)結(jié)構(gòu) 分支結(jié)構(gòu) 理論上有了以上3種結(jié)構(gòu)就可以構(gòu)造功能強(qiáng)大的程序。由于matlab是C語(yǔ)言編成的,它的控制語(yǔ)句也同C語(yǔ)言有相似之處,但是又有不同之處,程序結(jié)構(gòu):,1、順序結(jié)構(gòu),它是按照順序執(zhí)行命令。,input disp pause(或Ctrl+C),eg1. x=input(input x,please:); y=input(input y,please:); z=x; x=y; y=z; disp(x); disp(y);,Eg2. x=1:50; y=reshape(x,10,5); z=y; n=input(請(qǐng)輸入顯示次數(shù):); t=input(請(qǐng)輸入間隔時(shí)間:); for i=1:n disp(x=1-50) disp(z) pause(t) end,(1) for循環(huán):允許一組命令以固定的和預(yù)定的次數(shù)重復(fù) for x=array commands end 在for和end語(yǔ)句之間的命令串commands按數(shù)組(array)中的每一列執(zhí)行一次. 在每一次迭代中,x被指定為數(shù)組的下一列,即在第n次循環(huán)中,x=array(:,n). 也可嵌套使用。,2.循環(huán)結(jié)構(gòu) 循環(huán)是計(jì)算機(jī)解決問(wèn)題的主要手段,許許多多實(shí)際問(wèn)題大都包含有規(guī)律性的重復(fù)計(jì)算和對(duì)某些語(yǔ)句的重復(fù)執(zhí)行。,eg2. 1+100 eg3. 1-20階乘累加和 eg4.p30 雙重循環(huán)實(shí)現(xiàn)希爾伯特矩陣,eg1. 對(duì)n=1,2,10,求xn= 的值.,eg2. 1+100 程序:s=0; for i=1:100 s=s+i; end s,法1: s=0; p=1; for i=1:20 p=p*i; s=s+p; end s,eg3. 1-20階乘累加和,法2: s=0; for i=1:20 p=1; for k=1:i p=p*k; end s=s+p; end s,法3: s=0; for i=1:20 s=s+prod(1:i); end s,Eg1. for n=1:10 x(n)=sin(n*pi/10); end x,Eg4(見(jiàn)p30) for i=1:3 for j=1:4 a(i,j)=1/(i+j-1); end end a,a = 1 1/2 1/3 1/4 1/2 1/3 1/4 1/5 1/3 1/4 1/5 1/6,while (expression) commands end 只要在表達(dá)式(expression)里的所有元素為真,就執(zhí)行while和end語(yǔ)句之間的命令串commands. 表達(dá)式一般由邏輯、關(guān)系運(yùn)算以及一般的運(yùn)算組成。,( 2) While循環(huán) 與for循環(huán)以固定次數(shù)求一組命令相反,while循環(huán)以不定的次數(shù)求一組語(yǔ)句的值.,eg2.找MATLAB軟件最小的正數(shù)(預(yù)定義的)。P30 num=0;EPS=1; while (1+EPS)1 EPS=EPS/2; num=num+1; end num EPS=2*EPS,eg1: 設(shè)銀行年利率為11.25%.將10000元錢(qián)存入銀行,問(wèn)多長(zhǎng)時(shí)間會(huì)連本帶利翻一番?money=10000 years=0 while money20000 years=years+1; money=money*(1+11.25/100); end years money,分析:Fibonacci數(shù)組的元素滿足Fibonacci 規(guī)則: 現(xiàn)要求該數(shù)組中第一個(gè)大于10000的元素。,程序: 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),Eg3.尋Fibonacci數(shù)組第一個(gè)大于10000的元素及位置。,3. (選擇)分支結(jié)構(gòu) 3.1 if-else-end結(jié)構(gòu) i) 有一個(gè)選擇的一般形式是: if (expression) commands end 如果在表達(dá)式(expression)里的所有元素為真,就執(zhí)行if和end語(yǔ)句之間的命令串commands.,x=input(x=) if x1 f=x2+1 end if x=1 f=2*x end,另: x=2,1 for i=1:2 if x(i)1 f=x(i)2+1 end if x(i)=1 f=2*x(i) end end,ii) 有三個(gè)或更多的選擇的一般形式是: if (expression1) commands1 else if (expression2) commands2 else if (expression3) commands3 else if else commands end end end end,eg2.打折問(wèn)題. 程序: cost=3;number=input(number=); if number20 sums=number*0.8*cost; else sums=number*0.95*cost; end sums,循環(huán)結(jié)構(gòu)中常用的兩個(gè)函數(shù)命令Break,continue一般與if語(yǔ)句配合使用. Break:語(yǔ)句用于終止循環(huán)的執(zhí)行。當(dāng)在循環(huán)體內(nèi)執(zhí)行到該語(yǔ)句時(shí),程序?qū)⑻鲅h(huán)(多層循環(huán)只跳出最內(nèi)層循環(huán)),繼續(xù)執(zhí)行循環(huán)語(yǔ)句的下一語(yǔ)句。 Continue:語(yǔ)句控制跳過(guò)循環(huán)體中的某些語(yǔ)句。當(dāng)在循環(huán)體內(nèi)執(zhí)行到該語(yǔ)句時(shí),程序?qū)⑻^(guò)循環(huán)體中所有剩下的語(yǔ)句,繼續(xù)下一次循環(huán)。,思1:求100,200之間第一個(gè)能被21整除的整數(shù)。,程序1: for n=100:200 if rem(n,21)=0 n break end end,程序2: for n=100:200 if rem(n,21)=0 continue end break end n,思2:分別用for和while循環(huán)找出100,200之間所有的素?cái)?shù)。,I.for循環(huán)程序: for m=101:2:200 k=fix(sqrt(m); for i=2:k+1 if rem(m,i)=0 break; end end if i=k+1 disp(int2str(m) end end,II.while循環(huán)程序: m=101; while m=k+1 disp(int2str(m) end m=m+2; end,思考題2程序:,3.2 switch-case-end結(jié)構(gòu) if-else-end語(yǔ)句所對(duì)應(yīng)的是多重判斷選擇,而有時(shí)也會(huì)遇到多分支判斷選擇的問(wèn)題。MATLAB語(yǔ)言為解決多分支判斷選擇提供了switch-case語(yǔ)句。 swich語(yǔ)句是多分支選擇語(yǔ)句,雖然在某些場(chǎng)合switch功能可以由if語(yǔ)句的多層嵌套來(lái)完成,但是會(huì)使程序變得復(fù)雜和難于修改維護(hù),而利用switch語(yǔ)句構(gòu)造多分支選擇時(shí)顯得更加簡(jiǎn)單明了、容易理解。,switch-case語(yǔ)句的一般表達(dá)形式為: switch表達(dá)式 case 選擇判斷值1 選擇判斷語(yǔ)句1 case 選擇判斷值2 選擇判斷語(yǔ)句2 otherwise 判斷執(zhí)行語(yǔ)句 end,程序1: N = input(輸入分?jǐn)?shù)); switch N case 100 %得分為100時(shí) S =滿分; %列為滿分等級(jí) case 90 %得分在90和99之間 S = 優(yōu)秀; %列為優(yōu)秀等級(jí) case 80 %得分在80和89之間 S = 良好; %列為良好等級(jí) case 60 %得分在60和79之間 S = 及格; %列為及格等級(jí) otherwise %得分低于60。 S =不及格; %列為不及格等級(jí) end disp(S),Eg1 .學(xué)生的成績(jī)管理,用來(lái)演示switch結(jié)構(gòu)的應(yīng)用。 %劃分區(qū)域:滿分(100),優(yōu)秀(90-99),良好(80-89),及格(60-79),不及格(60)。,程序2: N = input(輸入分?jǐn)?shù)); N1=fix(N/10); switch N1 case 10 %得分為100時(shí) S =滿分; %列為滿分等級(jí) case 9 %得分在90和99之間 S = 優(yōu)秀; %列為優(yōu)秀等級(jí) case 8 %得分在80和89之間 S = 良好; %列為良好等級(jí) case 6,7 %得分在60和79之間 S = 及格; %列為及格等級(jí) otherwise %得分低于60。 S =不及格; %列為不及格等級(jí) end disp(S),eg2: 某商場(chǎng)對(duì)顧客所購(gòu)買(mǎi)的商品實(shí)行打折銷(xiāo)售,標(biāo)準(zhǔn)如下(商品價(jià)格用price來(lái)表示): price200 沒(méi)有折扣 200price500 3%折扣 500price1000 5%折扣 1000price2500 8%折扣 2500price5000 10%折扣 5000price 14%折扣 輸入所售商品的價(jià)格,求其實(shí)際銷(xiāo)售價(jià)格。,程序如下: price=input(請(qǐng)輸入商品原價(jià)格為:); switch fix(price/100) case 0,1 %價(jià)格小于200 rate=0; case 2,3,4 %價(jià)格大于等于200但小于500 rate=3/100; case num2cell(5:9) %價(jià)格大于等于500但小于1000 rate=5/100; case num2cell(10:24) %價(jià)格大于等于1000但小于2500 rate=8/100; case num2cell(25:49) %價(jià)格大于等于2500但小于5000 rate=10/100; otherwise %價(jià)格大于等于5000 rate=14/100; end price=price*(1-rate) %輸出商品實(shí)際銷(xiāo)售價(jià)格,Num2cell 將元素轉(zhuǎn)化為元包,三. M文件,所謂M文件就是由MATLAB語(yǔ)言編寫(xiě)的可在MATLAB語(yǔ)言環(huán)境下運(yùn)行程序源代碼文件。由于目前的MATLAB軟件是用C語(yǔ)言編寫(xiě)而成。因此,M文件的語(yǔ)法與C語(yǔ)言十分相似,并且語(yǔ)法簡(jiǎn)單,調(diào)試容易,人機(jī)交互性強(qiáng)。用戶可以使用任何文字處理M文件的編寫(xiě)和修改。這些特點(diǎn)造就了matlab強(qiáng)大的可開(kāi)發(fā)性和可擴(kuò)展性,mathwork公司推出的一系列工具箱就是明證。用戶還可以用M文件來(lái)建造和擴(kuò)充屬于自己的“庫(kù)”。因此,有人說(shuō):“一個(gè)不了解M文件,沒(méi)有掌握M文件的matlab使用者不能稱(chēng)其為一個(gè)真正的matlab用戶?!?M文件可以分為腳本文件(Script) (文本文件或命令式文件)和函數(shù)文件(Function)兩種。M文件不僅可以在MATLAB的程序編輯器中編寫(xiě),也可以在其他的文本編輯器中編寫(xiě),并以“m”為擴(kuò)展名加以存儲(chǔ)。,matlab的.m文件保存的命名規(guī)則:(基本遵循變量命名) 1.文件名命名要用英文字符,第一個(gè)字符不能是數(shù)字(下劃線呢?) 2.文件名不要取為matlab的一個(gè)固有函數(shù),m文件名的命名盡量不要是簡(jiǎn)單的英文單詞,最好是由大小寫(xiě)英文/數(shù)字/下劃線等組成。原因是簡(jiǎn)單的單詞命名容易與matlab內(nèi)部函數(shù)名同名,結(jié)果會(huì)出現(xiàn)一些莫名其妙的錯(cuò)誤。 3、文件存儲(chǔ)路徑一定為英文 4、m文件起名不能為兩個(gè)單詞,如three phase,應(yīng)該寫(xiě)成three_phase或者ThreePhase,1. 腳本文件,命令行簡(jiǎn)單的疊加,matlab會(huì)自動(dòng)按順序執(zhí)行文件中的命令 。這樣就解決了用戶在命令窗中運(yùn)行許多命令的麻煩,還可以 避免用戶做許多重復(fù)性的工作。,Eg1. 輸入如下一段程序 (picture.m) x=linspace(0,2*pi,20); y=sin(x); plot(x,y,r+) title(2D plot),Eg2.% 新建M-file, area.m % 計(jì)算一個(gè)球的體積 r = input(Type radius 輸入半徑:); Area=pi*r2; volume=(4/3)*pi*r3; fprintf(半徑 The radius is %12.5fn,r) fprintf(面積 The area of a circle%12.5fn,Area) fprintf(體積 The volume of a sphere%12.5fn,volume),提醒兩點(diǎn):1.標(biāo)點(diǎn)符號(hào)的運(yùn)用要恰到好處。 2.建立好的書(shū)寫(xiě)風(fēng)格,保持程序的可讀性。 3.養(yǎng)成良好的注釋習(xí)慣,MATLAB的內(nèi)部函數(shù)是有限的,有時(shí)為了研究某一個(gè)函數(shù)的各種性態(tài),需要為MATLAB定義新函數(shù),為此必須編寫(xiě)函數(shù)文件. 它主要用以解決參數(shù)傳遞和函數(shù)調(diào)用的問(wèn)題。函數(shù)文件是文件名后綴為M的文件,這類(lèi)文件的第一行必須是一特殊字符function開(kāi)始,格式為: function 因變量名=函數(shù)名(自變量名) 函數(shù)值的獲得必須通過(guò)具體的運(yùn)算實(shí)現(xiàn),并賦給因變量.,2. 函數(shù)M文件,* M文件建立方法與腳本M文件一樣,M文件名必須與函數(shù)名一致. * 腳本文件運(yùn)行時(shí),所有數(shù)據(jù)都在內(nèi)存中。而函數(shù)M文件除特別聲明外都為局部變量(僅僅在函數(shù)運(yùn)行期間有效)。一個(gè)函數(shù)的M文件與腳本文件在通信方面是不同的。函數(shù)與MATLAB工作空間之間的通信,只通過(guò)傳遞給它的變量和通過(guò)它所創(chuàng)建的輸出變量。在函數(shù)內(nèi)中間變量不出現(xiàn)在MATLAB工作空間,或與MATLAB工作空間不交互。,M文件函數(shù)必須遵循以下特定的規(guī)則。 1. 函數(shù)名和文件名必須相同。例如,函數(shù)fliplr 存儲(chǔ)在名為fliplr.m 文件中。 2. MATLAB頭一次執(zhí)行一個(gè)M文件函數(shù)時(shí),它打開(kāi)相應(yīng)的文本文件并將命令編輯成存儲(chǔ)器的內(nèi)部表示,以加速執(zhí)行以后所有的調(diào)用。如果函數(shù)包含了對(duì)其它M文件函數(shù)的引用,它們也同樣被編譯到存儲(chǔ)器。普通的腳本M文件不被編譯,即使它們是從函數(shù)M文件內(nèi)調(diào)用;打開(kāi)腳本M文件,調(diào)用一次就逐行進(jìn)行注釋。 3. 在函數(shù)M文件中,到第一個(gè)非注釋行為止的注釋行是幫助文本。當(dāng)需要幫助時(shí),返回該文本。例如, help fliplr返回上述前八行注釋。 4. 第一行幫助行,名為H1 行,是由lookfor 命令搜索的行。 5. 函數(shù)可以有零個(gè)或更多個(gè)輸入?yún)⒘?。函?shù)可以有零個(gè)或更多個(gè)輸出參量。 6. 函數(shù)可以按少于函數(shù)M文件中所規(guī)定的輸入和輸出變量進(jìn)行調(diào)用,但不能用多于函數(shù)M文件中所規(guī)定的輸入和輸出變量數(shù)目。如果輸入和輸出變量數(shù)目多于函數(shù)M文件中function 語(yǔ)句一開(kāi)始所規(guī)定的數(shù)目,則調(diào)用時(shí)自動(dòng)返回一個(gè)錯(cuò)誤。 7. 當(dāng)函數(shù)有一個(gè)以上輸出變量時(shí),輸出變量包含在括號(hào)內(nèi)。例如,V,D = eig(A)。不要把這個(gè)句法與等號(hào)右邊的V,D 相混淆。右邊的V,D 是由數(shù)組V和D 所組成。 8. 當(dāng)調(diào)用一個(gè)函數(shù)時(shí),所用的輸入和輸出的參量的數(shù)目,在函數(shù)內(nèi)是規(guī)定好的。函數(shù)工作空間變量nargin 包含輸入?yún)⒘總€(gè)數(shù);函數(shù)工作空間變量nargout 包含輸出參量個(gè)數(shù)。事實(shí)上,這些變量常用來(lái)設(shè)置缺省輸入變量,并決定用戶所希望的輸出變量。,MATLAB語(yǔ)言的函數(shù)文件包含如下5個(gè)部分。 1.函數(shù)題頭:指函數(shù)的定義行,是函數(shù)語(yǔ)句的第一行,在該行中將定義函數(shù)名、輸入變量列表及輸出變量列表等。 2.HI行:指函數(shù)幫助文本的第一行,為該函數(shù)文件的幫助主題,當(dāng)使用lookfor命令時(shí),可以查看到該行信息。 3.幫助信息:這部分提供了函數(shù)的完整的幫助信息,包括HI之后至第一個(gè)可執(zhí)行行或空行為止的所有注釋語(yǔ)句,通過(guò)MATLAB語(yǔ)言的幫助系統(tǒng)查看函數(shù)的幫助信息時(shí),將顯示該部分。 4.函數(shù)體;指函數(shù)代碼段,也是函數(shù)的主體部分。 5.注釋部分:指對(duì)函數(shù)體中各語(yǔ)句的解釋和說(shuō)明文本,注釋語(yǔ)句是以%引導(dǎo)的。,例1:,首先建立一個(gè)M函數(shù):fun1.m function Y= fun1(x) Y=(x3 - 2*x2 + x - 6.3)/(x2 + 0.05*x - 3.14); 在指令窗口運(yùn)行以下指令: fun1(1)*fun1(2)+fun1(3)*fun1(3) ans = -12.6023,計(jì)算f(1)f(2)+f2(3).,例2:定義函數(shù) f(x1,x2)=100(x2-x12)2+(1-x1)2,function f=fun(x) f=100*(x(2)-x(1)2)2+(1-x(1)2,1.建立M文件:fun.m,MATLAB(fun),2. 可以直接使用函數(shù)fun.m,例如:計(jì)算 f(1,2), 只需在MATLAB命令窗口鍵入命令: x=1 2 fun(x) 也可看p33例子,返回,Eg3.多個(gè)因變量的例子:p33下面 function mean,stdev=stat(x) m,n=size(x); if m=1 m=n; end mean=sum(x)/

溫馨提示

  • 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)論