




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Matlab軟件應用與開發2023/11/231MATLAB程序設計第3章MATLAB程序設計3.1M文件3.2程序控制結構3.3函數文件3.4程序舉例3.5程序調試2023/11/232MATLAB程序設計3.1M文件3.1.1M文件概述用MATLAB語言編寫的程序,稱為M文件。M文件可以根據調用方式的不同分為兩類:
命令(腳本)文件(ScriptsFile)
函數文件(FunctionFile)。2023/11/233MATLAB程序設計在主程序里調用子程序functionmain()f=input('InputFahrenheittemperature:')t=f222c(f)functionc=f222c(f)%fathtotemp%fdghdgh%dfgdg%djglkdjlgkdjflgkjd%sdfgdgc=5*(f-32)/9;2023/11/234MATLAB程序設計例3-1分別建立命令文件和函數文件,將華氏溫度f轉換為攝氏溫度c。程序1:
首先建立命令文件并以文件名f2c.m存盤。clear;%清除工作空間中的變量f=input('InputFahrenheittemperature:');c=5*(f-32)/9
然后在MATLAB的命令窗口中輸入f2c,將會執行該命令文件,執行情況為:InputFahrenheittemperature:73c=22.77782023/11/235MATLAB程序設計程序2:
首先建立函數文件f2c.m。functionc=f2c(f)%fathtotemp%fdghdgh%dfgdgc=5*(f-32)/9;
然后在MATLAB的命令窗口調用該函數文件。clear;y=input('InputFahrenheittemperature:');x=f2c(y)
輸出情況為:InputFahrenheittemperature:70c=21.1111x=21.11112023/11/236MATLAB程序設計3.1.2M文件的建立與打開
M文件是一個文本文件,它可以用任何編輯程序來建立和編輯,而一般常用且最為方便的是使用MATLAB提供的文本編輯器。1.建立新的M文件建立新的M文件,啟動MATLAB文本編輯器有3種方法:
(1)菜單操作:
從MATLAB主窗口的File菜單中選擇New菜單項,再選擇M-file命令,屏幕上將出現MATLAB文本編輯器窗口。
(2)命令操作:
在MATLAB命令窗口輸入命令edit,啟動MATLAB文本編輯器后,輸入M文件的內容并存盤。
(3)命令按鈕操作:
單擊MATLAB主窗口工具欄上的NewM-File命令按鈕,啟動MATLAB文本編輯器后,輸入M文件的內容并存盤。2023/11/237MATLAB程序設計2.打開已有的M文件打開已有的M文件,也有3種方法:
(1)菜單操作:從MATLAB主窗口的File菜單中選擇Open命令,則屏幕出現Open對話框,在Open對話框中選中所需打開的M文件。在文檔窗口可以對打開的M文件進行編輯修改,編輯完成后,將M文件存盤。
(2)命令操作:在MATLAB命令窗口輸入命令:edit文件名,則打開指定的M文件。
(3)命令按鈕操作:單擊MATLAB主窗口工具欄上的OpenFile命令按鈕,再從彈出的對話框中選擇所需打開的M文件。2023/11/238MATLAB程序設計3.2程序控制結構3.2.1順序結構1.數據的輸入從鍵盤輸入數據,則可以使用input函數來進行,該函數的調用格式為:
A=input(提示信息,選項);其中提示信息為一個字符串,用于提示用戶輸入什么樣的數據。如果在input函數調用時采用's'選項,則允許用戶輸入一個字符串。例如,想輸入一個人的姓名,可采用命令:
xm=input('What''syourname?','s');2023/11/239MATLAB程序設計2.數據的輸出
MATLAB提供的命令窗口輸出函數主要有disp函數,其調用格式為
disp(輸出項)
其中輸出項既可以為字符串,也可以為矩陣。2023/11/2310MATLAB程序設計
例3-2輸入x,y的值,并將它們的值互換后輸出。程序如下:
x=input('Inputxplease.');y=input('Inputyplease.');z=x;x=y;y=z;disp(x);disp(y);2023/11/2311MATLAB程序設計例3-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))]);2023/11/2312MATLAB程序設計3.程序的暫停暫停程序的執行可以使用pause函數,其調用格式為:
pause(n)%延遲n秒
pause%省略延遲時間,直接使用,則將暫停程序,直到用戶按任一鍵后程序繼續執行。若要強行中止程序的運行可使用如下命令:
Ctrl+C2023/11/2313MATLAB程序設計3.2.2選擇結構1.if語句在MATLAB中,if語句有3種格式。
(1)單分支if語句:
if條件語句組
end
當條件成立時,則執行語句組,執行完之后繼續執行if語句的后繼語句,若條件不成立,則直接執行if語句的后繼語句。2023/11/2314MATLAB程序設計(2)雙分支if語句:
if條件語句組1else
語句組2end
當條件成立時,執行語句組1,否則執行語句組2,語句組1或語句組2執行后,再執行if語句的后繼語句。2023/11/2315MATLAB程序設計
例3-4計算分段函數的值。程序如下:x=input('請輸入x的值:');ifx<=0y=(x+sqrt(pi))/exp(2);elsey=log(x+sqrt(1+x*x))/2;endy2023/11/2316MATLAB程序設計(3)多分支if語句:
if條件1
語句組1elseif條件2
語句組2……elseif條件m
語句組melse
語句組nend語句用于實現多分支選擇結構。2023/11/2317MATLAB程序設計
例3-5輸入一個字符,若為大寫字母,則輸出其對應的小寫字母;若為小寫字母,則輸出其對應的大寫字母;若為數字字符則輸出其對應的數值,若為其他字符則原樣輸出。
c=input('請輸入一個字符','s');ifc>='A'&c<='Z'disp(setstr(abs(c)+abs('a')-abs('A')));
%setstr與char一樣,把數字轉換為字符
elseifc>='a'&c<='z'disp(setstr(abs(c)-abs('a')+abs('A')));elseifc>='0'&c<='9'disp(abs(c)-abs('0'));elsedisp(c);end2023/11/2318MATLAB程序設計2.switch語句
switch語句根據表達式的取值不同,分別執行不同的語句,其語句格式為:
switch表達式
case表達式1
語句組1case表達式2
語句組2……case表達式m
語句組motherwise
語句組nend
當表達式的值等于表達式1的值時,執行語句組1,當表達式的值等于表達式2的值時,執行語句組2,…,當表達式的值等于表達式m的值時,執行語句組m,當表達式的值不等于case所列的表達式的值時,執行語句組n。當任意一個分支的語句執行完后,直接執行switch語句的下一句。2023/11/2319MATLAB程序設計例3-6某商場對顧客所購買的商品實行打折銷售,標準如下(商品價格用price來表示):
price<200沒有折扣
200≤price<5003%折扣
500≤price<10005%折扣
1000≤price<25008%折扣
2500≤price<500010%折扣
5000≤price14%折扣輸入所售商品的價格,求其實際銷售價格。2023/11/2320MATLAB程序設計
程序如下:price=input('請輸入商品價格');switchfix(price/100)case{0,1}%價格小于200rate=0;case{2,3,4}%價格大于等于200但小于500rate=3/100;casenum2cell(5:9)%價格大于等于500但小于1000rate=5/100;casenum2cell(10:24)%價格大于等于1000但小于2500rate=8/100;casenum2cell(25:49)%價格大于等于2500但小于5000rate=10/100;otherwise%價格大于等于5000rate=14/100;endprice=price*(1-rate)%輸出商品實際銷售價格2023/11/2321MATLAB程序設計3.try語句語句格式為:try
語句組1catch
語句組2end
try語句先試探性執行語句組1,如果語句組1在執行過程中出現錯誤,則將錯誤信息賦給保留的lasterr變量,并轉去執行語句組2。2023/11/2322MATLAB程序設計例3-7矩陣乘法運算要求兩矩陣的維數相容,否則會出錯。先求兩矩陣的乘積,若出錯,則自動轉去求兩矩陣的點乘。程序如下:A=[1,2,3;4,5,6];B=[7,8,9;10,11,12];tryC=A*B;catchC=A.*B;endClasterr%顯示出錯原因2023/11/2323MATLAB程序設計3.2.3循環結構1.for語句for語句的格式為:
for循環變量=表達式1:表達式2:表達式3
循環體語句
end其中表達式1的值為循環變量的初值,表達式2的值為步長,表達式3的值為循環變量的終值。步長為1時,表達式2可以省略。2023/11/2324MATLAB程序設計例3-8一個三位整數各位數字的立方和等于該數本身則稱該數為水仙花數。輸出全部水仙花數。程序如下:form=100:999m1=fix(m/100);%求m的百位數字
m2=rem(fix(m/10),10);%求m的十位數字
m3=rem(m,10);%求m的個位數字
ifm==m1*m1*m1+m2*m2*m2+m3*m3*m3disp(m)endend2023/11/2325MATLAB程序設計例3-9已知,當n=100時,求y的值。程序如下:y=0;n=100;fori=1:ny=y+1/(2*i-1);endy
在實際MATLAB編程中,采用循環語句會降低其執行速度,所以前面的程序通常由下面的程序來代替:
n=100;i=1:2:2*n-1;y=sum(1./i);y2023/11/2326MATLAB程序設計for語句更一般的格式:
for循環變量=矩陣表達式(m*n)
循環體語句
end
執行過程是依次將矩陣的每行各列元素賦給循環變量,然后執行循環體語句m次,直至各行元素處理完畢。2023/11/2327MATLAB程序設計
例3-10寫出下列程序的執行結果。
s=0;a=[12,13,14;15,16,17;18,19,20;21,22,23];fork=as=s+k;enddisp(s');>>s'ans=394857662023/11/2328MATLAB程序設計2.while語句
while語句的一般格式為:
while(條件)
循環體語句
end
其執行過程為:若條件成立,則執行循環體語句,執行后再判斷條件是否成立,如果不成立則跳出循環。2023/11/2329MATLAB程序設計
例3-11從鍵盤輸入若干個數,當輸入0時結束輸入,求這些數的平均值和它們之和。程序如下:Sum=0;Cnt=0;Val=input('Enteranumber(endin0):');while(Val~=0)Sum=Sum+Val;Cnt=Cnt+1;Val=input('Enteranumber(endin0):');endif(Cnt>0)SumMean=Sum/Cntend2023/11/2330MATLAB程序設計3.break語句和continue語句與循環結構相關的語句還有break語句和continue語句。它們一般與if語句配合使用。
break語句用于終止循環的執行。當在循環體內執行到該語句時,程序將跳出循環,繼續執行循環語句的下一語句。
continue語句控制跳過循環體中的某些語句。當在循環體內執行到該語句時,程序將跳過循環體中所有剩下的語句,繼續下一次循環。2023/11/2331MATLAB程序設計例3-12求[100,200]之間第一個能被21整除的整數。程序如下:forn=100:200ifrem(n,21)~=0continueendbreakendn2023/11/2332MATLAB程序設計4.循環的嵌套如果一個循環結構的循環體又包括一個循環結構,就稱為循環的嵌套,或稱為多重循環結構。例3-13若一個數等于它的各個真因子之和,則稱該數為完數,如6=1+2+3,所以6是完數。求[1,500]之間的全部完數。form=1:500s=0;fork=1:m/2ifrem(m,k)==0s=s+k;endendifm==sdisp(m);endend2023/11/2333MATLAB程序設計3.3函數文件3.3.1函數文件的基本結構函數文件由function語句引導,其基本結構為:
function輸出形參表=函數名(輸入形參表)
注釋說明部分(不能有空行)
函數體語句其中以function開頭的一行為引導行,表示該M文件是一個函數文件。
函數名的命名規則與變量名相同,由字母開頭,包括字母、數字、下劃線,變量的長度不能超過系統函數namelengthmax
所規定的值(63)。名字不能與MATLAB預留關鍵字同(用iskeyword可列出所有的關鍵字)
輸入形參為函數的輸入參數,輸出形參為函數的輸出參數。當輸出形參多于一個時,則應該用方括號括起來。2023/11/2334MATLAB程序設計
例3-14編寫函數文件求半徑為r的圓的面積和周長。函數文件如下:function[s,p]=fcircle(r)%CIRCLEcalculatetheareaandperimeterofacircleofradiir%r圓半徑%s圓面積%p圓周長%2006年3月15日編s=pi*r*r;p=2*pi*r;2023/11/2335MATLAB程序設計3.3.2函數調用函數調用的一般格式是:
[輸出實參表]=函數名(輸入實參表)
要注意的是,函數調用時各實參出現的順序、個數,應與函數定義時形參的順序、個數一致,否則會出錯。函數調用時,先將實參傳遞給相應的形參,從而實現參數傳遞,然后再執行函數的功能。2023/11/2336MATLAB程序設計
例3-15利用函數文件,實現直角坐標(x,y)與極坐標(ρ,θ)之間的轉換。
函數文件tran.m:function[rho,theta]=tran(x,y)rho=sqrt(x*x+y*y);theta=atan(y/x);
調用tran.m的命令文件main1.m:x=input('Pleaseinputx=:');y=input('Pleaseinputy=:');[rho,the]=tran(x,y);rhothe
在MATLAB中,函數可以嵌套調用,即一個函數可以調用別的函數,甚至調用它自身。一個函數調用它自身稱為函數的遞歸調用。2023/11/2337MATLAB程序設計
上面問題也可以在如下test.m函數文件里調用子程序:function[rho,the]=testx=input('Pleaseinputx=:');y=input('Pleaseinputy=:');[rho,the]=tran(x,y);rho;the;
function[rho,theta]=tran(x,y)rho=sqrt(x*x+y*y);theta=atan(y/x);2023/11/2338MATLAB程序設計
例3-16利用函數的遞歸調用,求n!。
n!本身就是以遞歸的形式定義的:顯然,求n!需要求(n-1)!,這時可采用遞歸調用。遞歸調用函數文件factor.m如下:functionf=factor(n)ifn<=1f=1;elsef=factor(n-1)*n;%遞歸調用求(n-1)!end2023/11/2339MATLAB程序設計3.3.3函數參數的可調性
在調用函數時,MATLAB用兩個永久變量nargin和nargout分別記錄調用該函數時的輸入實參和輸出實參的個數。只要在函數文件中包含這兩個變量,就可以準確地知道該函數文件被調用時的輸入輸出參數個數,從而決定函數如何進行處理。2023/11/2340MATLAB程序設計
例3-17nargin用法示例。
函數文件examp.m:functionfout=examp(a,b,c)ifnargin==1fout=a;elseifnargin==2fout=a+b;elseifnargin==3fout=(a*b*c)/2;end
命令文件mydemo.m:x=[1:3];y=[1;2;3];examp(x)examp(x,y')examp(x,y,3)2023/11/2341MATLAB程序設計3.3.4全局變量與局部變量全局變量用global命令定義,格式為:
global變量名例3-18全局變量應用示例。先建立函數文件wadd.m,該函數將輸入的參數加權相加。functionf=wadd(x,y)globalALPHABETAf=ALPHA*x+BETA*y;
在命令窗口中輸入:globalALPHABETAALPHA=1;BETA=2;s=wadd(1,2)2023/11/2342MATLAB程序設計3.4程序舉例例3-19猜數游戲。首先由計算機產生[1,100]之間的隨機整數,然后由用戶猜測所產生的隨機數。根據用戶猜測的情況給出不同提示,如猜測的數大于產生的數,則顯示“High”,小于則顯示“Low”,等于則顯示“Youwon”,同時退出游戲。用戶最多可以猜7次。2023/11/2343MATLAB程序設計猜數游戲源代碼x=fix(1+rand(1)*(100-1));fori=1:7y=input('請輸入你猜的數:');ify==xdisp('Youwon')break;elseify<xdisp('low');ifi==7disp('Gameover!');endelseify>xdisp('high')ifi==7disp('Gameover!');endendend2023/11/2344MATLAB程序設計例3-20Fibonacci數列定義如下:f1=1f2=1fn=fn-1+fn-2(n>2)求Fibonacci數列的第20項。2023/11/2345MATLAB程序設計Fibonacci數列源程序1:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 四川資陽中學2024-2025學年高三5月高考沖刺英語試題含解析
- 江蘇省泰州市實驗小學2024-2025學年數學四下期末質量跟蹤監視模擬試題含解析
- 四川省樂山市峨眉山市第二中學2025年高三4月聯考物理試題含解析
- 營口市大石橋市2024-2025學年數學五年級第二學期期末達標測試試題含答案
- 專業技術人員聘用合同
- 2025版企業間服務與咨詢合同范本
- 服務供應商合同范本
- 餐飲業食材供應合同模板
- 兒童歌曲鋼琴簡易伴奏編配 課件 第1-3章 和弦-五線譜、簡譜互譯
- 1生活在新型民主國家 公開課一等獎創新教學設計(表格式)
- 人教版(部編版)小學語文五年級下冊期中復習課件1
- 農貿市場消防應急預案演練總結
- 牙周病學全套教學課件
- 酒店合作協議書酒店工程維修
- 《化解沖突收獲友誼》心理健康課件
- DB42-T 2185-2024 高速公路運營管理服務規范
- 寧德時代社招測評試題
- 長螺旋鉆孔壓灌樁施工組織方案
- 2024年江西南昌印鈔有限公司招聘筆試參考題庫含答案解析
- 《腦卒中的早期康復》課件
- GB/T 43359-2023印染廢水膜法集成裝備
評論
0/150
提交評論