matla M文件程序設(shè)計基礎(chǔ)_第1頁
matla M文件程序設(shè)計基礎(chǔ)_第2頁
matla M文件程序設(shè)計基礎(chǔ)_第3頁
matla M文件程序設(shè)計基礎(chǔ)_第4頁
matla M文件程序設(shè)計基礎(chǔ)_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第八章M文獻程序設(shè)計基礎(chǔ)

計算機及信息工程學(xué)院第1頁8.1M文獻

M文獻是由MATLAB命令或函數(shù)組成文本文獻,以.m為擴展名。M文獻有兩種形式:命令文獻(Script)函數(shù)文獻(Function)8.1.1命令文獻命令文獻沒有輸入輸出參數(shù),是最簡單M文獻。變量為工作區(qū)變量。第2頁【例8-1】建立命令文獻,繪制花瓣圖。在編輯器中編輯命令,繪制花瓣圖:%繪制花瓣圖theta=-pi:0.01:pi;rho(1,:)=2*sin(5*theta).^2;rho(2,:)=cos(10*theta).^3;rho(3,:)=sin(theta).^2;rho(4,:)=5*cos(3.5*theta).^3;fork=1:4subplot(2,2,k)%循環(huán)控制

polar(theta,rho(k,:))%繪制極坐標(biāo)圖end第3頁8.1.2函數(shù)文獻函數(shù)文獻能夠介紹輸入?yún)?shù)和返回輸出參數(shù),函數(shù)在自己工作空間中操作局部變量。MATLAB函數(shù)文獻有下列部分組成:函數(shù)定義行H1行幫助文本第一行,以“%”開始幫助文本函數(shù)體注釋第4頁【例8-2】生成矢量,并調(diào)用average函數(shù)。在編輯器中比較下列代碼:functiony=average(x)%AVERAGEMeanofvectorelements.%AVERAGE(X),whereXisavector,isthemeanofvectorelements.%Non-vectorinputresultsinanerror.[m,n]=size(x);if(~((m==1)|(n==1))|(m==1&n==1))error('Inputmustbeavector')end第5頁y=sum(x)/length(x);%Actualcomputation將上面代碼保存在文獻名為average.m文獻中。在命令窗口生成矢量,并調(diào)用average函數(shù)。>>z=1:99;>>average(z)第6頁8.1.3局部變量和全局變量用關(guān)鍵字global定義全局變量。8.2數(shù)據(jù)及數(shù)據(jù)文獻8.2.1數(shù)據(jù)類型8.2.2數(shù)據(jù)文獻MATLAB允許介紹數(shù)據(jù)文獻能夠分為下列幾類:以.mat為擴展名二進制數(shù)據(jù)文獻。由save和load命令直接存取。以.txt、.dat等為擴展名ASCⅡ碼數(shù)據(jù)文獻。用load或save命令讀入或存放。第7頁以.bmp、jpg、tif等為擴展名圖形文獻。使用imread和imwrite命令讀入和存放。以.wav為擴展名聲音文獻。使用waveread和wavwrite命令讀入和存放。8.2.3數(shù)據(jù)輸入向?qū)?.2.4數(shù)據(jù)輸入和輸出第8頁8.3程序流程控制

8.3.1循環(huán)語句MATLAB提供了兩種循環(huán)方式:for-end循環(huán)和while-end循環(huán)。1、for循環(huán)for循環(huán)一般形式為:

forv=體現(xiàn)式語句體

endfor和end必須配對使用。第9頁【例8-3】簡單for循環(huán)示例。n=10;fori=1:nx(i)=(i+1).^2;endxx=49162536496481100121for循環(huán)能夠嵌套,但需要注意是,在相同中每一種for都必須與end相匹配。第10頁【例8-4】for循環(huán)嵌套。m=3;n=4;fori=1:mforj=1:na(i,j)=1/(i+j-1);endendformatrataa=11/21/31/41/21/31/41/51/31/41/51/6

