《MATLAB程序設(shè)計(jì)基礎(chǔ)教程》課件第1章_第1頁
《MATLAB程序設(shè)計(jì)基礎(chǔ)教程》課件第1章_第2頁
《MATLAB程序設(shè)計(jì)基礎(chǔ)教程》課件第1章_第3頁
《MATLAB程序設(shè)計(jì)基礎(chǔ)教程》課件第1章_第4頁
《MATLAB程序設(shè)計(jì)基礎(chǔ)教程》課件第1章_第5頁
已閱讀5頁,還剩105頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第1章MATLAB基礎(chǔ)1.1MATLAB概論1.2MATLAB的基本特性1.3數(shù)據(jù)類型1.4復(fù)數(shù)1.1.1MATLAB概述

1.MATLAB的由來和發(fā)展

MATLAB是矩陣實(shí)驗(yàn)室(MatrixLaboratory)之意,其名字由Matrix和Laboratory兩詞的前三個字母組合而成。除具備卓越的數(shù)值計(jì)算能力外,MATLAB還提供了具有專業(yè)水平的符號計(jì)算、文字處理、可視化建模仿真和實(shí)時控制等功能。

1.1MATLAB概論

MATLAB因其具有強(qiáng)大的數(shù)學(xué)運(yùn)算能力、方便實(shí)用的繪圖功能,以及語言的高度集成性,在其他科學(xué)與工程領(lǐng)域的應(yīng)用越來越廣。到目前為止,MATLAB已發(fā)展成為國際上最優(yōu)秀的科技應(yīng)用軟件之一,其強(qiáng)大的科學(xué)計(jì)算與可視化功能、簡單易用的開放式可擴(kuò)展環(huán)境,以及多個面向不同領(lǐng)域而擴(kuò)展的工具箱(Toolbox)支持,使得它在許多學(xué)科領(lǐng)域成為計(jì)算機(jī)輔助設(shè)計(jì)與分析、算法研究和應(yīng)用開發(fā)的基本工具和首選平臺。

MATLAB目前主要應(yīng)用于信號處理、控制系統(tǒng)、神經(jīng)網(wǎng)絡(luò)、模糊邏輯、小波分析和系統(tǒng)仿真等方面,可利用MATLAB進(jìn)行數(shù)值分析、數(shù)值和符號計(jì)算、工程與科學(xué)繪圖、控制系統(tǒng)的設(shè)計(jì)與仿真、通信系統(tǒng)的設(shè)計(jì)與仿真、數(shù)字(音頻、視頻)信號處理、數(shù)字圖像處理、財(cái)務(wù)與金融工程計(jì)算等。

2.MATLAB的優(yōu)、缺點(diǎn)

MATLAB具有以下優(yōu)點(diǎn):

(1)容易使用。MATLAB是MathWorks公司用C語言開發(fā)的,其與C語言的語法結(jié)構(gòu)、流程控制等有許多相似之處,有些幾乎完全一致,具有C語言基礎(chǔ)的讀者能夠很容易地掌握MATLAB。

(2)可以支持多種操作系統(tǒng),如Windows、UNIX等。

(3)豐富的內(nèi)部函數(shù)和工具箱。

(4)強(qiáng)大的圖形和符號功能。MATLAB本身帶有強(qiáng)大的繪圖庫函數(shù),可繪制2D和3D圖形。

(5)可以自動選擇算法。許多MATLAB函數(shù)都帶有算法的自適應(yīng)能力,可根據(jù)情況自動選擇最合適的算法,減少和避免死循環(huán)或其他由于算法不當(dāng)引起的錯誤。

(6)與其他軟件和語言有良好的對接性,如與Maple、C、Basic、Fortran等軟件可以實(shí)現(xiàn)很方便的連接,能夠充分利用各種資源提高編程效率。

MATLAB具有以下缺點(diǎn):

(1)運(yùn)行效率較低。由于MATLAB是一種合成語言,因此與一般的高級語言相比,用它編寫的程序其運(yùn)行時間往往要長一些。

(2)價(jià)格昂貴。

3.應(yīng)用程序接口

由于MATLAB的代碼編譯器采用偽編譯的方式,因此在MATLAB中編寫的程序無法脫離MATLAB的工作環(huán)境而獨(dú)立運(yùn)行。針對這個問題,MATLAB提供了應(yīng)用程序接口,允許MATLAB與其他應(yīng)用程序進(jìn)行數(shù)據(jù)交換,一般來說,按目的可將它們分為以下三種:

(1)?MEX文件。MEX文件作為一種動態(tài)鏈接庫文件,必須通過在MATLAB的工作環(huán)境內(nèi)調(diào)用才能運(yùn)行。

(2)?MAT文件。MAT文件用于數(shù)據(jù)交換,不能利用MATLAB提供的功能來完成計(jì)算任務(wù)。MAT文件由SAVE命令生成,由LOAD命令調(diào)用。

(3)拓廣MATLAB的應(yīng)用范圍和應(yīng)用手段的開發(fā)應(yīng)用程序。這是MATLAB引擎應(yīng)用程序,是一種可以獨(dú)立執(zhí)行的應(yīng)用程序,但在應(yīng)用程序執(zhí)行時,將在后臺啟動一個MATLAB進(jìn)程,用于接收從應(yīng)用程序發(fā)送來的指令并執(zhí)行,然后按照要求返回計(jì)算結(jié)果。1.1.2MATLAB用戶界面

MATLABR2010a的用戶界面如圖1-1所示,其中主要包括主菜單、工具欄和默認(rèn)設(shè)置下打開的窗口。這些默認(rèn)窗口包括命令(Command)窗口、命令歷史(CommandHistory)窗口、工作空間(Workspace)窗口、當(dāng)前路徑(CurrentDirectory)窗口。此外還有編譯窗口、圖形窗口和幫助窗口等其他窗口。圖1-1MATLABR2010a的用戶界面

1.命令(Command)窗口

在默認(rèn)設(shè)置下,命令窗口自動顯示于MATLAB界面中,如果用戶只想調(diào)出命令窗口,也可以選擇“Desktop|DesktopLayout|CommandWindowOnly”命令。MATLABR2010a

