Matlab編程介紹,循環結構綜述_第1頁
Matlab編程介紹,循環結構綜述_第2頁
Matlab編程介紹,循環結構綜述_第3頁
Matlab編程介紹,循環結構綜述_第4頁
Matlab編程介紹,循環結構綜述_第5頁
已閱讀5頁,還剩41頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Matlab軟件與基礎數學實驗

MATLAB編程介紹與循環結構★

MATLAB中每一個命令都是一個M-文件。★

MATLAB中各種命令可以完成許多單一的任務,對于某些較為復雜的問題,僅靠現有的命令或函數來解決,往往是難以達到目的。為此,要運用MATLAB編程語言編制程序,形成M-文件。

程序是使計算機完成各項運算的命令集,運行一個編制好的程序,計算機會從第一條命令行開始,一行接一行地執行相應的命令,直到終止。

MATLAB作為一種高級語言,不但可以以命令行的方式完成操作,而且可以像大多數程序語言一樣具有結構控制語句、輸入輸出語句和面向對MATLAB程序(又稱為M-文件)有兩種形式,一種是可直接運行的命令文件,另一種是可供調用的函數文件,這兩種文件的擴展名相同,均為“.m”,故稱為M-文件。象編程的能力。

MATLAB編程介紹

MATLAB程序編輯是在編輯窗口(MATLABEditor/Debugger)中進行,程序運行結果或錯誤信息顯示在在命令窗口(CommandWindows)中。1、編寫M-文件的步驟(1)打開程序編輯窗口:點擊MATLAB命令窗口工具條上的NewFile圖標,或點擊命令窗口中的[File]菜單,點擊選項中的New,選擇M-file,就可打開MATLAB程序編輯窗口(MATLABEditor/Debugger),用戶可在窗口中編寫、修改程序。(2)保存編寫的程序:在程序編寫過程中,或程序編寫完成后,點擊工具條上的Save圖標,或按F2鍵,再選擇文件夾:\Matlab\Work,輸入自己定義的文件名,點擊[保存]保存文件,保存后文件名后自動加上“.m”后綴,即為M-文件。注意:★文件名要以字母開頭中間不含空格和標點符號且不超過8個字符;不能用數字和專用變量名作為文件名,如1,11,pi,ans,eps等。★

程序通常保存在文件夾:\Matlab\Work中,此路徑為MATLAB軟件默認路徑。★程序若要存放到其它文件夾中,則要添加該路徑到MATLAB的路徑設置中,否則程序不能連接執行。

點擊編輯窗工具條上[File]菜單,選擇SetPath..,此時打開路徑設置窗口,再點擊AddFoider..,選擇你所使用的文件夾(若沒有則要先新建),選定后該路徑自動顯示在列表的第一行或最后一行,再點擊Save保存即可。具體操作:2、運行M-文件

運行一個已經編寫好且存盤的M-文件有兩種方法:

在MATLAB編輯窗口中對正在編輯的M-文件,保存后可直接點擊工具條上的Debug中的Run命令運行或按F5鍵,即可運行當前程序,其運行結果或信息顯示在命令窗口,此時,用戶可以切換到命令窗口進行查看,之后可回到編輯窗對程序進行修改、重新保存再次運行。方法一:

在MATLAB命令窗口中直接輸入文件名回車,即可運行相應的M-文件。其運行結果或程序運行中的錯誤信息等顯示在命令窗口,此時,用戶若要修改程序則可以切換到編輯窗口進行修改,修改后重新保存。方法二:

當對程序進行修改保存時,當前程序將覆蓋原來程序,此時若要想保存為另外的文件,則要點擊工具條上[File]菜單,選擇Saveas..,另取文件名保存即可。注意:例1、分別建立命令文件和函數文件,將華氏溫度f轉換為攝氏溫度c。首先建立命令文件并以文件名yy1.m存盤。clear;%清除工作空間中的變量f=input('InputFahrenheittemperature:');c=5*(f-32)/9然后在MATLAB的命令窗口中輸入yy1,將會執行該命令文件,執行情況為:InputFahrenheittemperature:73c=22.7778程序1:首先建立函數文件yy2.m。functionc=yy2(f)c=5*(f-32)/9然后在MATLAB的命令窗口調用該函數文件。clear;y=input('InputFahrenheittemperature:');x=yy2(y)輸出情況為:InputFahrenheittemperature:70c=21.1111x=21.1111程序2:

MATLAB程序的基本結構

MATLAB提供了三種基本的程序結構:順序結構、循環結構和選擇結構。一個MATLAB程序就是使計算機實現某一類功能任務的命令集。用戶編制程序時,需要按照解決問題的邏輯步驟和求解算法,用MATLAB的語句和函數,按照三種基本結構逐條編寫,一般一行一條語句,便于調試和查找錯誤。其中功能處理部分是核心,主要是根據處理問題的邏輯步驟,采用循環迭加、判斷推理、分步計算等來解決問題。程序一般包含三個部分:數據輸入、功能處理、結果輸出

程序編寫完成后,需要存盤,形成永久性文件,之后可以隨時對它進行調用或修改。M-文件中的輸入、輸出方式1、輸入方式s='Anystring!';%輸入字符串(1)程序中直接賦值x=2;%輸入單個值a=[1,2,3;4,5,6;7,8,0];%輸入矩陣(a為3階方陣)(2)程序運行時賦值變量=input('提示符號串');格式:功能:

從鍵盤接收數據并賦予等號左邊變量。其中

'提示符號串'是在命令窗口中的提示。

y=input('Pleaseinputy=');%提示語句輸入如:x=input('x=');

當執行到此語句時,暫停程序運行,在命令窗口中光標將停留在提示符號串后閃爍,等待從鍵盤接收數據。用戶從鍵盤輸入數據并按回車鍵確認,繼續程序運行。其優點是每次運行可以輸入不同數據,實現人機對話。

如果在input函數調用時采用's'選項,則允許用戶輸入一個字符串。例如,想輸入一個人的姓名,可采用命令:xm=input('What''syourname?','s');2、輸出方式(1)直接輸出x%變量后無分號“;”,變量直接輸出disp([a]);%a可以是矩陣、數組和單個值(2)格式控制輸出(fprintf命令)fprintf('x=%.3f

y=%.0f\n',a,b);%按指定格式輸出格式:

其中,單引號內為格式說明符:%前為提示符,%.3f為數據格式符,通常與單引號后面的數據相對應,

f指顯示一實數,.3表示顯示的數小數點后3位,小數點前整數部分不限。%.0f指顯示一實數其小數部分顯示0位,結果只顯示整數部分。\n為換行命令符,即一行顯示結束后,光標自動換到下一行。a,b為要顯示的變量,它們與前面的格式符相對應。例:

fprintf('x=%.5fy=%.0f\n',pi,sqrt(2));結果為:

x=3.14159y=1fprintf('x=%.5fy=%.0f\n',sqrt(2),pi);結果為:

x=1.41412y=3

x=input('Inputxplease.');y=input('Inputyplease.');z=x;x=y;y=z;disp(x);disp(y);例:輸入x,y的值,并將它們的值互換后輸出。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))]);例:求一元二次方程ax^2+bx+c=0的根。a=1b=2c=3x1=-1+1.4142i,x2=-1-1.4142i結果為:

若要強行中止程序的運行可使用Ctrl+C命令。3、程序的暫停暫停程序的執行可以使用pause函數,其調用格式為:pause(延遲秒數)如果省略延遲時間,直接使用pause,則將暫停程序,直到用戶按任一鍵后程序繼續執行。MATLAB選擇結構1、單項選擇判斷(if-end)結構格式:

if

(condition) commands-1;endcommands-2;作用:

若條件condition成立,則執行commands-1,再順序執行commands-2;否則,跳過commands-1,直接執行commands-2.例:求任意有限數組a=[a(1),a(2),…,a(n)]

中數值最大的元素M以及所在位置k.分析:

這是一個求n個實數中最大(最小)數的問題,可以編制一個函數文件,隨時調用。首先可以假設最大數M=a(1),位置k=1;再從第二個數到最后一個數分別同M比較,取較大者為M,同時保留其位置。因此,運用循環加判斷編制程序來實現。function[M,k]=yy3(a)