第11頁【例8-5】利用非1步長for循環(huán),產(chǎn)生0~20以內(nèi)偶數(shù)。fori=0:2:20a(i/2+1)=i;endaa=061218281420410161/6

第12頁2、while循環(huán)while循環(huán)一般體現(xiàn)式是:

while體現(xiàn)式語句體

endwhile與end必須配對第13頁【例8-6】利用while循環(huán),求解使n!達成100位數(shù)第一種n是多少?。n=1;whileprod(1:n)<1e100n=n+1;endnn=70

第14頁

8.3.2條件語句1、if-end語句

if-end語句是最簡單條件語句,其一般形式為:

if體現(xiàn)式語句體

end第15頁2、if-else-end語句if-else-end語句在if和end之間增加一種else選擇,其一般形式為:if體現(xiàn)式語句體1;else

語句體2;end第16頁【例8-7】應(yīng)用if-else-end條件語句,判斷學(xué)生是否通過學(xué)業(yè)。if((attendance>=0.90)&(grade>=60))%判斷出席率和成績

pass=1;%滿足條件為通過elsefail=1;%不然為不通過end;第17頁3、if-elseif-end語句在else子句中嵌套if語句,組成elseif構(gòu)造,其一般形式為:if體現(xiàn)式1

語句體1;elseif體現(xiàn)式2

語句體2;

else

語句體3;end第18頁【例8-8】用色彩辨別數(shù)據(jù)點范圍。n=100;x=1:n;y=randn(1,n);%建立100個元素隨機行矢量holdonfori=1:nify(i)<-1plot(x(i),y(i),'*g')%不大于-1點用綠色*標(biāo)出

elseify(i)>=-1&y(i)<=1

第19頁plot(x(i),y(i),'ob')%在-1與1之間點用蘭色o標(biāo)出

elseify(i)>=1plot(x(i),y(i),'xr')%大于1點用紅色x標(biāo)出

endendholdoff第20頁8.3.3分支語句分支語句為switch-case-end,其一般形式為:.switch多半是(數(shù)值或字符串)case數(shù)值或字符串1

語句體1:case數(shù)值或字符串2

語句體2:…otherwise語句體n;end第21頁【例8-9】使用switch-case-end語句,檢查輸入數(shù)據(jù)值。switchinput_numcase-1disp('negativeone');%當(dāng)input_num=-1時顯示

case0disp('zero');%當(dāng)input_num=0時顯示

case1disp('positiveone');%當(dāng)input_num=1時顯示

otherwisedisp('othervalue');%當(dāng)input_num等于其他值時顯示end第22頁8.3.4檢測語句檢測語句try-catch主要用于檢測錯誤并變化流程,其一般形式為:try

語句體1catch

語句體2end使用lasterr函數(shù)查詢最后錯誤信息,但查詢成果為空字符串時表達語句體1成功執(zhí)行。第23頁【例8-10】使用try-catch語句,判斷錯誤語句。n=4;a=magic(3) %設(shè)置3×3矩陣atrya_n=a(n,:), %取a第n行元素catcha_end=a(end,:), %假如取a第n行犯錯,則改取a最后一行endlasterr %顯示犯錯原因第24頁a=816357492a_end=492ans=Indexexceedsmatrixdimensions.第25頁8.3.5其他流程控制語句1、continue語句

continue語句用于在for循環(huán)和while循環(huán)中跳過某些執(zhí)行語句。在for循環(huán)和while循環(huán)中,假如出現(xiàn)continue語句,則跳過循環(huán)體中所有剩下語句,繼續(xù)下一次循環(huán),在嵌套循環(huán)中,continue控制執(zhí)行本嵌套中下一次循環(huán)。第26頁【例8-11】使用continue語句,顯示文獻行數(shù)。fid=fopen('magic.m','r');%打開magic.m文獻count=0;%計數(shù)器置零while~feof(fid)%while循環(huán)判斷條件:是否文獻末尾

line=fgetl(fid);%從文獻中讀行