用戶界面的中間窗口默認(rèn)為命令窗口。

命令窗口中除了執(zhí)行MATLAB命令外,還支持下列一些通用命令:

cddirtypeclearclfpackclcechoholddisppathsaveloaddiaryquit!(調(diào)用DOS命令)

2.命令歷史(CommandHistory)窗口

命令歷史窗口顯示用戶在命令窗口中所輸入的每條命令,并標(biāo)明了使用時間,這樣可以方便用戶的查詢。

如果用戶想再次執(zhí)行某條已經(jīng)執(zhí)行過的命令,只需在命令歷史窗口中雙擊該命令。

3.工作空間(Workspace)窗口

工作空間窗口用來顯示當(dāng)前計(jì)算機(jī)內(nèi)存中MATLAB變量的名稱、數(shù)據(jù)結(jié)構(gòu)、字節(jié)數(shù)及其類型。

默認(rèn)設(shè)置下,工作空間窗口自動顯示于MATLAB界面中。在工作空間窗口可以查詢以前出現(xiàn)的變量值、變量名和變量的詳細(xì)信息。

如果要查看以前的變量值,只需輸入該變量名即可,如:

>>grade4

grade4=

128如果要查看以前的變量值,但忘記了該變量名,則輸入who即可查看曾經(jīng)使用過的變量名,如:

>>who

Yourvariablesare:

grade1grade2grade3grade4total

如果要查看以前變量值的詳細(xì)信息,輸入whos即可。

4.當(dāng)前文件夾(CurrentFolder)窗口

當(dāng)前文件夾窗口會顯示當(dāng)前用戶工作的文件夾所在的路徑。如果用戶改變文件的路徑或所在文件夾,則當(dāng)前文件夾窗口會顯示新的路徑和文件夾。

在命令窗口中輸入cd命令,并按Enter鍵確認(rèn),即顯示當(dāng)前MATLAB工作所在目錄:

>>cd

D:\MyDocuments\MATLAB

在命令窗口中輸入dir命令,并按Enter鍵確認(rèn),即顯示當(dāng)前MATLAB工作所在目錄中的內(nèi)容。

5.幫助系統(tǒng)

在MATLAB中有以下幾種獲得幫助的途徑。

1)聯(lián)機(jī)幫助系統(tǒng)

在主菜單中,選擇“help”下拉菜單進(jìn)入聯(lián)機(jī)幫助系統(tǒng),打開“幫助”瀏覽器。

在命令窗口中輸入命令helpwin、helpdesk、doc,可進(jìn)入聯(lián)機(jī)幫助系統(tǒng)。

進(jìn)入“help”窗口后,按菜單和控件操作。

2)在命令窗口查詢幫助

(1)?help命令:

在命令窗口鍵入help命令可以列出幫助主題;

鍵入“help函數(shù)名”可以得到指定函數(shù)的在線幫助信息。

(2)?lookfor命令:

在命令窗口鍵入“l(fā)ookfor關(guān)鍵詞”,即可根據(jù)關(guān)鍵詞進(jìn)行查找(掃描命令第一注釋行)搜索出一系列與給定關(guān)鍵詞相關(guān)的命令和函數(shù)。

(3)其他幫助命令:exist、what、who、whos、which。

3)模糊查詢

輸入命令的前幾個字母,然后按Tab鍵,就可以列出所有以這幾個字母開始的命令和函數(shù)。

注意:lookfor和模糊查詢查到的不是詳細(xì)信息,通常還需要在確定了具體函數(shù)名稱后用help命令顯示與之相關(guān)的詳細(xì)信息。1.1.3MATLAB基本用法

1.命令行交互應(yīng)用

在Windows桌面上雙擊MATLAB圖標(biāo),啟動MATLAB程序,在一段提示信息后,會出現(xiàn)MATLAB命令窗口(CommandWindow),以及系統(tǒng)提示符“>>”。

MATLAB是個交互系統(tǒng),用戶可以在提示符后鍵入各種命令,通過移動上、下箭頭可以調(diào)出以前輸入的命令,拖動滾動條還可以查看以前的命令及其輸出信息。

可通過鍵入quit或exit或選擇相應(yīng)的菜單來退出MATLAB。終止MATLAB運(yùn)行會引起工作空間中變量的丟失,因此在退出前,應(yīng)先鍵入save命令,保存工作空間中的變量以便以后使用。

鍵入save命令即將所有變量作為文件存入磁盤MATLAB.mat中,在下次啟動MATLAB時,鍵入load命令,則將變量從MATLAB.mat中重新調(diào)出。

save和load命令后可以跟文件名或指定的變量名,如僅有save,則只能將變量存入MATLAB.mat中;如輸入savetemp命令,則表示將當(dāng)前系統(tǒng)中的變量存入temp.mat中,其命令格式如下:

savetempx:僅僅存入x變量。

savetempXYZ:存入X、Y、Z變量。

loadtemp:重新從temp.mat文件中提出變量,load也可讀ASCII數(shù)據(jù)文件。

2.編程應(yīng)用

與C語言等編程軟件一樣,在MATLAB中建立一個程序文件的方法為:單擊菜單命令“New?|?Script(以前版本為M_file)”,建立一個新的MATLAB程序文件(.M文件),之后即可進(jìn)行編譯、調(diào)試和運(yùn)行等操作。1.1.4MATLAB工具箱

MATLAB的另一強(qiáng)大功能是提供了一系列工具箱,這些工具箱可廣泛用于各領(lǐng)域的計(jì)算與仿真,包括主工具箱(MATLABMainToolbox)和各種工具箱(toolbox)。按工具箱的使用領(lǐng)域分類,可將其分為通用型和專用型。

(1)功能型工具箱(通用型)主要用來擴(kuò)充MATLAB的數(shù)值計(jì)算、符號運(yùn)算、圖形建模仿真、文字處理以及與硬件實(shí)時交互等功能,能夠用于多種學(xué)科。

(2)領(lǐng)域型工具箱(專用型)是學(xué)科專用工具箱,其專業(yè)性很強(qiáng),包括控制系統(tǒng)工具箱(ControlSystemToolbox)、信號處理工具箱(SignalProcessingToolbox)、財(cái)政金融工具箱(FinancialToolbox)等。 1.2MATLAB的基本特性

