




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第1章MATLAB基礎1.1MATLAB概論1.2MATLAB的基本特性1.3數據類型1.4復數1.1.1MATLAB概述
1.MATLAB的由來和發展
MATLAB是矩陣實驗室(MatrixLaboratory)之意,其名字由Matrix和Laboratory兩詞的前三個字母組合而成。除具備卓越的數值計算能力外,MATLAB還提供了具有專業水平的符號計算、文字處理、可視化建模仿真和實時控制等功能。
1.1MATLAB概論
MATLAB因其具有強大的數學運算能力、方便實用的繪圖功能,以及語言的高度集成性,在其他科學與工程領域的應用越來越廣。到目前為止,MATLAB已發展成為國際上最優秀的科技應用軟件之一,其強大的科學計算與可視化功能、簡單易用的開放式可擴展環境,以及多個面向不同領域而擴展的工具箱(Toolbox)支持,使得它在許多學科領域成為計算機輔助設計與分析、算法研究和應用開發的基本工具和首選平臺。
MATLAB目前主要應用于信號處理、控制系統、神經網絡、模糊邏輯、小波分析和系統仿真等方面,可利用MATLAB進行數值分析、數值和符號計算、工程與科學繪圖、控制系統的設計與仿真、通信系統的設計與仿真、數字(音頻、視頻)信號處理、數字圖像處理、財務與金融工程計算等。
2.MATLAB的優、缺點
MATLAB具有以下優點:
(1)容易使用。MATLAB是MathWorks公司用C語言開發的,其與C語言的語法結構、流程控制等有許多相似之處,有些幾乎完全一致,具有C語言基礎的讀者能夠很容易地掌握MATLAB。
(2)可以支持多種操作系統,如Windows、UNIX等。
(3)豐富的內部函數和工具箱。
(4)強大的圖形和符號功能。MATLAB本身帶有強大的繪圖庫函數,可繪制2D和3D圖形。
(5)可以自動選擇算法。許多MATLAB函數都帶有算法的自適應能力,可根據情況自動選擇最合適的算法,減少和避免死循環或其他由于算法不當引起的錯誤。
(6)與其他軟件和語言有良好的對接性,如與Maple、C、Basic、Fortran等軟件可以實現很方便的連接,能夠充分利用各種資源提高編程效率。
MATLAB具有以下缺點:
(1)運行效率較低。由于MATLAB是一種合成語言,因此與一般的高級語言相比,用它編寫的程序其運行時間往往要長一些。
(2)價格昂貴。
3.應用程序接口
由于MATLAB的代碼編譯器采用偽編譯的方式,因此在MATLAB中編寫的程序無法脫離MATLAB的工作環境而獨立運行。針對這個問題,MATLAB提供了應用程序接口,允許MATLAB與其他應用程序進行數據交換,一般來說,按目的可將它們分為以下三種:
(1)?MEX文件。MEX文件作為一種動態鏈接庫文件,必須通過在MATLAB的工作環境內調用才能運行。
(2)?MAT文件。MAT文件用于數據交換,不能利用MATLAB提供的功能來完成計算任務。MAT文件由SAVE命令生成,由LOAD命令調用。
(3)拓廣MATLAB的應用范圍和應用手段的開發應用程序。這是MATLAB引擎應用程序,是一種可以獨立執行的應用程序,但在應用程序執行時,將在后臺啟動一個MATLAB進程,用于接收從應用程序發送來的指令并執行,然后按照要求返回計算結果。1.1.2MATLAB用戶界面
MATLABR2010a的用戶界面如圖1-1所示,其中主要包括主菜單、工具欄和默認設置下打開的窗口。這些默認窗口包括命令(Command)窗口、命令歷史(CommandHistory)窗口、工作空間(Workspace)窗口、當前路徑(CurrentDirectory)窗口。此外還有編譯窗口、圖形窗口和幫助窗口等其他窗口。圖1-1MATLABR2010a的用戶界面
1.命令(Command)窗口
在默認設置下,命令窗口自動顯示于MATLAB界面中,如果用戶只想調出命令窗口,也可以選擇“Desktop|DesktopLayout|CommandWindowOnly”命令。MATLABR2010a
用戶界面的中間窗口默認為命令窗口。
命令窗口中除了執行MATLAB命令外,還支持下列一些通用命令:
cddirtypeclearclfpackclcechoholddisppathsaveloaddiaryquit!(調用DOS命令)
2.命令歷史(CommandHistory)窗口
命令歷史窗口顯示用戶在命令窗口中所輸入的每條命令,并標明了使用時間,這樣可以方便用戶的查詢。
如果用戶想再次執行某條已經執行過的命令,只需在命令歷史窗口中雙擊該命令。
3.工作空間(Workspace)窗口
工作空間窗口用來顯示當前計算機內存中MATLAB變量的名稱、數據結構、字節數及其類型。
默認設置下,工作空間窗口自動顯示于MATLAB界面中。在工作空間窗口可以查詢以前出現的變量值、變量名和變量的詳細信息。
如果要查看以前的變量值,只需輸入該變量名即可,如:
>>grade4
grade4=
128如果要查看以前的變量值,但忘記了該變量名,則輸入who即可查看曾經使用過的變量名,如:
>>who
Yourvariablesare:
grade1grade2grade3grade4total
如果要查看以前變量值的詳細信息,輸入whos即可。
4.當前文件夾(CurrentFolder)窗口
當前文件夾窗口會顯示當前用戶工作的文件夾所在的路徑。如果用戶改變文件的路徑或所在文件夾,則當前文件夾窗口會顯示新的路徑和文件夾。
在命令窗口中輸入cd命令,并按Enter鍵確認,即顯示當前MATLAB工作所在目錄:
>>cd
D:\MyDocuments\MATLAB
在命令窗口中輸入dir命令,并按Enter鍵確認,即顯示當前MATLAB工作所在目錄中的內容。
5.幫助系統
在MATLAB中有以下幾種獲得幫助的途徑。
1)聯機幫助系統
在主菜單中,選擇“help”下拉菜單進入聯機幫助系統,打開“幫助”瀏覽器。
在命令窗口中輸入命令helpwin、helpdesk、doc,可進入聯機幫助系統。
進入“help”窗口后,按菜單和控件操作。
2)在命令窗口查詢幫助
(1)?help命令:
在命令窗口鍵入help命令可以列出幫助主題;
鍵入“help函數名”可以得到指定函數的在線幫助信息。
(2)?lookfor命令:
在命令窗口鍵入“lookfor關鍵詞”,即可根據關鍵詞進行查找(掃描命令第一注釋行)搜索出一系列與給定關鍵詞相關的命令和函數。
(3)其他幫助命令:exist、what、who、whos、which。
3)模糊查詢
輸入命令的前幾個字母,然后按Tab鍵,就可以列出所有以這幾個字母開始的命令和函數。
注意:lookfor和模糊查詢查到的不是詳細信息,通常還需要在確定了具體函數名稱后用help命令顯示與之相關的詳細信息。1.1.3MATLAB基本用法
1.命令行交互應用
在Windows桌面上雙擊MATLAB圖標,啟動MATLAB程序,在一段提示信息后,會出現MATLAB命令窗口(CommandWindow),以及系統提示符“>>”。
MATLAB是個交互系統,用戶可以在提示符后鍵入各種命令,通過移動上、下箭頭可以調出以前輸入的命令,拖動滾動條還可以查看以前的命令及其輸出信息。
可通過鍵入quit或exit或選擇相應的菜單來退出MATLAB。終止MATLAB運行會引起工作空間中變量的丟失,因此在退出前,應先鍵入save命令,保存工作空間中的變量以便以后使用。
鍵入save命令即將所有變量作為文件存入磁盤MATLAB.mat中,在下次啟動MATLAB時,鍵入load命令,則將變量從MATLAB.mat中重新調出。
save和load命令后可以跟文件名或指定的變量名,如僅有save,則只能將變量存入MATLAB.mat中;如輸入savetemp命令,則表示將當前系統中的變量存入temp.mat中,其命令格式如下:
savetempx:僅僅存入x變量。
savetempXYZ:存入X、Y、Z變量。
loadtemp:重新從temp.mat文件中提出變量,load也可讀ASCII數據文件。
2.編程應用
與C語言等編程軟件一樣,在MATLAB中建立一個程序文件的方法為:單擊菜單命令“New?|?Script(以前版本為M_file)”,建立一個新的MATLAB程序文件(.M文件),之后即可進行編譯、調試和運行等操作。1.1.4MATLAB工具箱
MATLAB的另一強大功能是提供了一系列工具箱,這些工具箱可廣泛用于各領域的計算與仿真,包括主工具箱(MATLABMainToolbox)和各種工具箱(toolbox)。按工具箱的使用領域分類,可將其分為通用型和專用型。
(1)功能型工具箱(通用型)主要用來擴充MATLAB的數值計算、符號運算、圖形建模仿真、文字處理以及與硬件實時交互等功能,能夠用于多種學科。
(2)領域型工具箱(專用型)是學科專用工具箱,其專業性很強,包括控制系統工具箱(ControlSystemToolbox)、信號處理工具箱(SignalProcessingToolbox)、財政金融工具箱(FinancialToolbox)等。 1.2MATLAB的基本特性
1.2.1數學運算
MATLAB的數學運算包括四則運算和乘方等運算,用于數學計算的數學運算符如表1-1所示。1.2.2關系運算
MATLAB的關系運算符包括了所有常用的比較運算,如表1-2所示。兩個數通常可以用六種關系來進行描述:小于(<)、小于或等于(<=)、大于(>)、大于或等于(>=)、等于(==)和不等于(~=)。
MATLAB的關系運算符可以用來比較兩個維數相同的數組(矩陣),或用來把一個數組中的每個元素與一個標量比較,結果都返回一個與原來數組同維數的數組。比較兩個元素的大小時,如果關系式為“真”,則結果為1;如果關系式為“假”,則結果為0。例如關系式4+3<=6(數學語言表示4與3的和小于等于6),通過上面的敘述可知,此關系式的結果為0,標明關系式為假。關系運算符的運算法則為:
(1)當兩個比較量是標量時,直接比較兩數的大小。若關系成立,關系表達式為“真”,結果為1;否則為0。
(2)當參與比較的兩個量是維數相同的數組(矩陣)時,比較是對兩數組(矩陣)相同位置的元素按標量關系運算規則逐個進行,并給出元素比較結果。最終的關系運算的結果是一個維數與原數組(矩陣)相同的數組(矩陣),它的元素由0或1組成。
(3)當參與比較的一個是標量,而另一個是數組(矩陣)時,則把標量與數組(矩陣)的每一個元素按標量關系運算規則逐個比較,并給出元素比較結果。最終的關系運算的結果是一個維數與原數組(矩陣)相同的數組(矩陣),它的元素由0或1組成。
1.數組與一個標量比較
當一個數組與一個標量比較時,首先將標量擴展成與數組同維數的數組,然后進行逐元素比較,結果返回一個與原來數組同維數的數組。例如:
>>m=1:9
m=
123456789
>>bj=m>5
bj=
000001111
從以上運行結果可以看到,在數組m中,凡是大于5的對應的結果都為“真”,返回1;其他為“假”,返回0。
2.數組(矩陣)間的比較
數組(矩陣)間的比較,也是對應元素逐個進行比較,結果返回一個與原來數組同維數的數組(矩陣)。例如:
>>n=9-m
n=
876543210
>>tf=(m==n)
tf=
000000000由上述可知,由于兩個數組的對應元素都不相等,結果是返回一個全“假”的數組。
>>df=(m>n)
df=
000011111
滿足條件的元素位置返回“真”,不滿足條件的元素位置返回“假”。
注意:如果數組具有不同的大小,那么運行時將會產生錯誤。
3.關系表達式與數學運算表達式的混合運算
關系表達式可以與數學運算表達式進行混合運算。數組中滿足條件的元素位置(即為“真”)返回1,為“假”返回0,然后進行運算。例如:
>>gh=n-(m>4)
gh=
87653210-11.2.3邏輯運算
在MATLAB中,有三類基本邏輯運算:“與”、“或”和“非”,包含&、&&、|、||?和~共五種,如表1-3所示。邏輯運算的運算法則為:
(1)在邏輯運算中,確認非零元素為真,用1表示;零元素為假,用0表示。當運算結果為真時,返回值為1;當運算結果為假時,返回值為0。
(2)“與”、“或”操作符號可以比較兩個標量或者兩個通解數組(或矩陣)。設參與邏輯運算的是a和b兩個標量,那么當a、b全為非零時,a&b的運算結果為1,否則為0;a、b中只要有一個非零,a|b的運算結果都為1。
(3)若參與邏輯運算的一個是標量、一個是矩陣,那么運算將在標量與矩陣中的每個元素之間按標量規則逐個進行。最終運算結果是一個與矩陣同維的矩陣,其元素由1或0組成。
(4)若參與邏輯運算的是兩個同維矩陣,那么運算將對矩陣相同位置上的元素按標量規則逐個進行。最終運算結果是一個與原矩陣同維的矩陣,其元素由1或0組成。
(5)邏輯“非”是一元操作符(或叫單目運算符),也服從矩陣運算規則。但是,對于數組(矩陣),邏輯“非”運算是針對于數組(矩陣)中每個元素的。同樣,當邏輯為真時,返回值為1;當邏輯為假時,返回值為0。例如,當a是零時,~a運算結果為1;當a非零時,運算結果為0。
(6)在算術、關系、邏輯運算中,算術運算優先級最高,邏輯運算優先級最低。
1.邏輯“與”
邏輯“與”,在數組之間進行逐元素的“與”操作。例如:
>>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.邏輯“或”
邏輯“或”,在數組之間進行逐元素的“或”操作。例如:
>>b=5-a
b=
43210-1
>>n=(b>1)|(b<0)
n=
111001
前三個數字滿足第一個條件(b>1),輸出1;最后一個數字滿足第二個條件(b<0),輸出1。
3.邏輯“非”
邏輯“非”,即“NOT”,是個一元操作符,對運算對象取反。凡是“真”的,在該位置輸出結果就為0,其他為1。例如:
>>x=~(b>2)
x=
0011111.2.4標量關系表達式的避繞式操作
標量關系表達式的避繞式操作符(&&和||)只適用于標量關系表達式,“避繞式”(Short-Circuiting)是指MALTAB按順序執行由這兩個操作符連接的標量關系表達式,當執行到某一表達式時,就已經可以確定其結果,不再執行(繞過)后面的表達式,直接給出邏輯結果。例如:
>>a=0;b=pi;
>>a==0||b~=1
ans=
1第一個表達式為“真”,于是就繞過后面的表達式不再執行,直接給出邏輯結果為“真”,輸出1。
>>b==1&&a==0
ans=
0
第一個表達式為“假”,于是就直接給出邏輯結果為“假”,輸出0。
>>a==0||(1/a)<1
ans=
1
由于第一個表達式已經為“真”,整個操作結果必將為“真”,于是直接給出邏輯結果為“真”,輸出1,繞過后面的表達式不再執行,否則將出現除數為0的警告。1.2.5運算符的優先級
MALTAB中各運算符的優先級順序如表1-4所示。MATLAB在執行運算時,首先執行具有較高優先級的運算,然后執行具有較低優先級的運算。如果兩個運算的優先級相同,則按從左到右的順序執行。
在運算的過程中,關系運算是在所有數學運算之后進行的,所以下面兩個表達式是等價的,均產生結果1。
>>6+3<2+10
>>(6+3)<(2+10)1.2.6關系與邏輯函數
除了關系運算符和邏輯運算符外,MATLAB還提供了幾個關系與邏輯函數。這些關系與邏輯函數及其功能如表1-5所示。
MATLAB還提供了一些函數,用于檢驗某個特定的值是否存在或者某一條件是否成立,并返回相應的邏輯結果。由于這些函數大多以“is”開頭,因此稱為“is族”函數。1.2.7標點符號的使用
1.分號與逗號
(1)分號(;)用于區分數組的行,或者用于一個語句的結尾處,表明命令行的結束,并取消運行結果的顯示。
(2)逗號(,)用作數組列分隔符,函數參數分隔符或用于分隔語句。
在一個語句行中,可以輸入多個語句,語句之間用逗號或分號分隔,使用逗號時,運行結果將在窗口中顯示;而使用分號時,運行結果將被隱藏。
2.百分號
百分號(%)用于在程序文本中添加注釋,增加程序的可讀性。百分號之后的文本都將視作注釋,系統不對其進行編譯。MATLAB中的百分號類似于C語言的“//”符號。
3.括號
在MATLAB中只用小圓括號(())代表運算級別,方括號([])只用于生成向量和矩陣,花括號({})用于生成單元數組。
4.續行符號
3個點組成的省略號(…)作為續行符號。在編寫程序時,往往會遇到命令行很長或一行寫不下的情況。為了閱讀起來方便或使程序看起來更清晰,可以將程序分成多行分別書寫,使用續行符號連接。例如:
>>x?=5*6...
+8-5
x=33
>>total=...
5*6+8-5
total=33使用續行符號可將兩行命令連接為一行,但使用續行符號的位置要周期,否則將會出錯。例如:
>>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簡單的計算器使用法
要在MATLAB下進行基本數學運算,用戶可以像使用計算器一樣,只需將運算式直接輸入提示號“>>”之后,并按Enter鍵。例如:
>>(5*2+1.3-0.8)*10/25
ans=
4.2000
MATLAB會將運算結果直接存入變量ans,代表MATLAB運算后的答案(Answer)并將其數值顯示出來。現舉例說明:已知機電系一年級有3個班,每班30人;二年級有3個班,每班35人;三年級有4個班,每班30人;四年級有4個班,每班32人。求機電系一共有多少人?
在MATLAB中,該問題可以有多種方法解決,如可使用直接輸入法、存儲變量法和編程計算等。下面就前兩種方法舉例說明。
1.直接輸入法
使用如表1-1所示的數值運算符號,直接在命令窗口輸入表達式進行計算。表達式的書寫規則如下:
(1)在大多數情況下,MATLAB對命令行中的空格不予處理,因此在書寫表達式時,可以利用空格調整表達式的格式,使表達式更易于閱讀。
(2)MATLAB的表達式遵守四則運算法則,即運算從左到右進行,乘法和除法優先于加減法,指數運算優先于乘除法,括號的運算級別最高。在有多重括號存在的情況下,從括號的最里邊向最外邊逐漸擴展。
例如,在命令窗口輸入:
>>3*30+3*35+4*30+4*32
ans=
443
由于沒有指定輸出結果的名稱,MATLAB默認將運算結果命名為ans,它是answe的縮寫。
(3)需要注意的是,右除和左除的意義并不相同。右除為常規的除法,其意義為
>>6/3
ans=2
而左除的意義為
>>6\3
ans=0.5000
2.存儲變量法
直接在命令窗口輸入變量、表達式進行計算:
>>grade1=3*30;
>>grade2=3*35;
>>grade3=4*30;
>>grade4=4*32;
>>total=grade1+grade2+grade3+grade4
total=443
由于MATLAB具有記憶功能,因此先前的運算信息都被保存起來,可供以后的運算使用。例如,求每個年級的平均人數:
>>total/4
ans=
110.75001.2.10MATLAB支持的數據結構與數據類型
1.矩陣
MATLAB最基本的數據結構是復數矩陣,在命令窗口輸入一個復數矩陣非常簡單,例如下面的語句:
>>B=[1+9i,2+8i,3+7j;4+6j5+5i,6+4i;7+3i,8+2j1i]
可輸入一個矩陣B,矩陣B的各行元素由分號分隔,而同行中不同列元素由逗號或空格分隔,回車后顯示的結果如下:
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表示復數項,實矩陣、向量或標量均可更容易地以這樣的表述方法輸入。如果賦值表達式末尾有分號,則其結構將不顯示,否則將顯示出全部結果。
2.多維數組
在MATLAB中數組、向量和矩陣的概念是經常混用的,事實上數組、向量和二維矩陣在本質上沒有任何區別,都是以矩陣的形式保存的。MATLAB的數據結構只有矩陣一種形式(可細分為普通矩陣和稀疏矩陣),但是數組與矩陣的某些運算方法是不同的。
3.字符串與字符串矩陣
MATLAB的字符串是由單引號括起來的。如可以使用下面命令賦值:
>>strA='Thisisastring.'
多個字符串可以用str2mat()函數構造出字符串矩陣。
4.單元數組結構
用類似矩陣的記號將給復雜的數據結構納入一個變量之下,與矩陣中的圓括號表示下標類似,單元數組由大括號表示下標。
>>B={1,‘China’,1949,[100,80,50;45,60,66;67,12,90;10,8,44]}
B=
[1]'China'[1949][4×3double]
訪問單元數組應該由大括號進行,如第4單元中的元素可以由下面的語句得出
>>B{4}
ans=
1008050
456066
671290
10844
>>B{2}
ans=China
5.結構體
MATLAB的結構體類似于C語言的結構體數據結構,結構體中的每個成員變量用點號表示。如用下面的語句可以建立一個小型的數據庫:
>>student.number=122;
>>='李宏';
>>student.height=183;
>>student.test=[100,85,88;77,68,95;67,66,90;90,90,78];其中,test成員為單元型數據。刪除成員變量可以由rmfield()函數完成,添加成員變量可以直接由賦值語句完成。另外,數據讀取還可以由setfield()和getfield()函數完成,所顯示數據庫結構如下:
>>student
student=
number:122
name:‘李宏’
height:183
test:[4x3double]
表示變量student的name成員變量。而獲得該成員則比C語言更直觀,即用“.”訪問,而不用“->”。
>>
ans=李宏
6.類與對象
類與對象是MATLABR5.0開始引入的數據結構。在實際工具箱的設計中使用了很多的類,例如在控制系統工具箱中定義了LTI(線性時不變系統)類,并在此基礎上定義了其子類,即傳遞函數類TF、狀態方程類SS、零極點類ZPK和頻率響應類FR。 1.3數據類型
1.3.1整數
1.整數數據類型
MATLABR2010a支持8位、16位、32位和64位的有符號和無符號整數數據類型,如表1-9所示。不同的整數數據類型除了定義范圍不同外,其性質都相同。
由于MATLAB默認的數據類型為雙精度型的陣點數,因此要使用整型變量時,需明確地將其定義為整數數據類型。
2.常用的整數函數
3.整數運算
類型相同的整數之間可以進行運算,返回相同類型的結果。進行加、減和乘法運算比較簡單,而進行除法運算稍微復雜一些,這是因為在多精度情況下,整數的除法不一定能得到整數的結果。當進行除法時,MATLAB首先將兩個數視為雙精度類型進行運算,然后將結果轉化為相應的整型數據。MATLAB中不允許進行不同整數類型之間的運算。由于每種整數數據類型都有相應的取值范圍,因此數學運算有可能產生結果溢出。MATLAB利用飽和處理處理此類問題,即當運算結果超出了此類數據類型的上限或下限時,系統將結果設置為該上限或下限。
例1-3-1在整數運算中的數據溢出問題。
解語法如下:
>>x=int8(100);
>>y=int8(90);
>>z=x+y
z=
127
結果(190)溢出上限,因此輸出結果為上限(127)。
>>x-3*y
ans=
-27
3*y結果為(270)溢出上限,結果為127,繼續計算(100-127),得到最后結果
-27。
>>x-y-y-y
ans=
-128
計算x-y-y-y時,從左到右進行計算,結果溢出下限,因此結果為-128。1.3.2浮點數與精度函數
MATLAB的默認數據類型是雙精度數值類型(double)。
1.單精度和雙精度數據類型的取值范圍
在不同計算機系統上運行的MATLAB中,其單精度與雙精度數據類型與取值范圍會有所不同,這與硬件有關。具體的單精度和雙精度數據類型的取值范圍和精度,可以通過realmin()、realmax()、eps()函數進行查看。
(1)?realmin()函數。該函數返回MATLAB語言能夠表示的最小的歸一化正浮點數,任何小于該數的都不是規范的IEEE標準,都會發生溢出。
(2)?realmax()函數。該函數返回MATLAB語言中能夠表示的最大的歸一化正浮點數,任何大于該數的數都不是規范的IEEE標準,都會發生溢出。
類似的函數還有intmarx()和intmin():intmax()表示返回指定的整數數據類型能表示的最大的正整數;intmin()表示返回指定的整數數據類型能表示的最小的正整數。例1-3-2
舉例說明在MATLAB中單精度浮點數和雙精度浮點數數據類型的取值范圍和精度的規定。
解
(1)函數:
>>intmax('int32')
ans=2147483647
>>intmin('int32')
ans=-2147483648
(2)單精度浮點數:
>>realmin('single')
ans=1.1755e-038
>>realmax('single')
ans=3.4028e+038
(3)雙精度浮點數:
>>formatlong
>>n=realmin
n=2.2251e-308
>>realmax
ans=1.7977e+308
2.單、雙數據類型之間的轉換
幾乎在所有的情況下,MATLAB的數據都是以雙精度來表示的,為了節省存儲空間,MATLAB也支持單精度數據類型的數組。單精度數據類型的定義和操作與整型數據類型基本相同。
創建單精度類型的變量時與創建整型變量類似,需要聲明變量類型。例如:
>>a1=zeros(1,5,'single')
a1=
00000
>>b1=eye(3,'single')
b1=
100
010
001最后一個參數指定數據類型為single。
使用class()函數可查詢一個數據的類型。例如:
>>class(a1)
ans=single
在MATLAB中,各種數據類型之間可以互相轉換,轉換方式如下:
(1)?datatype(variable),其中,datatype為目標數據類型,variable為待轉換的變量。例如:
>>c=single(1:7)
c=
1234567
表示將默認的雙精度類型轉換為單精度類型。
(2)使用cast()函數轉換。cast(x,'type'),表示將x的類型轉換為'type'指定的類型。例如:
>>d=cast(6:-1:0,'single')
d=
6543210
轉換時,如果由高精確度數據類型轉換為低精確度數據類型,則對數據進行四舍五入;如果由定義范圍大的數據類型轉換為定義范圍小的數據類型,則返回目標數據類型的上限或下限。
3.單精度數據類型的運算
單精度數據類型的數據進行運算時,返回值為單精度,即單精度之間或單精度與雙精度數據之間進行運算時,返回值都為單精度。例如:
>>c.^d
ans=
>>class(ans)
ans=
single
c、d都是單精度,運算結果ans仍為單精度。單精度數據(c)與雙精度數據(pi)進行運算時,返回值仍為單精度。例如:
>>c*pi
ans=
3.14166.28329.424812.566415.708018.849621.9911
>>class(ans)
ans=
single
>>class(pi)
ans=
double
4.eps()函數
MATLAB中還存在一個用雙精度表示的浮點相對誤差限eps,定義為1與大于1的最小數之間的步進距離,用eps獲得。
(1)
eps:返回從1.0到下一個最大的雙精度數的距離,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精度相同的較大浮點數的正距離,X可以是單精度或雙精度。對于所有的X,都有eps(X)=eps(-X)=eps(abs(X))。
5.有限精度產生的結果
MATLAB的有限精度的局限性往往會產生不尋常的結果。例如:
>>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從數學角度來講,上述三個式子的結果都應該是0,但實際計算結果并非如此。這是因為,并不是所有的數字都可以用雙精度數精確地表示。當出現這種情況時,MATLAB會用一個盡可能精確的數字表示,這將會出現誤差。實際上,這種誤差常常是很小的,并且通常是在比較兩個數是否相等時才會出現。
MATLAB有限精度局限性的第二個后果出現在函數運算中。例如:
>>sin(0)
ans=
0
>>sin(pi)
ans=
1.224646799147353e-016
從數學角度來講,上述兩個式子的結果都應該是0,但實際計算結果并非如此,sin(pi)并不為0。
綜上所述,上述兩種情況出現的誤差都是很小的,都小于eps。
6.數字的輸入/輸出格式
數字的默認格式為實數,保留小數點后4位浮點數,其他形式可通過相應的命令得到。無論何種形式,數值的存儲值和內部運算值都是雙精度的,數值范圍為10-308~10308。1.3.3數字數據類型操作函數
在表1-11中,列出了MATLAB支持的數字數據類型操作函數,其中,“type”包括“numeric”、“integer”、“float”和所有的數據類型。
例如:使用isa()函數判斷p。
>>isa(pi,‘single’)
ans=0
>>isa(pi,‘double’)
ans=11.3.4變量和常量
1.變量變量是MATLAB的基本元素之一,變量命名規則與其他計算機語言類似。MATLAB語言的賦值語句有以下兩種:變量名=運算表達式
[返回變量列表]=函數名(輸入變量列表)
MATLAB不要求對所使用的變量進行事先說明,也不需要指定變量的類型,系統會根據該變量被賦予的值或對該變量所進行的操作來自動確定變量的類型。若變量名已存在,將由新值代替舊值,新類型代替舊類型。
MATLAB的變量必須符合下列命名規則:
(1)變量名區分大小寫。如pi和Pi是兩個不同的變量。
(2)變量名長度不超過31(這是對于32位計算機而言;如果是64位計算機,則長度應不超過63)個字符,超過的部分將會被忽略不計。
(3)變量名必須以字母開頭,其后可以為字母、數字或者下劃線。
(4)變量名中的字母大小寫有以下規定:
①矩陣大寫:A、B、C。
②向量小寫:u、v、w、x、y、z。
③函數小寫:f、g、h、fun、f1、f2。
④常量小寫:alpha、beta、a、b、c。
(5)變量名中不允許出現標點符號,也不能包含空格。MATLAB中的變量名不支持其他符號,因為其他符號在MATLAB中具有特殊意義。
局部(local)變量與全局(global)變量:前者在M文件內起作用,后者需要聲明,在前面加global,常用大寫英文。
2.常量
在MATLAB中有一些特定的量,它們已經被預定義為某個特定的值,因此這些量被稱為常量,主要有pi(圓周率p)、inf和eps等。實際上,MATLAB支持IEEE標準的運算符號,如inf表示無窮大,NaN(NotaNumber)為0/0、0*inf或inf/inf等運算結果。MATLAB中常用的常量如表1-12所示。表中:pi:代表常量。
inf:代表常量無窮大。MATLAB允許的最大數是21024,當超過該數時,將被認為是inf。用inf代表常量無窮大,當出現此情況時,將會給出警告信息,但不會導致系統死機,這是MATLAB與其他軟件相比,所具有的優點之一。
eps:eps用于判斷是否為0元素的誤差限。一般情況,MATLAB默認誤差限為eps,eps=2.2204e-016。
i或j:表示純虛數,即sqrt(-1)。如果在程序中,沒有對i或j專門定義,則默認為是純虛數,可直接使用。如果在程序中,對i或j進行了重新定義,則保留新值。1.3.5邏輯數據
1.邏輯數據類型
MATLAB中用1和0分別表示邏輯“真”和邏輯“假”。一些MATLAB函數或操作符會返回邏輯“真”或邏輯“假”以表示條件是否滿足,如表達式(5*10)>40返回邏輯“真”。MATLAB中返回邏輯值的函數和操作符如表1-13所示。
2.邏輯數組
在MATLAB中,也存在邏輯數組,如下面的表達式表示返回邏輯數組:
>>[3040506070]>40
ans=
00111
1)邏輯數組的創建
(1)創建邏輯數組最簡單的方法為直接輸入元素的值為true或者false。
(2)邏輯數組也可以通過邏輯表達式生成。
2)邏輯數組的應用
(1)用于條件表達式。如果僅當條件成立時執行某段代碼,可以應用邏輯數組進行判斷和控制。
(2)用于數組索引。在MATLAB中支持通過一個數組對另一個數組進行索引。
3)邏輯數組的判斷
MATLAB中提供了一組函數用于判斷數組是否為邏輯數組,如表1-15所示。
1.4復數
1.4.1復數的創建
復數由實部和虛部兩部分組成,基本虛數單位為。在MATLAB中,虛數單位由i或者j表示,即i=j=sqrt(-1),其值在工作間中都顯示為0+1.0000i。
在MATLAB中,可以通過兩種方法創建復數:一種是直接輸入法;另一種是使用complex()函數。
1.直接輸入法
直接輸入法創建復數的示例如下:
>>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以前的版本中,只有數字才可以與i或者j連接,因此在使用表達式時,要乘以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()函數
complex()函數的調用方法如下:
(1)?c=complex(a,b)。返回結果c為復數,其實部為a,虛部為b。輸入參數a和b可以是標量,或者是維數、大小相同的向量;也可以是矩陣或者多維數組。輸出參數和輸入參數的結構相同。a和b可以有不同的數據類型,當a和b為各種不同的類型時,返回值分別如下:
當a和b中有一個為單精度時,返回結果為單精度;
如果a和b其中一個為整數類型,則另外一個必須有相同的整數類型,或者為雙精度型,返回結果c為相同的整數類型。
>>c1=complex(1,2)
c1=
1.0000+2.0000i
>>c2=complex(1,-2)
c2=
1.0000-2.0000i
(2)?c=complex(a)。只有一個輸入參數,返回結果c為復數,其實部為a,虛部為0。但是此時c的數據類型為復數。
>>c1=complex(2)
c1=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 大學化學分子依據試題及答案
- 新能源汽車的社會影響力與市場前景研究試題及答案
- 大學化學2025年考試試題及答案匯編
- 有效利用資源備戰樂理考試試題及答案
- 成考法學的試題及答案
- 大學物理2025年知識框架與試題答案
- 安徽合肥市九校聯盟2022-2023學年高三年級上學期階段聯考政治 含解析
- 武威市社區工作者招聘真題2024
- 上海市徐匯區2021-2022學年高三二模生物試題 含解析
- 安全工作測試試題及答案
- 21《楊氏之子》公開課一等獎創新教案
- MOOC 農學概論-福建農林大學 中國大學慕課答案
- 無形資產轉讓協議書
- 數字貿易學 課件 第8、9章 數字營商環境、數字貿易生態圈
- 經皮球囊擴瓣術后冠狀動脈急性閉塞查房
- 2023部編版小學語文五年級下冊每課教學反思
- 高級農藝工試題及答案
- T-SHJ X062-2023 電動重型卡車換電站及換電車輛技術要求
- 慢性肝病的綜合管理教學設計
- 山東省汽車維修工時定額(T-SDAMTIA 0001-2023)
- 《小型局域網組建》課件
評論
0/150
提交評論