Matlab基礎(chǔ)及其應(yīng)用教程0課件3_第1頁
Matlab基礎(chǔ)及其應(yīng)用教程0課件3_第2頁
Matlab基礎(chǔ)及其應(yīng)用教程0課件3_第3頁
Matlab基礎(chǔ)及其應(yīng)用教程0課件3_第4頁
Matlab基礎(chǔ)及其應(yīng)用教程0課件3_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第3章MATLAB程序設(shè)計(jì)【本章學(xué)習(xí)目標(biāo)】掌握建立和執(zhí)行腳本的方法。掌握利用if語句、switch語句實(shí)現(xiàn)選擇結(jié)構(gòu)的方法。掌握利用for語句、while語句實(shí)現(xiàn)循環(huán)結(jié)構(gòu)的方法。熟悉利用向量運(yùn)算來代替循環(huán)操作的方法。掌握定義和調(diào)用MATLAB函數(shù)的方法。3.1 腳本MATLAB命令執(zhí)行方式交互式的命令執(zhí)行方式:在命令行窗口逐條輸入命令,MATLAB逐條解釋執(zhí)行。腳本方式:將有關(guān)命令編成程序存儲(chǔ)在一個(gè)擴(kuò)展名為.m的文件中,每次運(yùn)行該腳本,MATLAB就會(huì)自動(dòng)依次執(zhí)行腳本中的命令。3.1 腳本1MATLAB編輯器MATLAB編輯器界面包括功能區(qū)和編輯區(qū)兩個(gè)部分。3.1.1 腳本的編輯功能區(qū)編輯區(qū)3.

2、1 腳本2啟動(dòng)MATLAB編輯器(1)單擊 MATLAB桌面的“主頁”選項(xiàng)卡工具條中的“新建腳本”按鈕(2)在MATLAB命令行窗口輸入命令:edit 文件名(3)在“命令歷史記錄”面板選中一些命令(按住Ctrl鍵可同時(shí)選擇多條命令),然后從右鍵菜單中選擇“創(chuàng)建腳本”命令3.1.1 腳本的編輯3.1 腳本【例3.1】建立一個(gè)腳本,其功能是:用兩個(gè)實(shí)變量R、M生成復(fù)變量RM,然后運(yùn)行該腳本。建立腳本文件并以文件名setcomp.m保存在當(dāng)前目錄下。3.1.1 腳本的編輯clear;R=1,2,3;4,5,6;M=11,12,13;14,15,16;RM=complex(R,M);在MATLAB編

3、輯器的“編輯器”選項(xiàng)卡中單擊“運(yùn)行”按鈕,或在MATLAB的命令行窗口中輸入腳本文件名:setcomp,然后按Enter鍵。3.1 腳本1實(shí)時(shí)編輯器實(shí)時(shí)腳本在MATLAB實(shí)時(shí)編輯器中創(chuàng)建、編輯、調(diào)試。3.1.2 實(shí)時(shí)腳本功能區(qū)編輯區(qū)輸出區(qū)3.1 腳本2啟動(dòng)MATLAB實(shí)時(shí)編輯器(1)單擊MATLAB桌面的“主頁”選項(xiàng)卡工具條中的“新建實(shí)時(shí)腳本”按鈕(2)在MATLAB命令行窗口輸入命令:edit 文件名.mlx(3)在命令歷史記錄面板選中一些命令(按住Ctrl可同時(shí)選多條命令),然后從右鍵快捷菜單中選擇“創(chuàng)建實(shí)時(shí)腳本”命令3.1.2 實(shí)時(shí)腳本3.1 腳本3代碼的分節(jié)運(yùn)行實(shí)時(shí)腳本通常包含很多命令

4、,有時(shí)只需要運(yùn)行其中一部分,這時(shí)可通過設(shè)置分節(jié)標(biāo)志,將全部代碼分成若干代碼片段(也稱為代碼單元)。3.1.2 實(shí)時(shí)腳本3.2 程序控制結(jié)構(gòu)1input函數(shù)用于打開一個(gè)輸入框來獲取數(shù)據(jù),該函數(shù)的調(diào)用格式為:A=input(提示信息)其中,提示信息為一個(gè)字符串,用于提示用戶輸入什么樣的數(shù)據(jù)。3.2.1 順序結(jié)構(gòu) A=input(輸入A矩陣:)輸入A矩陣:1,2,3;4,5,6A = 1 2 3 4 5 6若要輸入一個(gè)字符串,輸入的字符串前后加單撇號(hào)或雙引號(hào),界定字符串的起始和結(jié)束。3.2 程序控制結(jié)構(gòu)1input函數(shù)若要輸入一個(gè)字符串,輸入的字符串前后加單撇號(hào)或雙引號(hào),界定字符串的起始和結(jié)束。輸入