1.2.1數(shù)學(xué)運(yùn)算

MATLAB的數(shù)學(xué)運(yùn)算包括四則運(yùn)算和乘方等運(yùn)算,用于數(shù)學(xué)計(jì)算的數(shù)學(xué)運(yùn)算符如表1-1所示。1.2.2關(guān)系運(yùn)算

MATLAB的關(guān)系運(yùn)算符包括了所有常用的比較運(yùn)算,如表1-2所示。兩個數(shù)通常可以用六種關(guān)系來進(jìn)行描述:小于(<)、小于或等于(<=)、大于(>)、大于或等于(>=)、等于(==)和不等于(~=)。

MATLAB的關(guān)系運(yùn)算符可以用來比較兩個維數(shù)相同的數(shù)組(矩陣),或用來把一個數(shù)組中的每個元素與一個標(biāo)量比較,結(jié)果都返回一個與原來數(shù)組同維數(shù)的數(shù)組。比較兩個元素的大小時,如果關(guān)系式為“真”,則結(jié)果為1;如果關(guān)系式為“假”,則結(jié)果為0。例如關(guān)系式4+3<=6(數(shù)學(xué)語言表示4與3的和小于等于6),通過上面的敘述可知,此關(guān)系式的結(jié)果為0,標(biāo)明關(guān)系式為假。關(guān)系運(yùn)算符的運(yùn)算法則為:

(1)當(dāng)兩個比較量是標(biāo)量時,直接比較兩數(shù)的大小。若關(guān)系成立,關(guān)系表達(dá)式為“真”,結(jié)果為1;否則為0。

(2)當(dāng)參與比較的兩個量是維數(shù)相同的數(shù)組(矩陣)時,比較是對兩數(shù)組(矩陣)相同位置的元素按標(biāo)量關(guān)系運(yùn)算規(guī)則逐個進(jìn)行,并給出元素比較結(jié)果。最終的關(guān)系運(yùn)算的結(jié)果是一個維數(shù)與原數(shù)組(矩陣)相同的數(shù)組(矩陣),它的元素由0或1組成。

(3)當(dāng)參與比較的一個是標(biāo)量,而另一個是數(shù)組(矩陣)時,則把標(biāo)量與數(shù)組(矩陣)的每一個元素按標(biāo)量關(guān)系運(yùn)算規(guī)則逐個比較,并給出元素比較結(jié)果。最終的關(guān)系運(yùn)算的結(jié)果是一個維數(shù)與原數(shù)組(矩陣)相同的數(shù)組(矩陣),它的元素由0或1組成。

1.?dāng)?shù)組與一個標(biāo)量比較

當(dāng)一個數(shù)組與一個標(biāo)量比較時,首先將標(biāo)量擴(kuò)展成與數(shù)組同維數(shù)的數(shù)組,然后進(jìn)行逐元素比較,結(jié)果返回一個與原來數(shù)組同維數(shù)的數(shù)組。例如:

>>m=1:9

m=

123456789

>>bj=m>5

bj=

000001111

從以上運(yùn)行結(jié)果可以看到,在數(shù)組m中,凡是大于5的對應(yīng)的結(jié)果都為“真”,返回1;其他為“假”,返回0。

2.?dāng)?shù)組(矩陣)間的比較

數(shù)組(矩陣)間的比較,也是對應(yīng)元素逐個進(jìn)行比較,結(jié)果返回一個與原來數(shù)組同維數(shù)的數(shù)組(矩陣)。例如:

>>n=9-m

n=

876543210

>>tf=(m==n)

tf=

000000000由上述可知,由于兩個數(shù)組的對應(yīng)元素都不相等,結(jié)果是返回一個全“假”的數(shù)組。

>>df=(m>n)

df=

000011111

滿足條件的元素位置返回“真”,不滿足條件的元素位置返回“假”。

注意:如果數(shù)組具有不同的大小,那么運(yùn)行時將會產(chǎn)生錯誤。

3.關(guān)系表達(dá)式與數(shù)學(xué)運(yùn)算表達(dá)式的混合運(yùn)算

關(guān)系表達(dá)式可以與數(shù)學(xué)運(yùn)算表達(dá)式進(jìn)行混合運(yùn)算。數(shù)組中滿足條件的元素位置(即為“真”)返回1,為“假”返回0,然后進(jìn)行運(yùn)算。例如:

>>gh=n-(m>4)

gh=

87653210-11.2.3邏輯運(yùn)算

在MATLAB中,有三類基本邏輯運(yùn)算:“與”、“或”和“非”,包含&、&&、|、||?和~共五種,如表1-3所示。邏輯運(yùn)算的運(yùn)算法則為:

(1)在邏輯運(yùn)算中,確認(rèn)非零元素為真,用1表示;零元素為假,用0表示。當(dāng)運(yùn)算結(jié)果為真時,返回值為1;當(dāng)運(yùn)算結(jié)果為假時,返回值為0。

(2)“與”、“或”操作符號可以比較兩個標(biāo)量或者兩個通解數(shù)組(或矩陣)。設(shè)參與邏輯運(yùn)算的是a和b兩個標(biāo)量,那么當(dāng)a、b全為非零時,a&b的運(yùn)算結(jié)果為1,否則為0;a、b中只要有一個非零,a|b的運(yùn)算結(jié)果都為1。

(3)若參與邏輯運(yùn)算的一個是標(biāo)量、一個是矩陣,那么運(yùn)算將在標(biāo)量與矩陣中的每個元素之間按標(biāo)量規(guī)則逐個進(jìn)行。最終運(yùn)算結(jié)果是一個與矩陣同維的矩陣,其元素由1或0組成。

(4)若參與邏輯運(yùn)算的是兩個同維矩陣,那么運(yùn)算將對矩陣相同位置上的元素按標(biāo)量規(guī)則逐個進(jìn)行。最終運(yùn)算結(jié)果是一個與原矩陣同維的矩陣,其元素由1或0組成。

