MATLAB編程入門_第1頁
MATLAB編程入門_第2頁
MATLAB編程入門_第3頁
MATLAB編程入門_第4頁
MATLAB編程入門_第5頁
已閱讀5頁,還剩61頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第二章 MATLAB程序設(shè)計(1)MATLAB的輸入與輸出語句v輸入語句 輸入數(shù)值、行向量、列向量、矩陣 x=input(please input a number:) please input a number:22 x = 22 輸入字符串 x=input(please input a string:) please input a string:this is a string x = this is a string MATLAB的輸入與輸出語句v輸出語句 自由格式(disp) disp(23+454-29*4) 361 disp(11 22 33; 44 55 66; 77 88 9

2、9) 11 22 33 44 55 66 77 88 99 disp(this is a string) this is a stringMATLAB的輸入與輸出語句 格式化輸出 (fprintf) fprintf(The area is %8.5fn, area) %注意輸出格式前須有%符號, The area is 12.56637 % 輸出值為8位數(shù)含5位小數(shù) 錯誤消息顯示命令 error(this is an error) this is an errorMATLAB中的控制結(jié)構(gòu) v循環(huán)結(jié)構(gòu) 循環(huán)結(jié)構(gòu)允許重復(fù)執(zhí)行一系列語句,需要被重復(fù)執(zhí)行的語句稱為循環(huán)體循環(huán)體。循環(huán)結(jié)構(gòu)的執(zhí)行方式為首先

3、判斷是否達到循環(huán)終止條件是否達到循環(huán)終止條件,如果沒有,則繼續(xù)執(zhí)行循環(huán)體,如果已經(jīng)達到則跳出循環(huán)。 for循環(huán) while循環(huán)MATLAB中的控制結(jié)構(gòu) v選擇結(jié)構(gòu) if結(jié)構(gòu) switch結(jié)構(gòu) try/catch結(jié)構(gòu)v其他流程控制 break語句 continue語句 return語句for循環(huán)vfor循環(huán)的語法for index=expression loopbodyend index是循環(huán)變量,expression是循環(huán)控制表達式,在for和end之前的執(zhí)行語句為循環(huán)體loopbodyfor循環(huán)vfor循環(huán)的執(zhí)行順序 變量index讀取表達式expression,其在一般情況下是一個向量,用

4、冒號表達式表示為start:increment:end,若采用默認的步長1,則表示為start:end;在這種情況下,循環(huán)變量index每次從向量expression中讀取一個元素,然后程序執(zhí)行循環(huán)體(loopbody),直至向量expression中所有元素讀取完畢 一般而言,向量expression中有多少元素,循環(huán)體就執(zhí)行多少次 特別的,如果expression是一個矩陣,則index每次讀取矩陣的一列,直至所有列讀取完畢,亦即循環(huán)次數(shù)為矩陣的列數(shù)for循環(huán)v利用for循環(huán)求階乘6! 下面的循環(huán)控制表達式將會產(chǎn)生行向量6 5 4 3 2 1,循環(huán)變量i依次讀取這些數(shù)值實現(xiàn)階乘運算。 N=

5、6; S=1; for i=N:-1:1 S=S*i; end S S = 720 for循環(huán)v循環(huán)的嵌套 for循環(huán)可以嵌套使用,如果一個循環(huán)完全出現(xiàn)在另一個循環(huán)當(dāng)中,我們稱這兩個循環(huán)為帶嵌套的循環(huán)。下面的例子用兩重for循環(huán)嵌套來計算九九乘法表并打印結(jié)果 for i=1:9 for j=1:i fprintf(%d*%d=%d ,i,j,i*j); end fprintf(n); endwhile循環(huán) vwhile循環(huán)的語法 while為條件循環(huán)語句。while循環(huán)的循環(huán)終止條件通常是對循環(huán)條件表達式的判斷,只要循環(huán)條件表達式為真,則循環(huán)體就重復(fù)執(zhí)行,直到循環(huán)條件表達式為假。所以while

6、循環(huán)的次數(shù)不確定。while循環(huán)的語法是: while condition loopbody endwhile循環(huán) v利用while求EPS(eps) EPS = 1; while (1+EPS) 1 EPS = EPS/2; end EPS = EPS*2 EPS = 2.2204e-016 while循環(huán) v利用while求EPS(eps) eps是一個加1后而使結(jié)果以有限精度大于1的最小數(shù)值。這里我們用大寫EPS是為了避免MATLAB中常量eps的值被覆蓋。在本例中EPS以1開始。只要(1+EPS)1為真(非零),就一直求while循環(huán)內(nèi)的命令值。由于EPS不斷地被2除,EPS逐漸變小以