5、一個(gè)字符串也可以使用以下調(diào)用方法:A=input(提示信息, s)3.2.1 順序結(jié)構(gòu) xm=input(Whats your name?,s)Whats your name?Tommy Tunexm = Tommy Tune xm=input(What is your name?)What is your name?Tommy Tunexm = Tommy Tune3.2 程序控制結(jié)構(gòu)2disp函數(shù)用于在命令窗口顯示變量和表達(dá)式的值,其調(diào)用格式為disp(輸出項(xiàng))其中,輸出項(xiàng)既可以為字符串,也可以為矩陣。3.2.1 順序結(jié)構(gòu) A=Hello,World!; disp(A)Hello,Worl

6、d! A=1, 2, 3; 4, 5, 6; disp(A) 1 2 3 4 5 63.2 程序控制結(jié)構(gòu)1if語句3.2.2 選擇結(jié)構(gòu)if 條件1 語句塊1elseif 條件2 語句塊2elseif 條件n 語句塊nelse 語句塊n+1end圖3.3 if語句的執(zhí)行過程3.2 程序控制結(jié)構(gòu)【例3.2】計(jì)算分段函數(shù):3.2.2 選擇結(jié)構(gòu)x=input(請(qǐng)輸入x的值:);if x0 y=abs(x);elseif x10 y=sin(x)./(x+1);elseif x=A & c=a & c=0 & c=9 disp(str2double(c)2);else disp(c);end3.2 程序