(5)邏輯“非”是一元操作符(或叫單目運(yùn)算符),也服從矩陣運(yùn)算規(guī)則。但是,對于數(shù)組(矩陣),邏輯“非”運(yùn)算是針對于數(shù)組(矩陣)中每個元素的。同樣,當(dāng)邏輯為真時,返回值為1;當(dāng)邏輯為假時,返回值為0。例如,當(dāng)a是零時,~a運(yùn)算結(jié)果為1;當(dāng)a非零時,運(yùn)算結(jié)果為0。

(6)在算術(shù)、關(guān)系、邏輯運(yùn)算中,算術(shù)運(yùn)算優(yōu)先級最高,邏輯運(yùn)算優(yōu)先級最低。

1.邏輯“與”

邏輯“與”,在數(shù)組之間進(jìn)行逐元素的“與”操作。例如:

>>a=1:6

a=

123456

>>b=5-a

b=

43210-1

>>m=(a>2)&(a<5)

m=

001100

又如:

>>n=(a<2)&(a>5)

n=

000000

2.邏輯“或”

邏輯“或”,在數(shù)組之間進(jìn)行逐元素的“或”操作。例如:

>>b=5-a

b=

43210-1

>>n=(b>1)|(b<0)

n=

111001

前三個數(shù)字滿足第一個條件(b>1),輸出1;最后一個數(shù)字滿足第二個條件(b<0),輸出1。

3.邏輯“非”

邏輯“非”,即“NOT”,是個一元操作符,對運(yùn)算對象取反。凡是“真”的,在該位置輸出結(jié)果就為0,其他為1。例如:

>>x=~(b>2)

x=

0011111.2.4標(biāo)量關(guān)系表達(dá)式的避繞式操作

標(biāo)量關(guān)系表達(dá)式的避繞式操作符(&&和||)只適用于標(biāo)量關(guān)系表達(dá)式,“避繞式”(Short-Circuiting)是指MALTAB按順序執(zhí)行由這兩個操作符連接的標(biāo)量關(guān)系表達(dá)式,當(dāng)執(zhí)行到某一表達(dá)式時,就已經(jīng)可以確定其結(jié)果,不再執(zhí)行(繞過)后面的表達(dá)式,直接給出邏輯結(jié)果。例如:

>>a=0;b=pi;

>>a==0||b~=1

ans=

1第一個表達(dá)式為“真”,于是就繞過后面的表達(dá)式不再執(zhí)行,直接給出邏輯結(jié)果為“真”,輸出1。

>>b==1&&a==0

ans=

0

第一個表達(dá)式為“假”,于是就直接給出邏輯結(jié)果為“假”,輸出0。

>>a==0||(1/a)<1

ans=

1

由于第一個表達(dá)式已經(jīng)為“真”,整個操作結(jié)果必將為“真”,于是直接給出邏輯結(jié)果為“真”,輸出1,繞過后面的表達(dá)式不再執(zhí)行,否則將出現(xiàn)除數(shù)為0的警告。1.2.5運(yùn)算符的優(yōu)先級

MALTAB中各運(yùn)算符的優(yōu)先級順序如表1-4所示。MATLAB在執(zhí)行運(yùn)算時,首先執(zhí)行具有較高優(yōu)先級的運(yùn)算,然后執(zhí)行具有較低優(yōu)先級的運(yùn)算。如果兩個運(yùn)算的優(yōu)先級相同,則按從左到右的順序執(zhí)行。

在運(yùn)算的過程中,關(guān)系運(yùn)算是在所有數(shù)學(xué)運(yùn)算之后進(jìn)行的,所以下面兩個表達(dá)式是等價(jià)的,均產(chǎn)生結(jié)果1。

>>6+3<2+10

>>(6+3)<(2+10)1.2.6關(guān)系與邏輯函數(shù)

除了關(guān)系運(yùn)算符和邏輯運(yùn)算符外,MATLAB還提供了幾個關(guān)系與邏輯函數(shù)。這些關(guān)系與邏輯函數(shù)及其功能如表1-5所示。

MATLAB還提供了一些函數(shù),用于檢驗(yàn)?zāi)硞€特定的值是否存在或者某一條件是否成立,并返回相應(yīng)的邏輯結(jié)果。由于這些函數(shù)大多以“is”開頭,因此稱為“is族”函數(shù)。1.2.7標(biāo)點(diǎn)符號的使用

1.分號與逗號

(1)分號(;)用于區(qū)分?jǐn)?shù)組的行,或者用于一個語句的結(jié)尾處,表明命令行的結(jié)束,并取消運(yùn)行結(jié)果的顯示。

(2)逗號(,)用作數(shù)組列分隔符,函數(shù)參數(shù)分隔符或用于分隔語句。

在一個語句行中,可以輸入多個語句,語句之間用逗號或分號分隔,使用逗號時,運(yùn)行結(jié)果將在窗口中顯示;而使用分號時,運(yùn)行結(jié)果將被隱藏。

2.百分號

百分號(%)用于在程序文本中添加注釋,增加程序的可讀性。百分號之后的文本都將視作注釋,系統(tǒng)不對其進(jìn)行編譯。MATLAB中的百分號類似于C語言的“//”符號。

3.括號

在MATLAB中只用小圓括號(())代表運(yùn)算級別,方括號([])只用于生成向量和矩陣,花括號({})用于生成單元數(shù)組。

4.續(xù)行符號

3個點(diǎn)組成的省略號(…)作為續(xù)行符號。在編寫程序時,往往會遇到命令行很長或一行寫不下的情況。為了閱讀起來方便或使程序看起來更清晰,可以將程序分成多行分別書寫,使用續(xù)行符號連接。例如:

>>x?=5*6...

+8-5

x=33

>>total=...

5*6+8-5

total=33使用續(xù)行符號可將兩行命令連接為一行,但使用續(xù)行符號的位置要周期,否則將會出錯。例如:

>>total=...5*6+8-5

???

|Error:Incompleteormisformedexpressionorstatement.

>>value1=10;value2=9;

>>total=value1+value...2

???Undefinedfunctionorvariable'value'.

>>total=value1+value...

2

???2

|

Error:MissingMATLABoperator.1.2.8常用的操作命令和快捷鍵