7、致于EPS+1不大于1。(記住,發(fā)生這種情況是因為計算機使用固定數(shù)的數(shù)值來表示數(shù)。MATLAB用16位,因此,我們只能期望EPS接近10-16。) 在這一點上,(1+EPS)1是假(零),于是while循環(huán)結(jié)束。最后,EPS與2相乘,因為最后除2使EPS太小。while循環(huán)v利用while循環(huán)求Fibonacci數(shù)列的小于100的項 Fibonacci數(shù)列指的是這樣的一個數(shù)列:1、1、2、3、5、8、13、21、這個數(shù)列從第三項開始,每一項都等于前兩項之和。那么我們可以通過循環(huán)的方式來實現(xiàn)這個數(shù)列的求解,且終止條件設(shè)為要求取數(shù)列的最后一項必須小于100,因而可以在語句段中設(shè)置一個flag,判斷

8、已經(jīng)求得數(shù)列的最后兩項之和是否超過100,如果沒有,則循環(huán)繼續(xù),如果已經(jīng)超過則循環(huán)終止,那么可以在MATLAB命令窗口輸入while循環(huán)v 利用while循環(huán)求Fibonacci數(shù)列的小于100項 f(1)=1;f(2)=1;%Fibonacci數(shù)列的前數(shù)列的前兩項兩項 i=2;%項數(shù)標(biāo)志項數(shù)標(biāo)志 n=2;%循環(huán)終止判斷標(biāo)志變量循環(huán)終止判斷標(biāo)志變量 while (n if (attendance = 0.90) & (grade = 60) pass = 1; endif結(jié)構(gòu)vif-else-end結(jié)構(gòu) if condition statements_1 else statements

9、_2 end 其中當(dāng)條件表達式condition的值為真(非0)時執(zhí)行語句段statements_1,否則則執(zhí)行語句段statements_2。if結(jié)構(gòu)vif-else-end結(jié)構(gòu) 例如我們利用rand()函數(shù)產(chǎn)生隨機數(shù)x,而后判斷其與0.5的大小并打印結(jié)果的語句段如下: x=rand(); if x0.5 fprintf(x is greater than 0.5n); else fprintf(x is less than 0.5n) endif結(jié)構(gòu)v if-elseif-else-end結(jié)構(gòu) if condition_1 statements_1 elseif condition_2%這

10、里可以有多個這里可以有多個else if statements_2 else statements_3 end 在這種結(jié)構(gòu)控制下,當(dāng)運行到程序的某一條條件表達式為真(非0)時,則執(zhí)行與之相關(guān)的語句段,而后系統(tǒng)不再檢查其他的條件表達式,系統(tǒng)將跳過if結(jié)構(gòu)中的其他語句。if結(jié)構(gòu)v if-elseif-else-end結(jié)構(gòu) 需要注意的是,在一個if 結(jié)構(gòu)中,可以有任意個elseif 語句,但else語句最多有一個或者沒有。 if (b2 - 4*a*c) for i=200:500 if rem(i,53)=0 continue end break end i i = 212 vreturn語句 當(dāng)

11、用戶需要在文件中進行終止操作時,可以使用return命令,執(zhí)行return命令后,進程將返回調(diào)用函數(shù)或者鍵盤。運用return命令可以提前結(jié)束程序的運行。return和break的區(qū)別在于return一般用于函數(shù)或者文件的結(jié)束,而break用于循環(huán)的終止M腳本文件和M函數(shù)文件 v為什么要用M腳本和M函數(shù) 在前面章節(jié)中我們解決問題的方法都是在MATLAB的命令窗口直接輸入相關(guān)的命令行或者語句段,這種方法適用于一些簡單問題的解決,但是當(dāng)我們遇到更為復(fù)雜的綜合性問題時則需要用到程序編輯與調(diào)試的環(huán)境,在MATLAB中我們稱之為M文件編輯器。利用它我們可以實現(xiàn)對MATLAB命令行語句段的批處理,或者對M

12、文件進行保存和調(diào)用。M腳本文件和M函數(shù)文件 v為什么要用M腳本和M函數(shù) MATLAB 程序大致分為兩類:M 腳本腳本 (M-Script) 和 M 函數(shù)函數(shù) (M-function), 它們均是普通的 ASCII 碼構(gòu)成的文件,后綴均為.m。vM文件的命名規(guī)則 文件名必須以字母開頭,而后可以是英文、數(shù)字和下劃線的組合,文件名首字符不能是數(shù)字或下劃線,M文件名中不能含有空格 M文件名不能與MATLAB內(nèi)部函數(shù)名相同,因而建議對M文件的命名盡量不用簡單的英文單詞, 雖然MATLAB對M文件名是大小寫敏感的,但Windows的文件名是不區(qū)分大小寫的,為了文件的保存方便,實現(xiàn)不同平臺之間的通用性,建議

13、M文件名盡量只使用小寫。M文件編輯器 v 什么是M文件編輯器 M文件編輯器是MATLAB中集成編輯和調(diào)試的環(huán)境,用戶可以通過MATLAB中的M文件編輯器編寫用戶的M文件,同時也可以使用編輯器打開和修改M文件,觀察變量值、調(diào)試程序等。M文件編輯器的界面如圖所示M文件編輯器v 啟動M文件編輯器的方法 在命令窗口輸入edit命令可進入M文件編輯器,此時MATLAB將建立一個空文件,如果需要查看、編輯或者修改已經(jīng)存在的M文件,例如文件名為test.m,則用戶只需在命令窗口輸入edit test或者edit test.m; 單擊工具欄上的M-file按鈕,此時MATLAB將建立一個空文件; 通過File

14、|New菜單可以選擇建立不同類型的M-file,包括空M文件、函數(shù)M文件和類M文件,當(dāng)選擇建立函數(shù)M文件或者類M文件時,MATLAB會自動給出相應(yīng)文件類型的模版。 注意每次修改程序之后都要存盤M腳本文件 v什么是M腳本文件 M腳本文件中存儲的是可用于自動重復(fù)執(zhí)行的一組MATLAB命令和函數(shù)組合。建立一個M腳本文件等價于從命令窗口中順序輸入文件里的命令,程序不需要預(yù)先定義,只要依次將命令編輯在命令文件中,再將程序保存成為擴展名為.m的M腳本文件即可vM腳本文件的執(zhí)行 第一種方式是在M文件編輯器的工具欄中點擊Run按鈕 第二種方式類似批處理文件,執(zhí)行M腳本文件時不需要輸出輸入?yún)?shù),只需要在MATL