ifisempty(line)|strncmp(line,'%',1)%判斷是否為空行或注釋行

continue%假如是空行或注釋行繼續(xù)下一次循環(huán)

endcount=count+1;第27頁%假如不是空行或注釋行計數(shù)器加1enddisp(sprintf('%dlines',count));%顯示剔除后行數(shù)25lines第28頁2、break語句

break語句用于終止for循環(huán)和while循環(huán)執(zhí)行?!纠?-12】break語句使用方法。fid=fopen('dft.m','r');%打開fft.m文獻s='';%創(chuàng)建空字符數(shù)組while~feof(fid)%while循環(huán)判斷條件:是否文獻末尾

line=fgetl(fid);%從文獻中讀行

ifisempty(line)%假如是空行

break%退出循環(huán)

end

第29頁s=strvcat(s,line);%假如不是空行,將該行寫入字符數(shù)組enddisp(s)%顯示字符數(shù)組成果3、return語句return語句用于終止目前命令序列,并返回到調(diào)用函數(shù)或鍵盤,也用于終止keyboard方式。第30頁8.4程序調(diào)試與優(yōu)化借助于程序調(diào)試器(Debugger)。8.4.1程序直接調(diào)試法8.4.2調(diào)試器使用8.4.3程序設(shè)計優(yōu)化1、以矩陣運算替代循環(huán)運算2、數(shù)據(jù)預(yù)定義3、內(nèi)存管理第31頁表8-4MATLAB語言內(nèi)存管理函數(shù)函數(shù)名說明clear從內(nèi)存中清除所有變量及函數(shù)pack重新分派內(nèi)存quit退出MATLAB環(huán)境,釋放所有內(nèi)存save把指定變量存放至磁盤load從磁盤中調(diào)出指定變量第32頁8.4.4M文獻調(diào)用統(tǒng)計1、profile函數(shù)實現(xiàn)M文獻調(diào)用統(tǒng)計函數(shù)為profile,其調(diào)用格式為:profileon開始統(tǒng)計M文獻調(diào)用,并清除一起統(tǒng)計。profileon–detaillevel按函數(shù)指定level開始統(tǒng)計M文獻調(diào)用,餅清除一起統(tǒng)計。profileon–history統(tǒng)計確定序列函數(shù)調(diào)用。profileoff中斷M文獻調(diào)用統(tǒng)計。第33頁profileresume重新開始M文獻調(diào)用統(tǒng)計,并保存本來統(tǒng)計。profileclear清除M文獻調(diào)用統(tǒng)計。profilereport中斷M文獻調(diào)用統(tǒng)計,并將統(tǒng)計以html格式輸出。profilereportbasename中斷M文獻調(diào)用統(tǒng)計,并將統(tǒng)計保存至目前目錄下basename文獻中。profileplot中斷M文獻調(diào)用統(tǒng)計,并將成果以條狀圖繪圖。s=profile(‘status’)形式目前調(diào)用狀態(tài)。stats=profile(‘info’)中斷并返回統(tǒng)計成果。第34頁2、調(diào)用統(tǒng)計成果顯示下面以求解微分方程為例,介紹調(diào)用統(tǒng)計使用辦法:【例8-16】調(diào)用統(tǒng)計應(yīng)用實例。profileon-detailbuiltin-history[t,y]=ode23(@vdp1,[020],[20]);profilereportode_reportprofileplot第35頁8.5函數(shù)句柄函數(shù)句柄是MATLAB6所特有一種語言,用于在使用函數(shù)過程中保存函數(shù)有關(guān)信息,尤其是有關(guān)函數(shù)執(zhí)行信息。它主要有下列長處:實現(xiàn)函數(shù)間互相調(diào)用;取得函數(shù)加載所有方式;拓寬子函數(shù)以及局部函數(shù)使用范圍;提供函數(shù)調(diào)用過程中可靠性;減少程序設(shè)

溫馨提示

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

評論

0/150

提交評論