為方便用戶操作,MATLAB中定義了一些快捷鍵。在使用MATLAB語言編制程序時,掌握一些常用的操作命令和鍵盤操作技巧,可以提高編程效率,起到事半功倍的效果。

1.常用的操作命令

MATLAB常用的操作命令如表1-7所示。

2.常用的鍵盤操作和快捷鍵

MATLAB常用的鍵盤操作和快捷鍵,如表1-8所示。1.2.9簡單的計(jì)算器使用法

要在MATLAB下進(jìn)行基本數(shù)學(xué)運(yùn)算,用戶可以像使用計(jì)算器一樣,只需將運(yùn)算式直接輸入提示號“>>”之后,并按Enter鍵。例如:

>>(5*2+1.3-0.8)*10/25

ans=

4.2000

MATLAB會將運(yùn)算結(jié)果直接存入變量ans,代表MATLAB運(yùn)算后的答案(Answer)并將其數(shù)值顯示出來。現(xiàn)舉例說明:已知機(jī)電系一年級有3個班,每班30人;二年級有3個班,每班35人;三年級有4個班,每班30人;四年級有4個班,每班32人。求機(jī)電系一共有多少人?

在MATLAB中,該問題可以有多種方法解決,如可使用直接輸入法、存儲變量法和編程計(jì)算等。下面就前兩種方法舉例說明。

1.直接輸入法

使用如表1-1所示的數(shù)值運(yùn)算符號,直接在命令窗口輸入表達(dá)式進(jìn)行計(jì)算。表達(dá)式的書寫規(guī)則如下:

(1)在大多數(shù)情況下,MATLAB對命令行中的空格不予處理,因此在書寫表達(dá)式時,可以利用空格調(diào)整表達(dá)式的格式,使表達(dá)式更易于閱讀。

(2)MATLAB的表達(dá)式遵守四則運(yùn)算法則,即運(yùn)算從左到右進(jìn)行,乘法和除法優(yōu)先于加減法,指數(shù)運(yùn)算優(yōu)先于乘除法,括號的運(yùn)算級別最高。在有多重括號存在的情況下,從括號的最里邊向最外邊逐漸擴(kuò)展。

例如,在命令窗口輸入:

>>3*30+3*35+4*30+4*32

ans=

443

由于沒有指定輸出結(jié)果的名稱,MATLAB默認(rèn)將運(yùn)算結(jié)果命名為ans,它是answe的縮寫。

(3)需要注意的是,右除和左除的意義并不相同。右除為常規(guī)的除法,其意義為

>>6/3

ans=2

而左除的意義為

>>6\3

ans=0.5000

2.存儲變量法

直接在命令窗口輸入變量、表達(dá)式進(jìn)行計(jì)算:

>>grade1=3*30;

>>grade2=3*35;

>>grade3=4*30;

>>grade4=4*32;

>>total=grade1+grade2+grade3+grade4

total=443

由于MATLAB具有記憶功能,因此先前的運(yùn)算信息都被保存起來,可供以后的運(yùn)算使用。例如,求每個年級的平均人數(shù):

>>total/4

ans=

110.75001.2.10MATLAB支持的數(shù)據(jù)結(jié)構(gòu)與數(shù)據(jù)類型

1.矩陣

MATLAB最基本的數(shù)據(jù)結(jié)構(gòu)是復(fù)數(shù)矩陣,在命令窗口輸入一個復(fù)數(shù)矩陣非常簡單,例如下面的語句:

>>B=[1+9i,2+8i,3+7j;4+6j5+5i,6+4i;7+3i,8+2j1i]

可輸入一個矩陣B,矩陣B的各行元素由分號分隔,而同行中不同列元素由逗號或空格分隔,回車后顯示的結(jié)果如下:

B=

1.0000+9.0000i2.0000+8.0000i3.0000+7.0000i

4.0000+6.0000i5.0000+5.0000i6.0000+4.0000i

7.0000+3.0000i8.0000+2.0000i

0+1.0000i

其中,元素1+9i表示復(fù)數(shù)項(xiàng),實(shí)矩陣、向量或標(biāo)量均可更容易地以這樣的表述方法輸入。如果賦值表達(dá)式末尾有分號,則其結(jié)構(gòu)將不顯示,否則將顯示出全部結(jié)果。

2.多維數(shù)組

在MATLAB中數(shù)組、向量和矩陣的概念是經(jīng)常混用的,事實(shí)上數(shù)組、向量和二維矩陣在本質(zhì)上沒有任何區(qū)別,都是以矩陣的形式保存的。MATLAB的數(shù)據(jù)結(jié)構(gòu)只有矩陣一種形式(可細(xì)分為普通矩陣和稀疏矩陣),但是數(shù)組與矩陣的某些運(yùn)算方法是不同的。

3.字符串與字符串矩陣

MATLAB的字符串是由單引號括起來的。如可以使用下面命令賦值:

>>strA='Thisisastring.'

多個字符串可以用str2mat()函數(shù)構(gòu)造出字符串矩陣。

4.單元數(shù)組結(jié)構(gòu)

用類似矩陣的記號將給復(fù)雜的數(shù)據(jù)結(jié)構(gòu)納入一個變量之下,與矩陣中的圓括號表示下標(biāo)類似,單元數(shù)組由大括號表示下標(biāo)。

>>B={1,‘China’,1949,[100,80,50;45,60,66;67,12,90;10,8,44]}

B=

[1]'China'[1949][4×3double]

訪問單元數(shù)組應(yīng)該由大括號進(jìn)行,如第4單元中的元素可以由下面的語句得出

>>B{4}

ans=

1008050

456066

671290

10844

>>B{2}

ans=China

5.結(jié)構(gòu)體

MATLAB的結(jié)構(gòu)體類似于C語言的結(jié)構(gòu)體數(shù)據(jù)結(jié)構(gòu),結(jié)構(gòu)體中的每個成員變量用點(diǎn)號表示。如用下面的語句可以建立一個小型的數(shù)據(jù)庫:

>>student.number=122;

>>='李宏';

>>student.height=183;

