版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第5章MATLAB基本程序設(shè)計
MATLAB程序設(shè)計方式:■草稿紙方式(命令行方式)■基本程序設(shè)計(結(jié)構(gòu)程序設(shè)計)■圖形界面程序設(shè)計(面向?qū)ο螅㎝ATLAB基本程序設(shè)計要點:■MATLAB的程序文件名以m作為擴展名■通過Edit命令進入m文件的編輯
■一個完整的應(yīng)用程序由主程序和函數(shù)組成第5章MATLAB基本程序設(shè)計
主要內(nèi)容(5)■M文件■輸入輸出語句■程序控制語句■程序的調(diào)試5.1M文件一、主程序(腳本)1、一個主程序的例子編寫一個雙音頻程序,顯示某個鍵的波形:(Hz)120913361477697123770456852789941*0#5.1M文件設(shè)主程序文件名為mydt.m%產(chǎn)生一個雙音頻
fs=8000;t=(0:1/fs:0.2);f1=697;f2=1209;%鍵1對應(yīng)的兩個頻率y=sin(2*pi*f1*t)+sin(2*pi*f2*t);plot(t,y);wavplay(y,fs)5.1M文件2、主程序的組成▓幫助段(帶注釋符%的行)▓程序段
如果有第一行(function),則主程序為函數(shù)文件形式
,變量不保存到工作區(qū)中,為局部變量.
如果沒有第一行(function),則主程序為命令文件形式,相當于各命令行的集合。變量保存到工作區(qū)中.5.1M文件3、幾點說明▓文件名不能為漢字或數(shù)字開頭▓注釋符%后面的文字不執(zhí)行▓程序的每一行的執(zhí)行相當于在命令行執(zhí)行▓一行可以寫多條語句,以‘,’或‘;’隔開;一行寫不下時,以‘…’續(xù)行▓對于命令文件形式,建議在程序段開始用
clear,closeall等命令清除以前的變量▓對于函數(shù)文件形式,程序中的所有變量均為局部變量。5.1M文件二、函數(shù)
函數(shù)是用用來定義子程序的。主程序?qū)嶋H上也是一個函數(shù)(由MATLAB調(diào)用)。1、函數(shù)頭的形式:
function函數(shù)名()(無變量傳遞)function函數(shù)名(var1,var2,…)(無返回值)function[y1,y2,…]=函數(shù)名(var1,var2,…)5.1M文件2、函數(shù)的位置▓函數(shù)可以是一個單獨的文件(文件名和函數(shù)名應(yīng)相同)▓函數(shù)也可以放在主程序的后面。
5.1M文件3、舉例根據(jù)t,f1,f2生成雙音頻的函數(shù)functionfy=mydtones(t,f1,f2)fy=sin(2*pi*f1*t)+sin(2*pi*f2*t);該函數(shù)可以是單獨文件或在主程序后面。例如:mydt1.m5.1M文件%程序mydt1.m產(chǎn)生一個雙音頻clc;clearall;fs=8000;t=(0:1/fs:0.2);y=dtones(t,697,1209);%鍵1對應(yīng)的兩個頻率plot(t,y);wavplay(y,fs);%函數(shù)functionfy=dtones(t,f1,f2)fy=sin(2*pi*f1*t)+sin(2*pi*f2*t);5.1M文件%程序文件mydt1.m產(chǎn)生一個雙音頻clc;clear;closeall;fs=8000;t=(0:1/fs:0.2);y=dtones(t,697,1209);plot(t,y);wavplay(y,fs);%函數(shù)文件dtones.mfunctionfy=dtones(t,f1,f2)fy=sin(2*pi*f1*t)+sin(2*pi*f2*t);5.1M文件4、全局變量:如果在主程序和函數(shù)中使用同一變量,應(yīng)定義全局變量。globalval1val2…%程序文件mydt2.m產(chǎn)生一個雙音頻clc;clear;closeall;globaltfsfs=8000;t=(0:1/fs:0.2);y=dtones1(697,1209);plot(t,y);%函數(shù)文件dtones1.mfunctionfy=dtones1(f1,f2)globaltfsfy=sin(2*pi*f1*t)+sin(2*pi*f2*t);wavplay(fy,fs);%程序文件名為mean.mfunctiony=mean(x)%mean求平均值%對于向量,返回向量x中各元素的平均值%對于矩陣,返回包含各列元素平均值的行向量[m,n]=size(x);ifm==1m=n;end;y=sum(x)/m;>>helpmeanmean求平均值對于向量,返回向量x中各元素的平均值對于矩陣,返回包含各列元素平均值的行向量
例:編寫函數(shù)文件求半徑為r的圓的面積和周長。函數(shù)文件如下:function[s,p]=fcircle(r)%CIRCLEcalculate%r圓半徑%s圓面積%p圓周長s=pi*r*r;p=2*pi*r;函數(shù)調(diào)用的一般格式是:
[輸出實參表]=函數(shù)名(輸入實參表)
要注意的是,函數(shù)調(diào)用時各實參出現(xiàn)的順序、個數(shù),應(yīng)與函數(shù)定義時形參的順序、個數(shù)一致,否則會出錯。函數(shù)調(diào)用時,先將實參傳遞給相應(yīng)的形參,從而實現(xiàn)參數(shù)傳遞,然后再執(zhí)行函數(shù)的功能。例:函數(shù)文件examp.m:functionfout=charray(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)5.2輸入輸出語句(人機交互)1、屏幕輸入格式:x=input(‘提示符’)----等待輸入數(shù)據(jù)
x=input(‘提示符’,‘s’)----等待輸入字符串
xm=input('What''syourname?','s');
5.2輸入輸出語句(人機交互)2、菜單命令格式:x=menu(‘標題’,‘菜單項1’,菜單項2’,…)返回菜單序號。例如:x=menu(‘Title’,’Plus’,’Minus’)5.2輸入輸出語句(人機交互)3、暫停格式:pause------等待敲擊鍵盤
pause(n)-----等待n秒4、交出鍵盤格式:keyboad---程序執(zhí)行到該命令時暫停,在屏幕上顯示K,這時用戶可輸入命令,查看中間結(jié)果,輸入return命令,則程序繼續(xù)執(zhí)行5.2輸入輸出語句(人機交互)5、中止執(zhí)行6、顯示格式:display(x)-----在命令行顯示x的內(nèi)容格式:^C---強行停止程序的執(zhí)行,回到命令行5.2輸入輸出語句(人機交互)7、打印格式:print---------打印當前繪圖print-dbitmap文件名
---------將繪圖轉(zhuǎn)為圖象文件
-djpeg
例:輸入x,y的值,并將它們的值互換后輸出。程序如下:
x=input('Inputxplease.');y=input('Inputyplease.');z=x;x=y;y=z;disp(x);disp(y);例:求一元二次方程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))]);例:分別建立命令文件和函數(shù)文件,將華氏溫度f轉(zhuǎn)換為攝氏溫度c。程序1:首先建立命令文件并以文件名f2c.m存盤。clear;%清除工作空間中的變量f=input('InputFahrenheittemperature:');c=5*(f-32)/9然后在MATLAB的命令窗口中輸入f2c,將會執(zhí)行該命令文件,執(zhí)行情況為:InputFahrenheittemperature:73c=22.7778程序2:首先建立函數(shù)文件f2c.m。functionc=f2c(f)c=5*(f-32)/9然后在MATLAB的命令窗口調(diào)用該函數(shù)文件。clear;y=input('InputFahrenheittemperature:');x=f2c(y)輸出情況為:InputFahrenheittemperature:70c=21.1111x=21.11115.3程序控制語句任何計算機語言都有三種基本結(jié)構(gòu),即:?順序結(jié)構(gòu):無控制語句?分支結(jié)構(gòu):if,switch?循環(huán)結(jié)構(gòu):for,while5.3程序控制語句1、順序結(jié)構(gòu):無控制語句
按照順序從頭至尾地執(zhí)行程序中的各條語句。順序結(jié)構(gòu)一般不包含其他任何子語句或控制語句。例如:n=0:100;x=sin(2*pi*0.01*n);plot(x);holdonstem(x,’r’);grid5.3程序控制語句?分支結(jié)構(gòu):if,switchif和switch語句用于根據(jù)條件選擇執(zhí)行相應(yīng)的語句。1、if語句(適合分支少)if語句根據(jù)邏輯表達式的值來確定是否執(zhí)行緊接的語句體。常見的調(diào)用格式有:5.3程序控制語句格式1:if表達式語句
end格式2:if表達式語句1else
語句2end5.3程序控制語句格式3:
if表達式1
語句1elseif表達式2
語句2else
語句3end例如:判斷輸入數(shù)的奇偶性n=input(‘n=’);ifrem(n,2)==0display(‘n是偶數(shù)’)elsedisplay(‘n是奇數(shù)’)end5.3程序控制語句2、switch語句(適合分支多)格式:
switch表達式(標量或表達式)
case值1
語句1case值2
語句2…otherwise
語句nend5.3程序控制語句switch語句和if語句類似。Switch語句根據(jù)變量或表達式的取值不同分別執(zhí)行不同的命令。5.3程序控制語句例如:根據(jù)菜單選擇顯示不同的函數(shù)x=menu('波形','正弦','余弦','正切','余切');switchxcase1ezplot('sin')case2ezplot('cos')case3ezplot('tan')case4ezplot('cot')end5.3程序控制語句3、for語句格式:for變量=初值:增量:終值語句
end
例如:求100!
x=1;fork=1:1:100x=x*k;endx例:已知,當n=100時,求y的值。程序如下:
y=0;n=100;fori=1:ny=y+1/(2*i-1);endy
在實際MATLAB編程中,采用循環(huán)語句會降低其執(zhí)行速度,所以前面的程序通常由下面的程序來代替:
n=100;i=1:2:2*n-1;y=sum(1./i);yfor語句更一般的格式為:
for循環(huán)變量=矩陣表達式循環(huán)體語句
end執(zhí)行過程是依次將矩陣的各列元素賦給循環(huán)變量,然后執(zhí)行循環(huán)體語句,直至各列元素處理完畢。
例:寫出下列程序的執(zhí)行結(jié)果。
s=0;a=[12,13,14;15,16,17;18,19,20;21,22,23];
fork=as=s+k;enddisp(s');5.3程序控制語句4、while語句格式:while表達式語句
end例如:計算1,…,1000的和x=1;whilex<=1000x=x+1;end表達式成立(為真)時,一直執(zhí)行語句,否則跳出循環(huán).例如:求Matlab中的最大實數(shù)。
例:從鍵盤輸入若干個數(shù),當輸入0時結(jié)束輸入,求這些數(shù)的平均值和它們之和。程序如下: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/cntend5.3程序控制語句5、break和continue語句用于循環(huán)語句(for,while):break:用于跳出循環(huán)continue:跳過后面的語句繼續(xù)循環(huán)5.3程序控制語句例:輸出100到200之間第一個能被7整除的數(shù)fori=100:200ifrem(i,7)~=0continueendbreakendi循環(huán)的嵌套如果一個循環(huán)結(jié)構(gòu)的循環(huán)體又包括一個循環(huán)結(jié)構(gòu),就稱為循環(huán)的嵌套,或稱為多重循環(huán)結(jié)構(gòu)。
例:若一個數(shù)等于它的各個真因子之和,則稱該數(shù)為完數(shù),如6=1+2+3,所以6是完數(shù)。求[1,500]之間的全部完數(shù)。
form=1:500s=0;fork=1:m/2ifrem(m,k)==0
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 關(guān)注三年級孩子的個性化發(fā)展:班主任工作計劃
- 【名師一號】2020-2021學年高中英語(人教版)必修一雙基限時練6
- 【先學后教新思路】2020高考物理一輪復習-教案5-電學設(shè)計性實驗的處理
- 2025年八年級統(tǒng)編版語文寒假復習 專題03 文言文閱讀(考點剖析+對點訓練)
- 2021高考化學考前沖刺40天練習:專題3-氧化還原反應(yīng)1
- 江蘇省揚州市江都區(qū)2024-2025學年九年級上學期1月期末歷史試題(含答案)
- 二年級蝸牛爬井詳細解題思路
- 八年級下英語單詞
- 2024-2025學年內(nèi)蒙古呼倫貝爾市扎蘭屯市九年級(上)期末英語試卷(含答案)
- 【創(chuàng)新設(shè)計】2021高考化學(江蘇專用)二輪專題提升練:第4講-物質(zhì)結(jié)構(gòu)和元素周期律(含新題及解析)
- 眼鏡店年終總結(jié)及計劃
- 汽車行走的藝術(shù)學習通超星期末考試答案章節(jié)答案2024年
- 一年級新生家長會課件(共25張課件)
- 廣東省東華高級中學2025屆高一上數(shù)學期末考試試題含解析
- 2025屆山東省菏澤市部分重點學校高一上數(shù)學期末統(tǒng)考模擬試題含解析
- GB/T 22081-2024網(wǎng)絡(luò)安全技術(shù)信息安全控制
- 2024-2025學年上海市閔行區(qū)華東師大二附中九年級(上)月考數(shù)學試卷(10月份)(含解析)
- 2025屆云南省昆明市祿勸縣第一中學數(shù)學高二上期末復習檢測試題含解析
- 心理健康教育(共35張課件)
- (部編版)統(tǒng)編版小學語文教材目錄(一至六年級上冊下冊齊全)
- GB/T 44271-2024信息技術(shù)云計算邊緣云通用技術(shù)要求
評論
0/150
提交評論