%定義函數yy3,輸入變量為數組a,返回值為最大元素M及位置kn=length(a);%獲取數組的長度即元素的個數nM=a(1);k=1;%將第一個元素作為最大值賦值給M,位置為1;fori=2:n%從第二個元素到最后一個元素依次進行ifa(i)>M%比較后續元素與目前最大值M的大小M=a(i);k=i;%將數值較大的元素賦值給M,同時保留位置iend%選擇結構結束end%循環結構結束編寫完成后以文件名yy3存盤(這里是函數命令程序)。此時,MATLAB函數庫中多了個函數yy3.m,可進行調用。在命令窗中試運行如下:>>a=[1,2.2,pi,-0.8,3.2,0];%任意給定一數組>>[M,k]=yy3(a)%調用函數yy3M=3.2000k=52、多項選擇判斷(if-else-end)結構格式:

if(condition1) commands-1;elseif(condition2)commands-2;elsecommands-3;endcommands-4;作用:

若條件condition1成立,則執行commands-1,再轉向end,順序執行后續的命令commands-4;否則判斷條件condition2是否成立,若成立,則執行commands-2,再轉向end執行后續的命令;若條件condition1和條件condition2均不成立,則執行命令集commands-3,再順序向下執行。例:編寫一個函數將百分制成績轉換為優(A),良(B),中(C),差(D)四等級.分析:

按照通常的等級劃分,一般90-100分為優,78-89分為良,60-77分為中,60分以下的為差,因此,可以用多項選擇判斷結構來實現。functionjb=dengji(fs)

%定義函數dengji,輸入變量為分數fs,返回值為等級A,B,C,Diffs>=90%判斷分數fs是否處在優秀級別上jb=‘A’;%定義為A級elseiffs>=78%判斷分數fs是否處在良好級別上jb='B';%定義為B級elseiffs>=60%判斷分數fs是否處在合格級別上jb='C';%定義為C級else%分數fs不處于以上任何級別上jb='D';%定義為D級end%選擇結構結束

編寫完成后以文件名dengji存盤。此時,MATLAB函數庫中多了個函數dengji.m,可進行調用。在命令窗中試運行如下:>>jb=dengji(81)%調用函數dengjijb=Bx=input('請輸入x的值:');ifx<=0y=(x+sqrt(pi))/exp(2);elsey=log(x+sqrt(1+x*x))/2;endY例:計算分段函數的值。3、switch語句switch語句根據表達式的取值不同,分別執行不同的語句,其語句格式為:switch表達式

case表達式1

語句組1case表達式2

語句組2……case表達式m

語句組motherwise

語句組nend

當表達式的值等于表達式1的值時,執行語句組1,當表達式的值等于表達式2的值時,執行語句組2,…,當表達式的值等于表達式m的值時,執行語句組m,當表達式的值不等于case所列的表達式的值時,執行語句組n。當任意一個分支的語句執行完后,直接執行switch語句的下一句clearn=input('inputn=');switchmod(n,5)case0fprintf('%d是5的倍數',n)otherwisefprintf('%d不是5的倍數',n)endinputn=4646不是5的倍數例:判斷任意給定的整數n是否為5的倍數,并輸出判斷結果。price<200沒有折扣200≤price<5003%折扣500≤price<10005%折扣1000≤price<25008%折扣2500≤price<500010%折扣5000≤price14%折扣例:某商場對顧客所購買的商品實行打折銷售,標準如下(商品價格用price來表示):輸入所售商品的價格,求其實際銷售價格。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)%輸出商品實際銷售價格MATLAB循環結構與應用

循環結構是MATLAB程序中最常用的結構之一,它是讓計算機按照一定的條件多次重復執行某一命令集,從而實現諸如累加、迭代、分層計算等功能。MATLAB軟件提供了兩種循環結構:有限次循環for-end結構和條件循環while-end結構。1、有限次循環(for-end)結構for

n=n1:step:n2

commands-1

end

commands-2格式:其中n為循環變量(自己定義),n1為起始值,step為步長,n2為結束值;commands-1為循環體(循環模塊),commands-2為后序命令。