>>student.test=[100,85,88;77,68,95;67,66,90;90,90,78];其中,test成員為單元型數(shù)據(jù)。刪除成員變量可以由rmfield()函數(shù)完成,添加成員變量可以直接由賦值語句完成。另外,數(shù)據(jù)讀取還可以由setfield()和getfield()函數(shù)完成,所顯示數(shù)據(jù)庫結(jié)構(gòu)如下:

>>student

student=

number:122

name:‘李宏’

height:183

test:[4x3double]

表示變量student的name成員變量。而獲得該成員則比C語言更直觀,即用“.”訪問,而不用“->”。

>>

ans=李宏

6.類與對象

類與對象是MATLABR5.0開始引入的數(shù)據(jù)結(jié)構(gòu)。在實(shí)際工具箱的設(shè)計(jì)中使用了很多的類,例如在控制系統(tǒng)工具箱中定義了LTI(線性時不變系統(tǒng))類,并在此基礎(chǔ)上定義了其子類,即傳遞函數(shù)類TF、狀態(tài)方程類SS、零極點(diǎn)類ZPK和頻率響應(yīng)類FR。 1.3數(shù)據(jù)類型

1.3.1整數(shù)

1.整數(shù)數(shù)據(jù)類型

MATLABR2010a支持8位、16位、32位和64位的有符號和無符號整數(shù)數(shù)據(jù)類型,如表1-9所示。不同的整數(shù)數(shù)據(jù)類型除了定義范圍不同外,其性質(zhì)都相同。

由于MATLAB默認(rèn)的數(shù)據(jù)類型為雙精度型的陣點(diǎn)數(shù),因此要使用整型變量時,需明確地將其定義為整數(shù)數(shù)據(jù)類型。

2.常用的整數(shù)函數(shù)

3.整數(shù)運(yùn)算

類型相同的整數(shù)之間可以進(jìn)行運(yùn)算,返回相同類型的結(jié)果。進(jìn)行加、減和乘法運(yùn)算比較簡單,而進(jìn)行除法運(yùn)算稍微復(fù)雜一些,這是因?yàn)樵诙嗑惹闆r下,整數(shù)的除法不一定能得到整數(shù)的結(jié)果。當(dāng)進(jìn)行除法時,MATLAB首先將兩個數(shù)視為雙精度類型進(jìn)行運(yùn)算,然后將結(jié)果轉(zhuǎn)化為相應(yīng)的整型數(shù)據(jù)。MATLAB中不允許進(jìn)行不同整數(shù)類型之間的運(yùn)算。由于每種整數(shù)數(shù)據(jù)類型都有相應(yīng)的取值范圍,因此數(shù)學(xué)運(yùn)算有可能產(chǎn)生結(jié)果溢出。MATLAB利用飽和處理處理此類問題,即當(dāng)運(yùn)算結(jié)果超出了此類數(shù)據(jù)類型的上限或下限時,系統(tǒng)將結(jié)果設(shè)置為該上限或下限。

例1-3-1在整數(shù)運(yùn)算中的數(shù)據(jù)溢出問題。

解語法如下:

>>x=int8(100);

>>y=int8(90);

>>z=x+y

z=

127

結(jié)果(190)溢出上限,因此輸出結(jié)果為上限(127)。

>>x-3*y

ans=

-27

3*y結(jié)果為(270)溢出上限,結(jié)果為127,繼續(xù)計(jì)算(100-127),得到最后結(jié)果

-27。

>>x-y-y-y

ans=

-128

計(jì)算x-y-y-y時,從左到右進(jìn)行計(jì)算,結(jié)果溢出下限,因此結(jié)果為-128。1.3.2浮點(diǎn)數(shù)與精度函數(shù)

MATLAB的默認(rèn)數(shù)據(jù)類型是雙精度數(shù)值類型(double)。

1.單精度和雙精度數(shù)據(jù)類型的取值范圍

在不同計(jì)算機(jī)系統(tǒng)上運(yùn)行的MATLAB中,其單精度與雙精度數(shù)據(jù)類型與取值范圍會有所不同,這與硬件有關(guān)。具體的單精度和雙精度數(shù)據(jù)類型的取值范圍和精度,可以通過realmin()、realmax()、eps()函數(shù)進(jìn)行查看。

(1)?realmin()函數(shù)。該函數(shù)返回MATLAB語言能夠表示的最小的歸一化正浮點(diǎn)數(shù),任何小于該數(shù)的都不是規(guī)范的IEEE標(biāo)準(zhǔn),都會發(fā)生溢出。

(2)?realmax()函數(shù)。該函數(shù)返回MATLAB語言中能夠表示的最大的歸一化正浮點(diǎn)數(shù),任何大于該數(shù)的數(shù)都不是規(guī)范的IEEE標(biāo)準(zhǔn),都會發(fā)生溢出。

類似的函數(shù)還有intmarx()和intmin():intmax()表示返回指定的整數(shù)數(shù)據(jù)類型能表示的最大的正整數(shù);intmin()表示返回指定的整數(shù)數(shù)據(jù)類型能表示的最小的正整數(shù)。例1-3-2

舉例說明在MATLAB中單精度浮點(diǎn)數(shù)和雙精度浮點(diǎn)數(shù)數(shù)據(jù)類型的取值范圍和精度的規(guī)定。

(1)函數(shù):

>>intmax('int32')

ans=2147483647

>>intmin('int32')

ans=-2147483648

(2)單精度浮點(diǎn)數(shù):

>>realmin('single')

ans=1.1755e-038

>>realmax('single')

ans=3.4028e+038

(3)雙精度浮點(diǎn)數(shù):

>>formatlong

>>n=realmin

n=2.2251e-308

>>realmax

ans=1.7977e+308

2.單、雙數(shù)據(jù)類型之間的轉(zhuǎn)換

幾乎在所有的情況下,MATLAB的數(shù)據(jù)都是以雙精度來表示的,為了節(jié)省存儲空間,MATLAB也支持單精度數(shù)據(jù)類型的數(shù)組。單精度數(shù)據(jù)類型的定義和操作與整型數(shù)據(jù)類型基本相同。

創(chuàng)建單精度類型的變量時與創(chuàng)建整型變量類似,需要聲明變量類型。例如:

>>a1=zeros(1,5,'single')

a1=

00000

>>b1=eye(3,'single')

b1=

100

010

001最后一個參數(shù)指定數(shù)據(jù)類型為single。

使用class()函數(shù)可查詢一個數(shù)據(jù)的類型。例如:

>>class(a1)

ans=single

在MATLAB中,各種數(shù)據(jù)類型之間可以互相轉(zhuǎn)換,轉(zhuǎn)換方式如下:

(1)?datatype(variable),其中,datatype為目標(biāo)數(shù)據(jù)類型,variable為待轉(zhuǎn)換的變量。例如:

>>c=single(1:7)

c=

1234567

表示將默認(rèn)的雙精度類型轉(zhuǎn)換為單精度類型。

(2)使用cast()函數(shù)轉(zhuǎn)換。cast(x,'type'),表示將x的類型轉(zhuǎn)換為'type'指定的類型。例如:

>>d=cast(6:-1:0,'single')

d=

6543210

轉(zhuǎn)換時,如果由高精確度數(shù)據(jù)類型轉(zhuǎn)換為低精確度數(shù)據(jù)類型,則對數(shù)據(jù)進(jìn)行四舍五入;如果由定義范圍大的數(shù)據(jù)類型轉(zhuǎn)換為定義范圍小的數(shù)據(jù)類型,則返回目標(biāo)數(shù)據(jù)類型的上限或下限。

3.單精度數(shù)據(jù)類型的運(yùn)算

單精度數(shù)據(jù)類型的數(shù)據(jù)進(jìn)行運(yùn)算時,返回值為單精度,即單精度之間或單精度與雙精度數(shù)據(jù)之間進(jìn)行運(yùn)算時,返回值都為單精度。例如:

>>c.^d

ans=

>>class(ans)

ans=

single

c、d都是單精度,運(yùn)算結(jié)果ans仍為單精度。單精度數(shù)據(jù)(c)與雙精度數(shù)據(jù)(pi)進(jìn)行運(yùn)算時,返回值仍為單精度。例如:

>>c*pi

ans=

3.14166.28329.424812.566415.708018.849621.9911

>>class(ans)

ans=

single

>>class(pi)

ans=

double

4.eps()函數(shù)

MATLAB中還存在一個用雙精度表示的浮點(diǎn)相對誤差限eps,定義為1與大于1的最小數(shù)之間的步進(jìn)距離,用eps獲得。

(1)

eps:返回從1.0到下一個最大的雙精度數(shù)的距離,eps=2^(-52)。例如:

>>eps

ans=

2.2204e-016

(2)eps(‘double’):等同于eps或eps(1.0)。例如:

>>eps(‘double’)

ans=

2.2204e-016

(3)?eps('single'):等同于eps(single(1.0))或single(2^-23)。例如:

>>eps('single')

ans=

1.1921e-007

(4)?d=eps(X):d是從abs(X)到下一個與X精度相同的較大浮點(diǎn)數(shù)的正距離,X可以是單精度或雙精度。對于所有的X,都有eps(X)=eps(-X)=eps(abs(X))。

5.有限精度產(chǎn)生的結(jié)果

MATLAB的有限精度的局限性往往會產(chǎn)生不尋常的結(jié)果。例如:

>>0.42-0.5+0.08

ans=

-1.387778780781446e-017

>>0.08-0.5+0.42

ans=

0

>>0.08+0.42-0.5

ans=

0從數(shù)學(xué)角度來講,上述三個式子的結(jié)果都應(yīng)該是0,但實(shí)際計(jì)算結(jié)果并非如此。這是因?yàn)?,并不是所有的?shù)字都可以用雙精度數(shù)精確地表示。當(dāng)出現(xiàn)這種情況時,MATLAB會用一個盡可能精確的數(shù)字表示,這將會出現(xiàn)誤差。實(shí)際上,這種誤差常常是很小的,并且通常是在比較兩個數(shù)是否相等時才會出現(xiàn)。

MATLAB有限精度局限性的第二個后果出現(xiàn)在函數(shù)運(yùn)算中。例如:

>>sin(0)

ans=

0

>>sin(pi)

ans=

1.224646799147353e-016

從數(shù)學(xué)角度來講,上述兩個式子的結(jié)果都應(yīng)該是0,但實(shí)際計(jì)算結(jié)果并非如此,sin(pi)并不為0。

綜上所述,上述兩種情況出現(xiàn)的誤差都是很小的,都小于eps。

6.數(shù)字的輸入/輸出格式

數(shù)字的默認(rèn)格式為實(shí)數(shù),保留小數(shù)點(diǎn)后4位浮點(diǎn)數(shù),其他形式可通過相應(yīng)的命令得到。無論何種形式,數(shù)值的存儲值和內(nèi)部運(yùn)算值都是雙精度的,數(shù)值范圍為10-308~10308。1.3.3數(shù)字?jǐn)?shù)據(jù)類型操作函數(shù)

在表1-11中,列出了MATLAB支持的數(shù)字?jǐn)?shù)據(jù)類型操作函數(shù),其中,“type”包括“numeric”、“integer”、“float”和所有的數(shù)據(jù)類型。

例如:使用isa()函數(shù)判斷p。

>>isa(pi,‘single’)

ans=0

>>isa(pi,‘double’)

ans=11.3.4變量和常量

1.變量變量是MATLAB的基本元素之一,變量命名規(guī)則與其他計(jì)算機(jī)語言類似。MATLAB語言的賦值語句有以下兩種:變量名=運(yùn)算表達(dá)式

[返回變量列表]=函數(shù)名(輸入變量列表)

MATLAB不要求對所使用的變量進(jìn)行事先說明,也不需要指定變量的類型,系統(tǒng)會根據(jù)該變量被賦予的值或?qū)υ撟兞克M(jìn)行的操作來自動確定變量的類型。若變量名已存在,將由新值代替舊值,新類型代替舊類型。

MATLAB的變量必須符合下列命名規(guī)則:

(1)變量名區(qū)分大小寫。如pi和Pi是兩個不同的變量。

