第4章M文件和流程控制結(jié)構(gòu)_第1頁
第4章M文件和流程控制結(jié)構(gòu)_第2頁
第4章M文件和流程控制結(jié)構(gòu)_第3頁
第4章M文件和流程控制結(jié)構(gòu)_第4頁
第4章M文件和流程控制結(jié)構(gòu)_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第4章M文件和流程控制結(jié)構(gòu)用戶在進(jìn)行MATLAB操作時(shí),經(jīng)常需要輸入較多的命令語句,而且有些還需要重復(fù)地輸入,如果仍然按照上述在MATLAB命令窗口(CommandWindow)進(jìn)行直接交互式命令操作方式,就顯得比較煩瑣和費(fèi)時(shí)。為了改進(jìn)這種情況,MATLAB提供文件編程操作方式。MATLAB中所有的文件和函數(shù)都分別對(duì)應(yīng)一個(gè)M文件(以.m為后綴的文本文件),它可以在任何文本編輯器中進(jìn)行顯示和編輯,最方便的是在MATLAB程序編輯器窗口中進(jìn)行(圖1-2)。M文件的代碼是純ASCII碼字符,可以在MATLAB命令窗口(CommandWindow)鍵入命令:typefunction_name來查看。4.1M文件的分類4.1.1命令文件(ScriptFile)命令文件也稱為腳本文件,通常只是一系列命令語句的組合,沒有輸入?yún)?shù),也不返回參數(shù),運(yùn)行時(shí)只需要在命令窗口鍵入文件名即可。例4-1試編制一命令文件,計(jì)算圓的面積與周長(zhǎng)%計(jì)算圓的面積與周長(zhǎng)的命令文件(rsc.m)r=input('請(qǐng)輸入圓的半徑(mm)r=');%使用鍵盤輸入圓的半徑rs=pi*r^2;%計(jì)算圓的面積c=2*pi*r;%計(jì)算圓的周長(zhǎng)fprintf('圓的半徑r=%3.4fmm\n',r)fprintf('圓的面積s=%3.4fmm^2\n',s)fprintf('圓的周長(zhǎng)c=%3.4fmm\n',c)>>rsc請(qǐng)輸入圓的半徑(mm)r=35圓的半徑r=35.0000mm圓的面積s=3848.4510mm^2圓的周長(zhǎng)c=219.9115mm>>rsc請(qǐng)輸入圓的半徑(mm)r=58圓的半徑r=58.0000mm圓的面積s=10568.3177mm^2圓的周長(zhǎng)c=364.4247mm命令文件在運(yùn)行過程中可以調(diào)用MATLAB系統(tǒng)工作域內(nèi)的所有數(shù)據(jù),所產(chǎn)生的變量也是全局變量,并且一直保存在工作域內(nèi),直至quit時(shí)為止。4.1.2函數(shù)文件MATLAB函數(shù)或函數(shù)文件是系統(tǒng)中已經(jīng)設(shè)計(jì)好的為完成某一種特定的運(yùn)算或是實(shí)現(xiàn)某一種特定的功能的子程序,MATLAB系統(tǒng)幾十種工具箱中提供了豐富的函數(shù)庫,它們是MATLAB系統(tǒng)的重要組成部分。在使用這些函數(shù)或函數(shù)文件時(shí)是作為命令來對(duì)待的,所以函數(shù)又稱為函數(shù)命令。函數(shù)文件常用于需要反復(fù)調(diào)用和不斷改變參數(shù)的場(chǎng)合,它可以接受參數(shù),也可以返回參數(shù),它的運(yùn)行必須通過語句調(diào)用。1、函數(shù)文件的第一個(gè)可執(zhí)行必須是函數(shù)文件定義語句:function[輸出參數(shù)]=函數(shù)名(輸入?yún)?shù))2、函數(shù)文件可以帶有多個(gè)輸出參數(shù)和輸入?yún)?shù),也可以沒有輸出參數(shù)。當(dāng)輸入?yún)?shù)或是輸出參數(shù)多于一個(gè)時(shí),參數(shù)之間一般用逗號(hào)隔開。3、函數(shù)文件的命名規(guī)則與變量名的規(guī)則相同。兩個(gè)函數(shù)的函數(shù)名即使相同,但是輸入?yún)?shù)或輸出參數(shù)的數(shù)目不同,它們的含義也不同。4、函數(shù)文件運(yùn)行時(shí),自動(dòng)創(chuàng)建其獨(dú)自的函數(shù)工作空間(functionworkspace),過程變量都存儲(chǔ)這個(gè)工作空間中。函數(shù)文件執(zhí)行之后只保留最后結(jié)果,不保留之間任何過程,所定義的變量也只要在函數(shù)內(nèi)部起作用,并且隨著該函數(shù)文件調(diào)用的結(jié)束而自動(dòng)被清除。5、應(yīng)當(dāng)指出,以function開頭的函數(shù)文件是一個(gè)獨(dú)立M文件,必須單獨(dú)儲(chǔ)存在內(nèi)存中MATLAB系統(tǒng)所在的工作目錄:D:\MATLAB7\work中。將函數(shù)文件存盤時(shí),缺省狀態(tài)下系統(tǒng)自動(dòng)儲(chǔ)存為“函數(shù)名.m”的函數(shù)文件(即函數(shù)文件名與函數(shù)名相同)。如果函數(shù)文件名與函數(shù)名不同,MATLAB在調(diào)用時(shí)將以函數(shù)文件名為準(zhǔn)(忽略函數(shù)名)。例4-2試使用調(diào)用函數(shù)文件方法,計(jì)算漸開線齒輪的齒廓函數(shù)值。%1-建立計(jì)算漸開線函數(shù)的函數(shù)文件(jkxhs.m)function[theta,rk]=jkxhs(alpha,rb)hd=pi/180;theta=tan(hd.*alpha)-hd.*alpha;%漸開線展角rk=rb./cos(hd.*alpha);%漸開線向徑將該文件以文件名jkxhs.m保存在MATLAB工作區(qū)路徑中。%2-建立調(diào)用命令文件m=input('輸入齒輪模數(shù)(mm)m=');z=input('輸入齒輪齒數(shù)z=');ha=input('輸入齒高系數(shù)ha=');hd=pi/180;alpha_f=20;%分度圓壓力角%計(jì)算齒輪的幾何尺寸r=m*z/2;%分度圓半徑rb=r*cos(alpha_f*hd);%基圓半徑ra=r+ha*m;%齒頂圓半徑alpha_a=acos(rb/ra);%齒頂圓壓力角%調(diào)用計(jì)算漸開線函數(shù)的函數(shù)文件alpha=0:alpha_a/hd/5:alpha_a/hd;[theta,rk]=jkxhs(alpha,rb);thetak=theta/hd;%輸出計(jì)算結(jié)果fprintf(‘齒輪模數(shù)m=%6.4fmm\n',m)fprintf(‘齒輪齒數(shù)z=%3.0f\n',z)fprintf(‘齒高系數(shù)ha=%3.4f\n',ha)fprintf(‘基圓半徑rb=%6.4fmm\n',rb)fprintf(‘分度圓半徑r=%6.4fmm\n',r)fprintf(‘齒頂圓半徑ra=%6.4fmm\n',ra)fprintf('齒頂圓壓力角alpha_a=%6.4f°\n',alpha_a/hd)disp'漸開線展角thetak(°)',thetakdisp'漸開線向徑rk(mm)',rk輸出的計(jì)算結(jié)果如下:齒輪模數(shù)m=5.0000mm齒輪齒數(shù)z=28齒高系數(shù)ha=1.0000基圓半徑rb=65.7785mm分度圓半徑r=70.0000mm齒頂圓半徑ra=75.0000mm齒頂圓壓力角alpha_a=28.7119°漸開線展角thetak(°)thetak=00.01930.15630.53861.31512.6721漸開線向徑rk(mm)rk=65.778566.110267.122468.868071.443075.0000有時(shí)為了在命令文件中直接描述數(shù)學(xué)函數(shù),可采用函數(shù)inline(),它的功能是建立一個(gè)內(nèi)聯(lián)函數(shù),其調(diào)用格式是:fun=inline(’函數(shù)表達(dá)式’,自變量列表)其中自變量列表中每個(gè)自變量之間均需要用單引號(hào)括起來,相互之間用逗號(hào)分隔。例如,漸開線函數(shù)方程可以用函數(shù)inline()語句描述為theta=inline('tan(alpha*pi/180)-pi/180.*alpha','alpha');其中,alpha(表示壓力角)是函數(shù)式中自變量。它只能返回1個(gè)變量,不支持較復(fù)雜的語句結(jié)構(gòu)。4.2流程控制結(jié)構(gòu)4.2.1順序結(jié)構(gòu)順序結(jié)構(gòu)是根據(jù)語句排列的順序自上而下執(zhí)行。主要包括數(shù)據(jù)的輸入、處理、結(jié)果的輸出等內(nèi)容1、數(shù)據(jù)的輸入(input函數(shù))從鍵盤輸入數(shù)據(jù),可以使用input函數(shù)來進(jìn)行,該函數(shù)的調(diào)用格式為:z=input(’屏幕上顯示的提示信息’)當(dāng)執(zhí)行該函數(shù)時(shí),系統(tǒng)等待從鍵盤輸入數(shù)據(jù)后按回車鍵,輸入的數(shù)據(jù)就存入變量z中。如果輸入的是字符,則格式是z=input(’屏幕上顯示的提示信息’,’s’)其中’s’表示鍵盤輸入字符。2、數(shù)據(jù)的輸出(disp和fprintf函數(shù))1、函數(shù)disp是自由格式輸出數(shù)據(jù),用于直接輸出字符或是數(shù)值,例如>>a=[2,4,6];>>dispaa>>disp(a)246注意:以上兩例自由格式輸出中,“a”表示字符,“(a)”表示向量a的值。2、函數(shù)fprintf在屏幕上輸出格式化數(shù)據(jù),一般調(diào)用格式是:fprintf(’屏幕上顯示的提示信息%format\n’,v)其中,format用來指定數(shù)據(jù)輸出時(shí)采用的格式:d表示整數(shù);e表示實(shí)數(shù)(科學(xué)計(jì)算法形式);f表示浮點(diǎn)實(shí)數(shù)(小數(shù)形式);g表示由系統(tǒng)自動(dòng)選取上述兩種格式之一;s表示輸出字符串;\n是換行符號(hào),以避免下一個(gè)輸出數(shù)據(jù)或是提示符號(hào)也擠在同一行;V是輸出變量或是矩陣。例如:>>fprintf('Thepiis%4.8f\n',pi)Thepiis3.14159265可見,在2個(gè)單引號(hào)之間包括輸出的字串“Thepiis”、輸出數(shù)據(jù)的格式“%4.8f”(表示按照浮點(diǎn)數(shù)格式,8位小數(shù),輸出變量pi()的數(shù)據(jù)。>>fprintf('34的5次方=%2.6e\n',34^5)34的5次方=4.543542e+007可見,輸出“34^5”值為指數(shù)格式的數(shù)據(jù),6位小數(shù)。4.2.2循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)是指按照給定的條件重復(fù)執(zhí)行指定的語句。MATLAB提供了兩種循環(huán)結(jié)構(gòu):for循環(huán)結(jié)構(gòu)和while循環(huán)結(jié)構(gòu)。1、for循環(huán)結(jié)構(gòu)for循環(huán)結(jié)構(gòu)的格式是:fori=c0:cb:cn循環(huán)體end其中,c0是循環(huán)變量i的初值;cb是循環(huán)變量i的步長(zhǎng),當(dāng)cb取單位步長(zhǎng)時(shí)可以省略;cn是循環(huán)變量i的終值。例4-3用篩選法求自然數(shù)2至m范圍內(nèi)的全部素?cái)?shù)。素?cái)?shù)是大于1,且除了1和它本身以外,不能被其他任何整數(shù)所整除的整數(shù)。m=input('輸入素?cái)?shù)的最大范圍m=');x=2:m;fork=2:sqrt(m)n=find(rem(x,k)==0&x~=k);x(n)=[];%去掉非素?cái)?shù)endx運(yùn)算結(jié)果:輸入素?cái)?shù)的最大范圍m=30x=23571113171923292、while循環(huán)結(jié)構(gòu)while循環(huán)結(jié)構(gòu)的格式是:while(條件)循環(huán)體end其中的“條件”是一個(gè)關(guān)系表達(dá)式,當(dāng)關(guān)系表達(dá)式的值為真時(shí)自動(dòng)執(zhí)行循環(huán)體,直到關(guān)系表達(dá)式的值條件為假,轉(zhuǎn)向循環(huán)體結(jié)束標(biāo)志end后面語句。應(yīng)當(dāng)指出,while循環(huán)執(zhí)行過程中會(huì)改變while后面關(guān)系表達(dá)式的值,否則這個(gè)while循環(huán)是一個(gè)死循環(huán),因此while循環(huán)執(zhí)行次數(shù)是不定的。在for循環(huán)結(jié)構(gòu)和while循環(huán)結(jié)構(gòu)中,使用break命令可終止循環(huán)結(jié)構(gòu)的運(yùn)行。例4-5水仙花數(shù)是指一個(gè)3位數(shù)的各位數(shù)字的立方和等于該數(shù)本身,用while循環(huán)結(jié)構(gòu)檢索水仙花數(shù)m=100;while(m<=999);m3=fix(m/100);%保存百位數(shù)字m2=rem(fix(m/10),10);%保存十位數(shù)字m1=rem(m,10);%保存?zhèn)€位數(shù)字ifm==m3^3+m2^3+m1^3;disp(m)endm=m+1;end運(yùn)算結(jié)果(寫成一行):1533703714074.2.3選擇結(jié)構(gòu)選擇結(jié)構(gòu)是指按照給定的條件是否成立,分別執(zhí)行不同的語句。MATLAB提供了兩種選擇結(jié)構(gòu):if選擇結(jié)構(gòu)和switch選擇結(jié)構(gòu)。1、if選擇結(jié)構(gòu)if(條件1)語句組1%滿足條件1時(shí)執(zhí)行該語句組elseif(條件2)語句組2%滿足條件2時(shí)執(zhí)行該語句組…else語句組n+1%上面的條件均不滿足時(shí)end例4-6用選擇結(jié)構(gòu)建立樣條函數(shù)的判斷函數(shù)文件functionf=pdc(x)%該函數(shù)文件沒有輸出參數(shù)ifx<0f=0;elseifx<1f=x;elseifx<2f=2-x;elsef=0;end將該文件以文件名pdc.m保存在MATLAB工作區(qū)路徑中。然后在MATLAB命令窗口中運(yùn)行調(diào)用語句,顯示結(jié)果為:>>pdc(-3.5)ans=0>>pdc(0.8)ans=0.8000>>pdc(2.8)ans=02、switch選擇結(jié)構(gòu)switch開關(guān)表達(dá)式case常量表達(dá)式1語句組1case常量表達(dá)式2語句組2…otherwise語句組nend當(dāng)開關(guān)表達(dá)式的值與對(duì)應(yīng)常量表達(dá)式的值匹配時(shí),執(zhí)行相應(yīng)的語句組,然后執(zhí)行end語句后

溫馨提示

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