15、AB命令窗口的命令行提示符 之后鍵入M腳本文件的文件名即可,這樣MATLAB將自動執(zhí)行該M腳本文件中的各條語句,并將結(jié)果直接返回到MATLAB 的工作空間。當(dāng)一個M腳本文件被執(zhí)行時,和直接在命令窗口中直接鍵入MATLAB 語句所產(chǎn)生的結(jié)果相同。很重要的一點是,要通過這種方式運行的前提條件是該該M腳本文件需要存儲在腳本文件需要存儲在MATLAB的搜索路徑的搜索路徑之中之中 M腳本文件分享命令窗口中的工作區(qū),用M腳本文件可以調(diào)用工作空間已有的變量或創(chuàng)建新的變量。運行過程中產(chǎn)生的變量都是全局變量,所有在腳本文件中創(chuàng)建的變量在腳本文件運行之后仍然存在工作區(qū) M腳本文件適用于用戶所需要立即得到結(jié)果的小規(guī)

16、模運算 v例子 打印出所有的“水仙花數(shù)”,所謂“水仙花數(shù)”是指一個三位數(shù),其各位數(shù)字立方和等于該數(shù)本身。例如:153是一個“水仙花數(shù)”,因為153=135333。 clear s=;%置水仙花數(shù)數(shù)組為空置水仙花數(shù)數(shù)組為空 index=0;%置水仙花數(shù)數(shù)量標(biāo)志為置水仙花數(shù)數(shù)量標(biāo)志為0 三層循環(huán)三層循環(huán) s indexfor i=1:9 for j=1:9 for k=1:9 if (i3+j3+k3=100*i+10*j+k) index=index+1;%水仙花數(shù)數(shù)量標(biāo)志加水仙花數(shù)數(shù)量標(biāo)志加1 s(index)=100*i+10*j+k; end end endendM函數(shù)文件 v什么是M函數(shù)

17、文件 MATLAB函數(shù)是一種特殊形式的M文件,它和M腳本文件的不同之處在于M函數(shù)文件運行在獨立的工作區(qū),一般要自帶參數(shù)且返回結(jié)果。MATLAB中的M函數(shù)文件由function語句引導(dǎo),說明此文件是一個函數(shù)。M函數(shù)文件 v什么是M函數(shù)文件 它通過輸入?yún)?shù)列表接受輸入數(shù)據(jù),并將結(jié)果返回給輸出參數(shù)列表。M函數(shù)文件中所創(chuàng)建的變量都不是全局變量,僅在函數(shù)運行時有效,函數(shù)運行完畢之后,它所定義的變量將從工作空間中刪除vM函數(shù)文件的基本形式 function outarg1, . = fname(inarg1, inarg2, .) %H1 comment line %Other comment lines