循環變量n從n1開始,執行commands-1,遇到end時n自動增加step步長,同時與n2比較,當n不超過n2時重復執行commands-1;當n超過n2時轉向執行commands-2。當步長為1時,格式中step可以省略,即為forn=n1:n2格式。在設計for-end循環結構時,應在循環模塊內充分利用循環變量的變化規律,開展相關的運算。另外,結構中for與end要成對出現。作用:例:求n(n=100)個奇數的和:s=1+3+5+…+(2n-1).

這是一個逐個累加求和的過程,從1開始存放在和s中,再累加下一個奇數之后再取代和s,依次類推,直到累加到第n個奇數。因此,使用循環結構來實現。分析:clear;clc;n=100;%賦值給定奇數的個數

s=0;%設定存放和的變量s并賦初值0fori=1:n%定義循環變量i從1到n,以1為步長,即為奇數序號s=s+(2*i-1);%先計算右端累加后再賦給左端的變量sfprintf('i=%.0f,s=%.0f\n',i,s)%逐行顯示出累加求和的過程end%循環結構結束

是否可以(1)直接用從1開始的奇數作為循環變量?(2)不需要顯示求和過程,只顯示最后結果?如果可以,請修改上述程序并運行。問題:n=input('inputn:=');f(1)=1;f(2)=1;fork=3:nf(k)=f(k-1)+f(k-2);endf(n)例:求裴波拉奇數列的第n項(n>2)n:=10,f(10)=55n:=44,f(44)=701408733例:求正整數n的階乘:p=1×2×3×…×n=n!,并求出n=20時的結果。分析:

這是一個逐次乘積的過程,從1開始存放在積p中,再乘以下一個正整數之后再取代積p,依次類推,直到乘至第n個數。因此,使用循環結構來實現。

clear;clc;n=20;%賦值給定正整數

p=1;%設定存放階乘的變量p并賦初值1

fori=1:n%定義循環變量i從1到n,以1為步長,即連續正整數

p=p*i;%先計算右端乘積后再賦給左端的變量pfprintf('i=%.0f,p=%.0f\n',i,p)%逐行顯示出i!end%循環結構結束問題:

是否可以考慮利用input命令對n進行賦值,隨時改變其大小。如果可以,請修改上述程序并運行。例:根據麥克勞林公式可以得到e≈1+1+1/2!+1/3!+…+1/n!,試求e的近似值。分析:

這個問題可以分解為,從1開始的正整數階乘的倒數和的累加運算,累加結果存放在初始值為1的變量中。因此,對上例進行修改來實現。

clear;clc;n=10;%賦值給定正整數p=1;%設定存放階乘的變量p并賦初值1s=1;%設定存放累加和的變量s并賦初值1fori=1:n%定義循環變量i從1到n,以1為步長,即連續正整數p=p*i;%先計算右端乘積后再賦給左端的變量ps=s+1/p;%先計算右端階乘倒數的累加后再賦給左端的變量sfprintf('i=%.0f,s=%.8f\n',i,s)%逐行顯示出e的近似值end%循環結構結束問題:

如何有效地控制e的近似值的精度,或者說如何修改程序使其根據近似值的精度要求自動控制循環次數?2、條件循環(while-end)結構格式:

while(conditions) commands-1;

endcommands-2;

當條件conditions為真時,執行commands-1,當遇到end時,自動檢測條件;當條件conditions不滿足時,轉向執行commands-2。在設計while-end循環結構時,應在循環模塊內有修改conditions的部分,確保在執行了一定次數之后可以結束循環;否則,就成了“死循環”,即無限次重復執行循環。另外,結構中while與end要成對出現。作用:例:對于數列,求其前n項和不超過1000時的n的值及和.分析:這個問題就是求不等式從1開始的連續正整數開方的累加。因此,運用循環結構來實現,的整數解,而和s為但每次累加前要判斷大小。clear;clc;n=0;%設定正整數并賦初值0s=0;%設定存放累加和的變量s并賦初值0whiles<=1000%用累加和s與1000進行比較作為循環條件n=n+1;%改變n為連續正整數s=s+sqrt(n);%先計算右端開方數的累加后再賦給左端的變量sfprintf('n=%.0f,s=%.4f\n',n,s)%逐行顯示正整數及部分和end%循環結構結束問題:

從結果上可以看到,最后一行的結果并不是我們所要求解的答案,而倒數第二行則是所求問題的解。這是為什么?如何修改程序來避免這種情況?例:小猴吃桃問題

有一天小猴摘下了若干個桃子,當即吃掉了一半,又多吃了一個.第二天接著吃了剩下的一半,又多吃了一個以后每天都是吃掉尚存的桃子的一半零一個.到第十天早上,小猴準備吃桃子時,看到只剩下1

個桃子了.問小猴第一天共摘下了多少個桃子?

解:設第k天的桃子數為pk,(k=1,···,10)則規律為k=10;p(k)=1;whilek>=2k=k-1;p(k)=2*(p(k+1)+1);endp(1)Pk-1=2(pk+1)ans=1534例:根據e≈1+1+1/2!+1/3!+…+1/n!求e的近似值,要求精確到小數點后8位。分析:這里不能給定n的大小,但注意到第n次近似值和第n-1次近似值的差:。現要精確到小數點后8位,則只需要因此,可以以此為條件運用條件循環來實現。

,注意:在MATLAB中用科學記數法1.0e-8來表示。clear;clc; p=1;%設定存放階乘的變量p并賦初值1s=1;%設定存放累加和的變量s并賦初值1r=1;%設定前后兩次近似值的誤差r并賦初值1k=0;%設定構造連續正整數的變量k賦初值0又為循環次數whiler>=1.0e-8%根據近似值的精度r大小來定義條件循環k=k+1;%轉換下一個正整數,或開始統計循環次數p=p*k;%計算k的階乘pr=1/p;%計算前后兩次近似值的誤差rs=s+r;%計算e的近似值sfprintf('k=%.0f,s=%.8f\n',k,s)%逐行顯示出e的近似值end%循環結構結束MATLAB程序流程控制

在編寫程序過程中,根據問題求解的要求,往往需要在一定條件下跳出當前循環,或終止程序運行,或暫停程序運行等,這也就是在編制程序過程中對程序流程進行控制。MATLAB軟件提供了相應流程控制語句:break、return和pause等。1、break語句break語句導致包含break

指令的最內層while或for循環的終止。通常是根據循環內部另設的某種條件是否滿足來決定是否跳出循環,因此,常和if判斷一起使用。在很多情況下,這樣做是十分必要的。格式:

while

(conditions-1)

……if

(conditions-2)break;end……

endcommands;作用:

當執行到if模塊且條件conditions-2為真時,執行break語句,程序則跳出當前while循環,直接執行循環結構外的commands.a=3;b=6;fori=1:3b=b+1;ifi>2break%當if條件滿足時不再執行循環

enda=a+2end分析下列程序,說明運行結果及原因運行結果:a=5a=72、return語句

return語句導致程序終止運行,其結果對普通程序是提前結束運行,對于函數命令程序則是結束該函數程序,并返回到調用函數處。該語句通常和if判斷一起使用。格式:

if

(conditions)return;end作用:

當執行到if模塊且條件conditions為真時,執行return語句,程序則被終止,提前結束程序的運行。3、pause語句

pause

語句使程序運行暫停,等待用戶按任意鍵繼續。Pause

語句在程序調試或查看中間結果時經常使用,它有兩種用法:★

直接使用:pause

作用:程序執行此語句時,暫停執行程序,等待用戶從鍵盤按任意鍵繼續運行。★使用按時間暫停形式:pause(n)

(其中n為暫停時間秒數)作用:程序執行此語句時,暫停n秒后繼續執行程序,這里n為正的小數或整數,代表暫停時間。它通常可以用來放慢程序運行展示內部過程,可實現動畫效果。例:Fibonacci

數組中第一個大于10000的元素。分析:

這是一個按遞推公式所生成的序列,每個元素為其前兩個元素之和,數列增加很快。因此,通過循環結構來逐步生成數列的元素,并同時和10000比較,超過時終止循環。n=100;%給定一

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論