(2)變量名長度不超過31(這是對于32位計(jì)算機(jī)而言;如果是64位計(jì)算機(jī),則長度應(yīng)不超過63)個字符,超過的部分將會被忽略不計(jì)。

(3)變量名必須以字母開頭,其后可以為字母、數(shù)字或者下劃線。

(4)變量名中的字母大小寫有以下規(guī)定:

①矩陣大寫:A、B、C。

②向量小寫:u、v、w、x、y、z。

③函數(shù)小寫:f、g、h、fun、f1、f2。

④常量小寫:alpha、beta、a、b、c。

(5)變量名中不允許出現(xiàn)標(biāo)點(diǎn)符號,也不能包含空格。MATLAB中的變量名不支持其他符號,因?yàn)槠渌栐贛ATLAB中具有特殊意義。

局部(local)變量與全局(global)變量:前者在M文件內(nèi)起作用,后者需要聲明,在前面加global,常用大寫英文。

2.常量

在MATLAB中有一些特定的量,它們已經(jīng)被預(yù)定義為某個特定的值,因此這些量被稱為常量,主要有pi(圓周率p)、inf和eps等。實(shí)際上,MATLAB支持IEEE標(biāo)準(zhǔn)的運(yùn)算符號,如inf表示無窮大,NaN(NotaNumber)為0/0、0*inf或inf/inf等運(yùn)算結(jié)果。MATLAB中常用的常量如表1-12所示。表中:pi:代表常量。

inf:代表常量無窮大。MATLAB允許的最大數(shù)是21024,當(dāng)超過該數(shù)時,將被認(rèn)為是inf。用inf代表常量無窮大,當(dāng)出現(xiàn)此情況時,將會給出警告信息,但不會導(dǎo)致系統(tǒng)死機(jī),這是MATLAB與其他軟件相比,所具有的優(yōu)點(diǎn)之一。

eps:eps用于判斷是否為0元素的誤差限。一般情況,MATLAB默認(rèn)誤差限為eps,eps=2.2204e-016。

i或j:表示純虛數(shù),即sqrt(-1)。如果在程序中,沒有對i或j專門定義,則默認(rèn)為是純虛數(shù),可直接使用。如果在程序中,對i或j進(jìn)行了重新定義,則保留新值。1.3.5邏輯數(shù)據(jù)

1.邏輯數(shù)據(jù)類型

MATLAB中用1和0分別表示邏輯“真”和邏輯“假”。一些MATLAB函數(shù)或操作符會返回邏輯“真”或邏輯“假”以表示條件是否滿足,如表達(dá)式(5*10)>40返回邏輯“真”。MATLAB中返回邏輯值的函數(shù)和操作符如表1-13所示。

2.邏輯數(shù)組

在MATLAB中,也存在邏輯數(shù)組,如下面的表達(dá)式表示返回邏輯數(shù)組:

>>[3040506070]>40

ans=

00111

1)邏輯數(shù)組的創(chuàng)建

(1)創(chuàng)建邏輯數(shù)組最簡單的方法為直接輸入元素的值為true或者false。

(2)邏輯數(shù)組也可以通過邏輯表達(dá)式生成。

2)邏輯數(shù)組的應(yīng)用

(1)用于條件表達(dá)式。如果僅當(dāng)條件成立時執(zhí)行某段代碼,可以應(yīng)用邏輯數(shù)組進(jìn)行判斷和控制。

(2)用于數(shù)組索引。在MATLAB中支持通過一個數(shù)組對另一個數(shù)組進(jìn)行索引。

3)邏輯數(shù)組的判斷

MATLAB中提供了一組函數(shù)用于判斷數(shù)組是否為邏輯數(shù)組,如表1-15所示。

1.4復(fù)數(shù)

1.4.1復(fù)數(shù)的創(chuàng)建

復(fù)數(shù)由實(shí)部和虛部兩部分組成,基本虛數(shù)單位為。在MATLAB中,虛數(shù)單位由i或者j表示,即i=j=sqrt(-1),其值在工作間中都顯示為0+1.0000i。

在MATLAB中,可以通過兩種方法創(chuàng)建復(fù)數(shù):一種是直接輸入法;另一種是使用complex()函數(shù)。

1.直接輸入法

直接輸入法創(chuàng)建復(fù)數(shù)的示例如下:

>>c1=1-2i

c1=

1.0000-2.0000i

>>c2=1+2j

c2=

1.0000+2.0000i

>>c3=sqrt(-2)

c3=

0+1.4142i注意:在MATLAB7.0以前的版本中,只有數(shù)字才可以與i或者j連接,因此在使用表達(dá)式時,要乘以1i或1j來獲得虛部。如:

>>c4=5+sin(.5)*1j

c4=

5.0000+0.4794i

而在MATLAB7.0以后版本中,不需要乘以1i或1j,可直接乘以i或j來獲得虛部。如:

>>c4=5+sin(.5)*j

c4=

5.0000+0.4794i

2.使用complex()函數(shù)

complex()函數(shù)的調(diào)用方法如下:

(1)?c=complex(a,b)。返回結(jié)果c為復(fù)數(shù),其實(shí)部為a,虛部為b。輸入?yún)?shù)a和b可以是標(biāo)量,或者是維數(shù)、大小相同的向量;也可以是矩陣或者多維數(shù)組。輸出參數(shù)和輸入?yún)?shù)的結(jié)構(gòu)相同。a和b可以有不同的數(shù)據(jù)類型,當(dāng)a和b為各種不同的類型時,返回值分別如下:

當(dāng)a和b中有一個為單精度時,返回結(jié)果為單精度;

如果a和b其中一個為整數(shù)類型,則另外一個必須有相同的整數(shù)類型,或者為雙精度型,返回結(jié)果c為相同的整數(shù)類型。

>>c1=complex(1,2)

c1=

1.0000+2.0000i

>>c2=complex(1,-2)

c2=

1.0000-2.0000i

(2)?c=complex(a)。只有一個輸入?yún)?shù),返回結(jié)果c為復(fù)數(shù),其實(shí)部為a,虛部為0。但是此時c的數(shù)據(jù)類型為復(fù)數(shù)。

>>c1=complex(2)

c1=

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論