7、控制結(jié)構(gòu)2switch語句3.2.2 選擇結(jié)構(gòu)switch 測(cè)試表達(dá)式 case 結(jié)果表1 語句塊1 case 結(jié)果表2 語句塊2 case 結(jié)果表n 語句塊n otherwise 語句塊n+1 end圖3.4 switch語句的執(zhí)行過程3.2 程序控制結(jié)構(gòu)【例3.4】輸入一個(gè)字符,若為大寫字母,則輸出其對(duì)應(yīng)的小寫字母;若為小寫字母,則輸出其對(duì)應(yīng)的大寫字母;若為數(shù)字字符則輸出其對(duì)應(yīng)數(shù)的平方,若為其他字符則原樣輸出。3.2.2 選擇結(jié)構(gòu)c=input(請(qǐng)輸入一個(gè)字符:,s);switch c case num2cell(A:Z) disp(lower(c); case num2cell(a:z)

8、 disp(upper(c); case num2cell(0:9) disp(c-0)2); otherwise disp(c);end3.2 程序控制結(jié)構(gòu)3try語句一種試探性執(zhí)行語句,為開發(fā)人員提供了一種捕獲錯(cuò)誤的機(jī)制,其格式為:3.2.2 選擇結(jié)構(gòu)try 語句塊1catch 變量 語句塊2endtry語句先試探性執(zhí)行語句塊1,如果語句塊1在執(zhí)行過程中出現(xiàn)錯(cuò)誤,則將錯(cuò)誤信息賦給catch后的變量,并轉(zhuǎn)去執(zhí)行語句塊2。catch后的變量是一個(gè)MException類的對(duì)象,其message屬性用于返回錯(cuò)誤的說明。3.2 程序控制結(jié)構(gòu)【例3.5】矩陣乘法運(yùn)算要求兩矩陣的維度相容,否則會(huì)出錯(cuò)。編

9、寫程序,求兩矩陣的乘積,若出錯(cuò),則顯示出錯(cuò)的原因。3.2.2 選擇結(jié)構(gòu)A=input(請(qǐng)輸入A矩陣:);B=input(請(qǐng)輸入B矩陣:);try C=A*B; disp(C)catch err disp(err.message)end程序執(zhí)行結(jié)果如下:請(qǐng)輸入A矩陣:1,2,3;4,5,6請(qǐng)輸入B矩陣:7,8,9;10,11,12內(nèi)部矩陣維度必須一致3.2 程序控制結(jié)構(gòu)1for語句用于處理能事先確定循環(huán)次數(shù)的情況。其中,表達(dá)式1的值為循環(huán)變量的初值,表達(dá)式2的值為步長,表達(dá)式3的值為循環(huán)變量的終值。步長為1時(shí),表達(dá)式2可以省略。3.2.3 循環(huán)結(jié)構(gòu)for 循環(huán)變量=表達(dá)式1:表達(dá)式2:表達(dá)式3

10、循環(huán)體語句end圖3.5 for語句執(zhí)行過程3.2 程序控制結(jié)構(gòu)【例3.6】一個(gè)各位數(shù)字的立方和等于該數(shù)本身的3位整數(shù)稱為水仙花數(shù)。輸出全部水仙花數(shù)。3.2.3 循環(huán)結(jié)構(gòu)shu=; %建立一個(gè)空矩陣shu,用于存放結(jié)果for n=100:999 n1=fix(n/100); %求n的百位數(shù)字 n2=mod(fix(n/10),10); %求n的十位數(shù)字 n3=mod(n,10); %求n的個(gè)位數(shù)字 if n=n1*n1*n1+n2*n2*n2+n3*n3*n3 shu=shu,n; %存入結(jié)果 endenddisp(shu)3.2 程序控制結(jié)構(gòu)【例3.7】已知 ,求y的值。3.2.3 循環(huán)結(jié)構(gòu)

11、y=0;n=100;f=1;for i=1:n y=y+f/i; f=-f;enddisp(y=,num2str(y)3.2 程序控制結(jié)構(gòu)在MATLAB中,for語句也可以采用以下格式:for 循環(huán)變量 = 矩陣 循環(huán)體語句End【例3.8】寫出下列程序的執(zhí)行結(jié)果。3.2.3 循環(huán)結(jié)構(gòu)s=0;a=1,2,3,4;31,41,51,61;101,102,103,104;for k=a s=s+k;enddisp(s)3.2 程序控制結(jié)構(gòu)2while語句3.2.3 循環(huán)結(jié)構(gòu)While 條件 循環(huán)體語句end圖3.6 while語句執(zhí)行過程3.2 程序控制結(jié)構(gòu)【例3.9】求使 的最小的n。3.2.3

12、 循環(huán)結(jié)構(gòu)y=0;n=0;while (y=1.5) n=n+1; y=y+1/n/n;enddisp(滿足條件的n是:,num2str(n)3.2 程序控制結(jié)構(gòu)3break語句和continue語句break語句用于終止循環(huán)的執(zhí)行。continue語句控制跳過循環(huán)體中的某些語句。3.2.3 循環(huán)結(jié)構(gòu)3.2 程序控制結(jié)構(gòu)【例3.10】輸入兩個(gè)整數(shù),求它們的最小公倍數(shù)。3.2.3 循環(huán)結(jié)構(gòu)x=input(請(qǐng)輸入第一個(gè)數(shù):);y=input(請(qǐng)輸入第二個(gè)數(shù):);z1=max(x,y);z=0;while z a1,a2=sumfraction(2,5)a1 = 1.0929a2 = 0.35713

13、.3 函數(shù)【例3.14】n的階乘在數(shù)學(xué)上定義為:3.3.2 函數(shù)調(diào)用函數(shù)文件factorialfun.m定義如下:function f=factorialfun(n)if n fun1=(x)3*x.*x+5*x+6; a=1:1:4; c=fun1(a)c = 14 28 48 74 fun2=(x,y)x.*x-y.*y; a=7:10; b=1:4; z=fun2(a,b)z = 48 60 72 843.3 函數(shù)函數(shù)文件中的變量的作用域默認(rèn)是局部的全局變量用global命令定義,命令格式為:global var1 var2 . varN變量var1、var2、varN之間用空格分隔。3

14、.3.5 全局變量與局部變量3.3 函數(shù)【例3.16】全局變量應(yīng)用示例。先建立函數(shù)文件wmean.m,該函數(shù)計(jì)算輸入?yún)?shù)加權(quán)平均值。建立的腳本文件meanmain.m,調(diào)用函數(shù)wmean。3.3.5 全局變量與局部變量function f=wmean(x,y)global w1 w2;f=(w1*x+w2*y)/(w1+w2);global w1 w2w1=3;w2=4;wavemean=wmean(92,86);disp(加權(quán)平均值為: ,num2str(wavemean)3.4 程 序 調(diào) 試應(yīng)用程序的錯(cuò)誤有兩類語法錯(cuò)誤:語法或文法的錯(cuò)誤,如函數(shù)名拼寫錯(cuò)、表達(dá)式書寫錯(cuò)、數(shù)據(jù)類型錯(cuò)誤等運(yùn)行時(shí)

15、的錯(cuò)誤:程序的運(yùn)行結(jié)果有錯(cuò)誤,也稱為程序邏輯錯(cuò)誤。常用的辦法:通過觀測(cè)中間結(jié)果來發(fā)現(xiàn)錯(cuò)誤可能發(fā)生的程序段,以便進(jìn)一步分析錯(cuò)誤的原因。3.4.1 程序調(diào)試概述3.4 程 序 調(diào) 試應(yīng)用程序的錯(cuò)誤有兩類語法錯(cuò)誤:語法或文法的錯(cuò)誤,如函數(shù)名拼寫錯(cuò)、表達(dá)式書寫錯(cuò)、數(shù)據(jù)類型錯(cuò)誤等運(yùn)行時(shí)的錯(cuò)誤:程序的運(yùn)行結(jié)果有錯(cuò)誤,也稱為程序邏輯錯(cuò)誤。常用的辦法:通過觀測(cè)中間結(jié)果來發(fā)現(xiàn)錯(cuò)誤可能發(fā)生的程序段,以便進(jìn)一步分析錯(cuò)誤的原因。(1)使用MATLAB編輯器,在打開的腳本中設(shè)置斷點(diǎn)。(2)在命令行窗口里調(diào)用調(diào)試函數(shù)3.4.1 程序調(diào)試概述3.4 程 序 調(diào) 試MATLAB編譯器提供3類與調(diào)試有關(guān)的功能模塊“斷點(diǎn)”命令組

16、提供設(shè)置、清除斷點(diǎn)的命令“運(yùn)行”命令組提供運(yùn)行腳本的命令“調(diào)試”命令組提供調(diào)試中的控制單步運(yùn)行的命令。1斷點(diǎn)操作2控制單步運(yùn)行3.4.2 MATLAB調(diào)試模塊3.4 程 序 調(diào) 試【例3.17】在如圖3.8所示的編輯器窗口中,有一個(gè)求兩個(gè)數(shù)的最小公倍數(shù)的程序commulti.m,試設(shè)置斷點(diǎn)來控制程序執(zhí)行。3.4.2 MATLAB調(diào)試模塊3.5 程序性能分析與優(yōu)化利用MATLAB的探查器、tic函數(shù)和toc函數(shù)提供的分析報(bào)告能幫助用戶探尋影響程序運(yùn)行速度的“瓶頸”所在,以便于進(jìn)行代碼優(yōu)化。打開探查器有3種方法:(1)在命令行窗口中調(diào)用profile函數(shù)。(2)單擊MATLAB桌面“主頁”選項(xiàng)卡中

17、的“運(yùn)行并計(jì)時(shí)”按鈕。(3)單擊MATLAB編輯器的“編輯器”選項(xiàng)卡中的“運(yùn)行并計(jì)時(shí)”按鈕。3.5.1 程序性能分析3.5 程序性能分析與優(yōu)化假定當(dāng)前文件夾下有腳本文件profilertest.m,文件中包含如下代碼:t=linspace(0,2*pi,100);x=sin(t);y=t.*cos(t);plot(x,y)在MATLAB的命令行窗口輸入以下命令: profile on profilertest profile viewer3.5.1 程序性能分析3.5 程序性能分析與優(yōu)化3.5.2 程序優(yōu)化用循環(huán)結(jié)構(gòu)實(shí)現(xiàn),程序如下:n=100000;y=0;for x=1:n y=y+1/x/(x+1);end用向量求和的方法實(shí)現(xiàn),程序如下:n=100000;vx=1:n;x=1./vx./(vx+1);y=sum(x);后一種方法比前一種方法運(yùn)行時(shí)間短。3.5 程序性能分析與優(yōu)化(2)預(yù)分配內(nèi)存空間。通過在循環(huán)之前預(yù)分配向量或數(shù)組的內(nèi)存空間可以提高for循環(huán)的處理速度。3.5.2 程序優(yōu)化程序1:clear;a

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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)論