第5章MATLAB程序設(shè)計_第1頁
第5章MATLAB程序設(shè)計_第2頁
第5章MATLAB程序設(shè)計_第3頁
第5章MATLAB程序設(shè)計_第4頁
第5章MATLAB程序設(shè)計_第5頁
已閱讀5頁,還剩49頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第五章程序設(shè)計5.1M文件5.2數(shù)據(jù)的輸入輸出5.3選擇結(jié)構(gòu)5.4循環(huán)結(jié)構(gòu)5.5函數(shù)文件5.6全局變量和局部變量補充程序設(shè)計注意事項:1)良好的代碼習(xí)慣;(1)變量名的定義簡單易懂;(2)程序結(jié)構(gòu)流程清晰;(3)詳細的注釋;2)與其它高級語言區(qū)別:(1)交互式語言,解釋性語言;(2)矩陣運算的思想;(3)…號表示續(xù)行;3)編程積累(1)在實踐中積累(2)注重交流5.1M文件1)概念:用戶把要實現(xiàn)的命令寫在一個以m文件作為擴展名的文件中,然后由系統(tǒng)進行解釋,運行出結(jié)果。2)格式:函數(shù)式M文件和腳本式M文件。(1)函數(shù)式M文件:第1句以Function語句作為引導(dǎo);(2)腳本式M文件:命令的簡單疊加,與批處理文件類似。5.1.1基本概念(3)相同之處:以m文件作為擴展名的文本文件,都不進入命令窗口,而是由文本編輯器來創(chuàng)建外部文本文件;(4)不同之處:函數(shù)式M文件和腳本式M文件與MATLAB在通信方面不同;腳本式M文件運行產(chǎn)生的所有變量都是全局變量;而函數(shù)式M文件的所有變量除特別聲明外,均是局部變量;在MATLAB中的M文件絕大多數(shù)是函數(shù)式M文件。5.1.2M文件的建立與編輯1.建立新M文件:(1)菜單操作:MATLAB命令窗口的File菜單→New菜單項→M-file命令。(2)命令操作:輸入命令edit。(3)命令按鈕操作:單擊命令窗口工具欄上的“新建”2.編輯已有M文件:?。∽⒁猓嚎稍谄渌谋经h(huán)境下編輯。

例5.1建立一個腳本文件將變量a,b的值互換,然后運行該腳本文件。1)首先建立腳本文件并以文件名exch.m存盤:clear;a=1:10;b=[11,12,15,14;15,16,17,18];c=a;a=b;b=c;ab2)然后,在MATLAB的命令窗口中輸入exch,將會執(zhí)行該腳本文件。

例5.2建立一個函數(shù)文件將變量a,b的值互換,然后在命令窗口調(diào)用該函數(shù)文件。1)首先建立函數(shù)文件fexch.m:

function[a,b]=exch(a,b)c=a;a=b;b=c;2)然后在命令窗口調(diào)用該函數(shù)文件:clear;x=1:10;y=[11,12,15,14;15,16,17,18];[x,y]=fexch(x,y)5.1.3M文件性能剖析MATLAB提供的程序評述器可以記錄程序中每一步的運行時間;評述(profile)文件是提高文件運行的一種方法。5.2數(shù)據(jù)的輸入輸出5.2.1input函數(shù)1)調(diào)用格式為:A=input(提示信息,選項);2)說明:(1)提示信息為一個字符串,用于提示用戶輸入什么樣的數(shù)據(jù)。(2)如果在input函數(shù)調(diào)用時采用's'選項,則允許用戶輸入一個字符串。例如:想輸入一個人的姓名,采用命令:

xm=input('What''syourname?','s')5.2.2disp函數(shù)1)調(diào)用格式:disp(輸出項)2)說明:輸出項既可以為字符串,也可以為矩陣。注意:用disp函數(shù)顯示矩陣時將不顯示矩陣的名字,而且其格式更緊密,且不留任何沒有意義的空行。

例5.3求一元二次方程ax2+bx+c=0的根。a=input('a=?');b=input('b=?');c=input('c=?');d=b*b-4*a*c;x=[(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a)];disp(['x1=',num2str(x(1)),',x2=',num2str(x(2))]);

5.2.3pause函數(shù)1)調(diào)用格式:pause(延遲秒數(shù))2)說明:(1)如果省略延遲時間,直接使用pause,則將暫停程序,直到用戶按任一鍵后程序繼續(xù)執(zhí)行;(2)若要強行中止程序的運行可使用Ctrl+C命令。5.3選擇結(jié)構(gòu)5.3.1if語句(3種格式)1.單分支if語句1)語句格式:

if條件語句組

end2)說明:當條件成立時,則執(zhí)行語句組,執(zhí)行完之后繼續(xù)執(zhí)行if語句的后繼語句,若條件不成立,則直接執(zhí)行if語句的后繼語句。

2.雙分支if語句1)語句格式:

if條件語句組1else

語句組2end2)說明:當條件成立時,執(zhí)行語句組1,否則執(zhí)行語句組2,語句組1或語句組2執(zhí)行后,再執(zhí)行if語句的后繼語句。

例5.4計算分段函數(shù)值x=input('請輸入x的值:');ifx==10y=cos(x+1)+sqrt(x*x+1);elsey=x*sqrt(x+sqrt(x));end

3.多分支if語句1)語句格式:

if條件1

語句組1elseif條件2

語句組2……elseif條件m

語句組melse

語句組m+1end例5.5輸入一個字符:若為大寫字母,則輸出其后繼字符;若為小寫字母,則輸出其前導(dǎo)字符;若為數(shù)字字符則輸出其對應(yīng)的數(shù)值;若為其他字符則原樣輸出。c=input('請輸入一個字符','s');ifc>='A'&c<='Z'disp(setstr(abs(c)+1));elseifc>='a'&c<='z'disp(setstr(abs(c)-1));elseifc>='0'&c<='9'disp(abs(c)-abs('0'));elsedisp(c);end

5.3.2switch語句語句格式:

switch表達式

case表達式1

語句組1case表達式2

語句組2……case表達式m

語句組motherwise

語句組m+1end

例5.6某商場對顧客所購買的商品實行打折銷售,已知打折標準,求所售商品的實際銷售價格。price=input('請輸入商品價格');switchfix(price/100)case{0,1}rate=0;case{2,5,4}rate=5/100;casenum2cell(5:9)rate=5/100;casenum2cell(10:24)rate=8/100;casenum2cell(25:49)rate=10/100;otherwiserate=14/100;endprice=price*(1-rate)

5.3.3try語句1)語句格式:

try

語句組1catch

語句組2end2)說明:try語句先試探性執(zhí)行語句組1,如果語句組1在執(zhí)行過程中出現(xiàn)錯誤,則將錯誤信息賦給保留的lasterr變量,并轉(zhuǎn)去執(zhí)行語句組2。這種試探性執(zhí)行語句是其他高級語言所沒有的。

例5.7矩陣乘法運算要求兩矩陣的維數(shù)相容,否則會出錯。先求兩矩陣的乘積,若出錯,則自動轉(zhuǎn)去求兩矩陣的點乘。A=[1,2,5;4,5,6];B=[7,8,9;10,11,12];tryC=A*B;catchC=A.*B;endClasterr%顯示出錯原因5.4循環(huán)結(jié)構(gòu)5.4.1for語句1)語句格式:

for循環(huán)變量=表達式1:表達式2:表達式5

循環(huán)體語句

end2)說明:(1)首先計算三個表達式的值;(2)再將表達式1的值賦給循環(huán)變量,如果此時循環(huán)變量的值介于表達式1和表達式5的值之間,則執(zhí)行循環(huán)體語句,否則結(jié)束循環(huán)的執(zhí)行。執(zhí)行完一次循環(huán)之后,循環(huán)變量自增一個表達式2的值;(3)然后再判斷循環(huán)變量的值是否介于表達式1和表達式5之間,如果滿足仍然執(zhí)行循環(huán)體,直至不滿足為止。這時將結(jié)束for語句的執(zhí)行,而繼續(xù)執(zhí)行for語句后面的語句。例5.8已知求y的表達式,當n=100時,求y的值。程序如下:y=0;n=100;fori=1:ny=y+1/i/i;endy在實際MATLAB編程中,為提高程序的執(zhí)行速度,常用向量運算來代替循環(huán)操作:

n=100;i=1:n;f=1./i.^2;y=sum(f)

例5.9求定積分程序如下:a=0;b=3*pi;n=1000;h=(b-a)/n;x=a:h:b;f=exp(-0.5*x).*sin(x+pi/6);fori=1:ns(i)=(f(i)+f(i+1))*h/2ends=sum(s)事實上,MATLAB提供了有關(guān)數(shù)值積分的標準函數(shù),實際應(yīng)用中可直接調(diào)用這些函數(shù)求數(shù)值積分。

注意:for語句更一般的格式:

for循環(huán)變量=矩陣表達式循環(huán)體語句

end

說明:執(zhí)行過程是依次將矩陣的各列元素賦給循環(huán)變量,然后執(zhí)行循環(huán)體語句,直至各列元素處理完畢。實際上,“表達式1:表達式2:表達式5”是一個僅為一行的矩陣(行向量),因而列向量是單個數(shù)據(jù)。

例5.10已知5個學(xué)生4門功課的成績,求每名學(xué)生的總成績。s=0;a=[65,76,56,78;98,85,74,85;76,67,78,79;98,58,42,75;67,89,76,87];fork=as=s+k;Enddisp(s');

5.4.2while語句1)格式:

while(條件)

循環(huán)體語句

end2)說明:(1)執(zhí)行過程:若條件成立,則執(zhí)行循環(huán)體語句,執(zhí)行后再判斷條件是否成立,如果不成立則跳出循環(huán);(2)與循環(huán)結(jié)構(gòu)相關(guān)的還有一個break語句,當在循環(huán)體內(nèi)執(zhí)行到該語句時,程序?qū)⑻鲅h(huán)。該語句一般與if語句配合使用。

例5.11已知求y的表達式,當n=100時,求y的值。y=0;i=1;while1f=1/i/i;y=y+f;ifi==100break;endi=i+1;endy

5.4.3循環(huán)嵌套1)如果一個循環(huán)結(jié)構(gòu)的循環(huán)體又包括一個循環(huán)結(jié)構(gòu),就稱為循環(huán)的嵌套,或稱為多重循環(huán)結(jié)構(gòu)。2)要特別注意內(nèi)、外循環(huán)之間的關(guān)系,以及各語句放置的位置,不要搞錯。3)可跳出循環(huán)的指令有break和continue

在執(zhí)行keyboard指令后需要返回正在執(zhí)行程序的指令是return。

例5.12用篩選法求某自然數(shù)范圍內(nèi)的全部素數(shù)。程序如下:m=input('m=');p=2:m;fori=2:sqrt(m)n=find(rem(p,i)==0&p~=i);p(n)=[];endp5.5函數(shù)文件5.5.1函數(shù)文件的基本結(jié)構(gòu)1)函數(shù)文件由function語句引導(dǎo);2)基本結(jié)構(gòu):function輸出形參表=函數(shù)名(輸入形參表)

注釋說明部分函數(shù)體語句(1)函數(shù)文件名:函數(shù)文件名與函數(shù)名可以不相同;當兩者不同時,MATLAB將忽略函數(shù)名而確認函數(shù)文件名,故調(diào)用時使用函數(shù)文件名。(2)注釋說明部分:①緊隨函數(shù)文件引導(dǎo)行之后以%開頭的第一注釋行;②第一注釋行及之后連續(xù)的注釋行;③與在線幫助文本相隔一空行的注釋行。3)說明:

例5.13編寫函數(shù)文件求半徑為r的圓的面積和周長。function[s,p]=fcircle(r)%CIRCLEcalculatetheareaandperimeterofacircleofradilr%r圓半徑

%s圓面積

%p圓周長

s=pi*r*r;p=2*pi*r;

將以上函數(shù)文件以文件名fcircle.m存入c:\matlab\work下,然后在MATLAB命令窗口調(diào)用該函數(shù):

[s,p]=fcircle(10)5.6全局變量和局部變量1)定義:命令global;2)說明:函數(shù)文件的內(nèi)部變量是局部的,與其他函數(shù)文件及MATLAB工作空間相互隔離。例5.17全局變量應(yīng)用示例1)先建立函數(shù)文件wadd.m,該函數(shù)將輸入的參數(shù)加權(quán)相加。

functionf=wadd(x,y)globalALPHABETAf=ALPHA*x+BETA*y;2)在命令窗口中輸入:

globalALPHABETAALPHA=1;BETA=2;s=wadd(1,2)補充:1、Matlab預(yù)定義變量Inf和nargin的含義分別是無窮大、函數(shù)輸入總量數(shù)。2、eps是機器閾值:比2小的最大數(shù)是2-eps;比2大的最小數(shù)是2+eps;