18、 . (Executable code) . (return)vM函數(shù)文件的基本形式 其中,function語句標(biāo)志函數(shù)的開始,一般情況下會指定函數(shù)的名稱和輸入輸出列表。輸入函數(shù)列表顯示在函數(shù)名后面的括號中。輸出函數(shù)列表顯示在等號左邊的中括號中,如果只有一個輸出參數(shù),中括號可以省略。如果函數(shù)無確定返回值,只是進行某些操作,則也可以沒有輸出參數(shù) M函數(shù)文件v 編寫M函數(shù)文件求半徑為r的圓的周長和面積。 function s,l=calculate_circle(r) %CIRCLE Calculate the area and perimeter of a circle % S,L=CALCUL

19、ATE_CIRCLE(R) calculate the area %S and the perimeter % L of a circle with radius R s=pi*r2; l=2*pi*r; M函數(shù)文件v例子 上面的函數(shù)具有一個輸入?yún)?shù)r,代表圓的半徑,兩個輸出參數(shù)s和l,分別代表圓的面積和周長,將上述函數(shù)命名為calculate_circle.m并存于MATLAB的搜索路徑之中,然后在MATLAB的命令窗口即可進行調(diào)用 vM函數(shù)文件可以無輸出參數(shù) 當(dāng)M函數(shù)文件只是進行某些操作、打印某些信息的時候,可以不需要輸出參數(shù)例如,編寫M函數(shù)文件判斷一個正整數(shù)是否為質(zhì)數(shù) function

20、primeornot(a)if isreal(a) | round(a)=a | a0 | length(a)=1 disp(please input an positive integer!) returnendif a=1 fprintf(%d is not a prime numbern,a); returnendfor i=2:fix(sqrt(a) if mod(a,i) =0 fprintf(%d is not a prime numbern,a); return endendfprintf(%d is a prime numbern,a);M函數(shù)文件vM函數(shù)文件的執(zhí)行 在命令窗口

21、直接鍵入函數(shù)的名字就可以調(diào)用這個函數(shù)了,同時也可以在腳本文件中或者其他函數(shù)中調(diào)用。 nargin代表調(diào)用函數(shù)時實際輸入?yún)?shù)的個數(shù),nargout代表調(diào)用函數(shù)時實際輸出參數(shù)的個數(shù)vM函數(shù)文件的編寫規(guī)則 函數(shù)名和文件名相同。例如,函數(shù)flipud存儲在名為flipud.m文件中; 在function語句的第一個行注釋被稱為H1注釋行, 它是對函數(shù)功能的總結(jié),并且可以通過lookfor命令將其搜索到并顯示出來,例如在命令窗口想找到有rotate關(guān)鍵字的函數(shù)時,輸入lookfor rotate,則會顯示一系列函數(shù)列表,對函數(shù)的說明則正是H1注釋行; 從H1注釋行到第一個空行或第一個可執(zhí)行性語句之間的注

22、釋行可以稱為幫助文本,應(yīng)寫明函數(shù)的使用方法,包括基本功能、調(diào)用方式和參數(shù)說明、用例等,幫助文本和H1注釋行可以通過help命令顯示出來或通過幫助窗口搜索到; 函數(shù)應(yīng)當(dāng)對輸入輸出參數(shù)進行判斷,以增強函數(shù)功能和其健壯性v例子 通過創(chuàng)建函數(shù)cart2polar把直角坐標(biāo)值(x,y)轉(zhuǎn)化相應(yīng)的極坐標(biāo)(r,),這個函數(shù)支持兩個輸入?yún)?shù),x和y。如果用戶僅定義一個輸入?yún)?shù),則函數(shù)認為直角坐標(biāo)中的縱坐標(biāo)為0。函數(shù)在一般情況下輸出量為模長與幅角(單位為度),如果用戶僅定義一個輸出參數(shù),函數(shù)只返回極坐標(biāo)中的模長function r, theta = cart2polar(x, y)%CART2POLAR Tra

23、nsform Cartesian to polar coordinates.% R,THETA = CART2POLAR(X,Y) transforms corresponding elements of % data stored in Cartesian coordinates X,Y to polar coordinates % (angle THETA and radius R). The arrays X and Y must be the same % size (or either can be scalar). TH is returned in radians. % If the y argument is missing, set it to 0.if nargin 2 y = 0;end% Calculate the radius magnituder = sqrt(x .2 + y .2);% If the second output argument is present,calculate% angle in de

溫馨提示

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

評論

0/150

提交評論