alpha(v):對面、塊、象三種圖形對象的透明度加以控制;控制濃淡的函數(shù)shading函數(shù);Matlab預(yù)定義變量realmin和eps的含義分別是最小正實數(shù)、機器零閾值;NaN是非數(shù),inf+NaN?0/0+1?inf-inf?inf/inf?編程綜合練習(xí)指令閱讀有指令如下:clearsymswXtuvxyk=sym('4')A=sin(x)+k+u*w*v則findsym(A,1),findsym(A,2),findsym(A)三條指令的執(zhí)行結(jié)果分別是什么?編程綜合練習(xí)findsym(A,1)xfindsym(A,2)x,wfindsym(A)u,v,w,x編程綜合練習(xí)程序閱讀clearx=1:4y=linspace(1,2,2)[X,Y]=meshgrid(x,y)則如下三個指令的運算結(jié)果分別是什么?X+YX*(Y)'X.*Y編程綜合練習(xí)X+Yans=23453456X*(Y)'ans=10201020X.*Yans=12342468編程綜合練習(xí)指令閱讀如下指令執(zhí)行后q1、q2、q3、q4、q5、q6的值分別是什么?cleara=1;b=2;c=3;d=4;Mn=[a,b;c,d]Mc='[a,b;c,d]'Ms=sym(Mc)q1=size(Mn)q2=size(Mc)q3=size(Ms)q4=class(Mn)q5=class(Mc)q6=class(Ms)編程綜合練習(xí)指令閱讀q1=22q2=19q3=22q4=doubleq5=charq6=symclearA=zeros(2,4)A(:)=2:2:16q1=A(2,4)q2=A(5)q3=A(end-3)運算結(jié)束后,q1、q2、q3的結(jié)果分別是什么?q1=22q2=19q3=22clearA=zeros(2,6);A(:)=1:12;q1=A(2,4);q2=A(8);q3=A(:,[1,3]);運算結(jié)束后,A、q1、q2、q3、q4、q5、q6的結(jié)果分別是什么clearA=1:9B=10-Ar0=(A<6)r1=(A==B)則執(zhí)行后A、B、r0、r1的運算結(jié)果分別是什么???上機clearx=(2:5)-3y=find(x>2)請寫出x、y的計算結(jié)果clear>>symsabtuvxy>>A=[a+b*x,sin(t)+u;x*exp(-t),log(y)+v]則findsym(A,1),findsym(A,2),findsym(A)三條指令的執(zhí)行結(jié)果分別是什么編程綜合練習(xí)如下指令執(zhí)行后,數(shù)組A、變量q1、q2的值分別是什么?clearA=reshape(1:19,1,7)A(:,[1,2])=[]q1=all(A(A>10))q2=any(A(A<12))使用Matlab函數(shù)plot繪制一個圓(圓心處x、y都是0,半徑為2),要求:a、圖形有標題(標題為圓的直徑);b、圓為紅色細實線;c、縱橫坐標軸等長刻度;d、對坐標軸進行標注,橫軸標注“X”,縱軸標注“Y”;e、在圓心或其附近繪制一個十字符,并用向上箭頭指向圓心并標明“圓心”二字。參考程序:clear;clf;x=(-2:0.05:2);y1=(4-x.^2).^(0.5);y2=-(4-x.^2).^(0.5);plot(x,y1,'-r');

holdon;plot(x,y2,'-r');axisequal;title('4');

xlabel('X');ylabel('Y');plot(0,0,'+');

c_s{1}='\uparrow';c_s{2}='圓心';text(0,-0.25,c_s);holdoff給定某函數(shù),在[0,10]內(nèi)繪制此函數(shù)的曲線。采樣間隔可取0.05。要求:1)使用藍色虛點線;2)加圖形標題“測試”;3)添加X、Y軸說明,分別為“t”和“y”;4)在t=5處繪制一個紅色米字符,并繪制一向上箭頭指向該米字符,并標注“中點”。編制滿足如下要求的程序:程序啟動后進入循環(huán),提示用戶輸入一個整數(shù)(假設(shè)用戶輸入正確整數(shù)而非其它字符),若數(shù)字超過26或小于0,輸出“不是字母”;若數(shù)字在26以內(nèi),則按照字母表順序輸出該數(shù)字對應(yīng)的小寫字母,并等待2秒后進入下一個循環(huán),若用戶輸入數(shù)字“0”,則退出程序;當程序連續(xù)輸出5個以上字母后,也可以退出程序;不論何時程序退出,推出前都要提示用戶按任意鍵退出,用戶按鍵后方可結(jié)束程序。clear;clc;zmb='abcdefghijklmnopqrstuvwxyz';zmnum=0;while(1)sz=input('請輸入一個數(shù)字:');if(sz==0)sc='按任意鍵退出!'pause;return;endif

溫馨提示

  • 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)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論