




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第二章矩陣和數(shù)組2.1概述2.2創(chuàng)建向量2.3創(chuàng)建矩陣2.4索引2.5基本運算2.6稀疏矩陣2.7多維數(shù)組2.8本章小結2.1概述
1.變量和常量變量和常量是編程語言中數(shù)據(jù)類型的表現(xiàn)手段和形式,所以從M語言的角度而言,掌握變量和常量的概念也是掌握M語言編程的基礎。所謂變量,就是指在程序運行過程中需要改變數(shù)值的量,每一個變量都具有一個名字,變量將在內存中占據(jù)一定的空間,以便在程序運行的過程中保存其數(shù)值。M語言和C語言類似,對變量的命名有相應的要求:變量必須以字母開頭,后面可以是字母、數(shù)字或者下劃線的組合。盡管在編寫程序的時候可以使用任意數(shù)量的字符表示變量名,但是MATLAB僅僅識別前面的N個字符,在不同的操作系統(tǒng)下可以識別的字符個數(shù)不盡相同,可以使用namelengthmax函數(shù)察看相應的定義。
所謂常量就是在程序運行的過程中不需要改變數(shù)值的量,例如,在求圓周周長或者圓的面積的時候,需要一個常量π,它的值近似是3.1415927,常量也具有相應的名字,其定義方法和變量一樣。M語言中的常量不像C語言中的常量,一般地在M語言中并不存在常量的定義,任何常量和變量都可以修改其數(shù)值,只不過在MATLAB中提供了一些常用的常數(shù)作為常量,這一點請讀者注意。
2.數(shù)組一般的,數(shù)組是有序數(shù)據(jù)的集合,在大多數(shù)編程語言中,數(shù)組的每一個成員(元素)都屬于同一種數(shù)據(jù)類型,它們使用同一個數(shù)組名稱和不同的下標來惟一確定數(shù)組中的成員(元素)。其中,下標是指數(shù)組元素在數(shù)組中的序號。對于MATLAB而言,大多數(shù)數(shù)據(jù)類型的數(shù)組每一個元素都是同一個數(shù)據(jù)類型的元素,而對于其特殊的元胞數(shù)組則不然。和一般的編程語言類似,M語言的數(shù)組也有一維、二維和多維數(shù)組的區(qū)別。而在MATLAB中一般不存在數(shù)組的數(shù)組,除非在M語言中使用Java數(shù)據(jù)對象。
3.向量從編程語言的角度上看,向量其實就是一維數(shù)組,然而從數(shù)學的角度上看,向量就是1×N或者N×1的矩陣,即行向量或列向量,即
MATLAB的基本運算單位就是矩陣和向量,而M語言本身就是以向量化運算為基礎的編程語言,正因為有如此特點,使用M語言成為了目前最流行的算法開發(fā)和驗證的原型語言。都是一維數(shù)組,但是從數(shù)學的角度上看,分別被稱為列向量和行向量。
4.矩陣在MATLAB中,矩陣的概念就是線性代數(shù)中定義的矩陣的概念——矩陣是用一對圓括號或者方括號括起來,符合一定規(guī)則的數(shù)學對象。例如:就是一個三行三列的方陣。
隨著線性代數(shù)理論的發(fā)展,矩陣和向量的運算在工程領域內越來越普遍,因此對于矩陣運算的實現(xiàn)成為諸多計算機軟件工程師必須解決的問題。對于編程語言,矩陣就是二維的數(shù)組,而由于一般的編程語言僅能處理單個元素的運算,對于矩陣或者向量的處理,很難按照線性代數(shù)的運算法則,將其作為一個整體來處理,從而增加了程序員的工作量,也降低了程序的執(zhí)行效率和開發(fā)周期。于是,誕生了很多專門用于處理矩陣運算的軟件包和算法包,其中,MATLAB軟件就是從EISPACK和LINPAC兩個線性代數(shù)軟件包的基礎上發(fā)展起來的。2.2創(chuàng)建向量
從編程語言的角度上看,向量也就是一維數(shù)組。在MATLAB中創(chuàng)建向量可以使用不同的方法,最直接也最簡單的方法就是逐個輸入向量的元素,見例子2-1。
例子2-1
利用逐個輸入元素的方法在MATLAB中創(chuàng)建向量。在命令行窗口中鍵入:>>x=[13pi3+5i]x=1.00003.00003.14163.0000+5.0000i>>whosName SizeBytesClassx 1x4 64doublearray(complex)在例子2-1中,逐個輸入向量的元素,創(chuàng)建了一個向量x,其中需要注意,pi為MATLAB中內建的常量,表示常量π。使用逐個元素輸入的方法創(chuàng)建向量的時候,元素彼此之間可以使用空格或者逗號“,”作為間隔符。第二種創(chuàng)建向量的方法可以利用運算符——“:”,參閱例子2-2。
例子2-2
利用冒號運算符創(chuàng)建向量。在命令行窗口中鍵入:>>x=1:10x=12345678910>>whosName SizeBytesClassx 1x1080doublearray
在例子2-2中使用冒號運算符創(chuàng)建了具有10個元素的向量。利用冒號運算符創(chuàng)建向量的基本語法如下:
X=J:INC:K
其中*J為向量的第一個元素,而K為向量的最后一個元素,INC為向量元素遞增的步長;*J、INC和K之間必須用“:”間隔;*若在表達式中忽略INC(如例子2-2所示),則默認的遞增步長為1;*INC可以為正數(shù)也可以為負數(shù),若INC為正數(shù),則必須J<K,若INC為負數(shù),則必須J>K,否則創(chuàng)建的為空向量。例子2-3
使用冒號運算符創(chuàng)建向量。在命令行窗口中鍵入:>>x=1:0.01:1.1x=Columns1through61.00001.01001.02001.03001.04001.0500Columns7through111.06001.07001.08001.09001.1000
創(chuàng)建向量的第三種方法是使用函數(shù)linspace和logspace。
linspace是用來創(chuàng)建線性間隔向量的函數(shù),函數(shù)linspace的基本語法為
x=linspace(x1,x2,n)其中
x1為向量的第一個元素,x2為向量的最后一個元素,n為向量具有的元素個數(shù),函數(shù)將根據(jù)n的數(shù)值平均計算元素之間的間隔,間隔的計算公式為:若在表達式中忽略參數(shù)n,則系統(tǒng)默認地將向量設置為100個元素。函數(shù)的具體使用方法參見例子2-4。
例子2-4
使用linspace函數(shù)創(chuàng)建向量。>>x=linspace(1,2,5)x= 1.00001.25001.50001.75002.0000
在本例子中,使用linspace函數(shù)創(chuàng)建了一個具有五個元素的向量,而元素之間彼此的間隔為 。另外一個函數(shù)logspace被用來創(chuàng)建對數(shù)空間的向量,該函數(shù)的基本語法為x=logspace(x1,x2,n)其中:*該函數(shù)創(chuàng)建的向量第一個元素值為x1,而最后一個元素的數(shù)值為x2,n為向量的元素個數(shù),元素彼此之間的間隔按照對數(shù)空間的間隔設置;*若在表達式中忽略參數(shù)n,則參數(shù)默認地將向量設置為50個元素。該函數(shù)的使用參見例子2-5。
例子2-5使用logspace函數(shù)創(chuàng)建向量。在MATLAB的命令行窗口中鍵入下面的指令:>>x=logspace(1,3,3)x=1.0e+003*
0.01000.03160.10000.31621.0000
上面創(chuàng)建的向量都是行向量,也就是說,創(chuàng)建的都是一行n列的二維數(shù)組(n表示元素的個數(shù)),如果需要創(chuàng)建列向量,即n行一列的二維數(shù)組(n表示元素的個數(shù)),則需要使用分號作為元素與元素之間的間隔或者直接使用轉置運算符“'”,參見例子2-6。例子2-6
創(chuàng)建列向量。直接輸入元素的方法創(chuàng)建列向量>>A=[1;2;3;4;5;6]A=123456使用轉置的方法創(chuàng)建列向量>>B=(1:6)'B=123456>>whosNameSizeBytesClassA6x1 48doublearrayB6x1 48doublearray2.3創(chuàng)建矩陣2.3.1直接輸入法例子2-7用直接輸入矩陣元素的方法創(chuàng)建矩陣。在MATLAB的命令行窗口中鍵入下面的指令:>>A=[123;456;789]A=123456789>>whosNameSizeBytesClassA
3x3
72doublearrayGrandtotalis9elementsusing72bytes
在上面的例子中創(chuàng)建了一個3×3的矩陣,在創(chuàng)建矩陣的時候,需要注意:*整個矩陣的元素必須在“[]”中鍵入;*矩陣的元素行與行之間需要使用分號“;”間隔,也可以在需要分行的地方用回車鍵間隔;*矩陣的元素之間可以使用逗號“,”或者空格間隔。其實創(chuàng)建上面的矩陣時還可以這么做>>B=[1:3;4:6;7:9]B=1234567892.3.2工作空間數(shù)組編輯器前文的例子中使用whos指令來察看當前MATLAB會話保存在工作空間內存中的各種變量,此外,還可以使用工作空間瀏覽器察看工作空間中包含的各種變量,圖2-1所示為執(zhí)行了例子2-7之后的工作空間瀏覽器。圖2-1MATLAB的工作空間瀏覽器從工作空間瀏覽器中可以看到變量A的基本內容以及矩陣中的最大元素數(shù)值和最小元素數(shù)值。如果變量所包含的元素數(shù)量較多,則無法顯示相應的內容,例如:>>B=1:20000;>>whosNameSizeBytesClassAttributesA3x372doubleB1x20000160000double此時在工作空間瀏覽器中能夠看到的是變量B相應的尺寸以及元素的數(shù)據(jù)類型,如圖2-2所示。
圖2-2工作空間瀏覽器的快捷菜單在MATLAB的工作空間瀏覽器中可以看到更加豐富的內容,單擊View菜單,可以看到ChooseColumns子菜單下具有很多菜單命令,分別執(zhí)行這些命令,可以在工作空間瀏覽器中選擇查看變量的尺寸(Size)、占用的內存空間(Bytes)、數(shù)據(jù)類型(Class)、數(shù)據(jù)范圍(Range)等,如圖2-3所示。工作空間瀏覽器并不是能夠顯示所有變量的信息,如果變量所包含的元素過多則無法顯示相應的變量統(tǒng)計信息,可以通過MATLAB的屬性設置對話框設置有關工作空間瀏覽器的相應內容,如圖2-4所示。
圖2-3選擇工作空間瀏覽器中的變量信息
圖2-4設置工作空間瀏覽器的屬性
工作空間瀏覽器不僅能夠顯示變量的信息,還可以通過交互式工具來實現(xiàn)在工作空間中變量的可視化操作,例如選擇相應變量后,通過右鍵快捷菜單或者工具欄上的工具來實現(xiàn)不同方式的數(shù)據(jù)可視化工作。具體的可視化操作將在本書第六章中詳細介紹。此外,還可以在工作空間瀏覽器中對矩陣或者向量進行編輯,也可以實現(xiàn)刪除、重命名工作空間的變量等操作。相應的操作可以通過右鍵快捷菜單中相應的命令來實現(xiàn),如圖2-5所示。
圖2-5工作空間瀏覽器中變量的右鍵快捷菜單
2.3.3數(shù)組編輯器在圖2-5所示的工作空間瀏覽器變量右鍵快捷菜單中可以看到EditValue指令,執(zhí)行該指令,可以直接在工作空間瀏覽器中對矩陣變量等進行簡單的編輯工作。不過這種編輯對那些元素數(shù)量較少的簡單變量比較方便,然而當變量包含的元素數(shù)量較多時,對矩陣或者向量元素的編輯就需要通過數(shù)組編輯器來完成了。
對矩陣或者向量元素的編輯可以通過數(shù)組編輯器來完成,調用數(shù)組編輯器有以下幾種不同的方法:第一種,首先選擇工作空間瀏覽器中的變量,然后單擊工作空間瀏覽器工具欄中的按鈕,這時系統(tǒng)將運行數(shù)組編輯器,同時在編輯器中加載變量。在用鼠標選擇工作空間中的變量時,可以按住Ctrl鍵或者Shift鍵選擇多個變量,同樣也可以使用快捷鍵Ctrl+A選擇工作空間中的所有變量。第二種方法是在工作空間瀏覽器中直接雙擊變量,也可以運行數(shù)組編輯器,同時在編輯器中加載變量。
第三種方法就是通過工作空間瀏覽器中的快捷菜單命令Open來完成同樣的工作。第四種方法是直接在MATLAB命令行窗口中鍵入如下指令:
>>openvarA
也可以在數(shù)組編輯器中打開變量A。打開矩陣A的數(shù)組編輯器界面如圖2-6所示。圖2-6在數(shù)組編輯器中編輯矩陣
前文提及,在命令行窗口中直接輸入元素較多的向量或者矩陣時比較麻煩,所以,可以利用數(shù)組編輯器完成大矩陣的編輯,具體方法如下:首先在命令行窗口中創(chuàng)建一個新的變量,可以為這個變量賦任意的數(shù)值,例如在MATLAB的命令行窗口中鍵入:A=1。然后通過工作空間瀏覽器打開數(shù)組編輯器,并在數(shù)組編輯器中加載相應的變量。在數(shù)組編輯器的工具欄中,分別修改矩陣的行數(shù)和列數(shù),例如設置矩陣的行、列數(shù)分別為14行、15列,則數(shù)組編輯器將自動擴充矩陣,將未定義的元素賦初值為0,這時就可以雙擊任意元素來修改矩陣的元素值了,如圖2-7所示,即逐個修改必要的元素,完成矩陣的定義。圖2-7利用數(shù)組編輯器定義矩陣
就像在MATLAB命令行窗體中顯示數(shù)據(jù)一樣,在數(shù)組編輯器中可以使用多種格式來顯示數(shù)組中的數(shù)據(jù),就好像使用format指令一樣。通過數(shù)字編輯器View菜單下NumericArrayFormat子菜單中相應的命令選擇不同的數(shù)據(jù)顯示方法,如圖2-8所示。
圖2-8設置數(shù)據(jù)顯示的方式
例如選擇Bank格式時,數(shù)據(jù)顯示的情況如圖2-9所示。
圖2-9以Bank格式顯示數(shù)據(jù)
此外,還有一種創(chuàng)建大矩陣的方法就是利用M語言的腳本文件,關于腳本文件創(chuàng)建矩陣的方法在第4章中詳細講述??梢栽跀?shù)組編輯器中同時打開多個變量,在工作空間瀏覽器中用鼠標選擇變量時,可以按住Ctrl鍵或者Shift鍵選擇多個變量,同樣也可以使用快捷鍵Ctrl+A選擇工作空間中所有的變量。然后通過前面介紹的方法打開數(shù)組編輯器,例如圖2-10所示,此時的數(shù)組編輯器打開了兩個變量,請讀者注意查看數(shù)組編輯器下部的變量列表欄。
圖2-10同時編輯多個變量
其實從MATLABRelease14即MATLAB7.0開始,MATLAB的數(shù)組編輯器有了很大改進,例如突破了老版本MATLAB數(shù)組編輯器對64KB字節(jié)內存空間的限制。從操作方面來說,MATLAB的數(shù)組編輯器與MicrosoftExcel很接近,也可以直接從Excel電子表格中將數(shù)據(jù)直接拷貝粘貼到MATLAB的數(shù)組編輯器中。而在編輯多個變量時,可以通過變量列表欄的快捷菜單,對數(shù)組編輯器的外觀進行編輯操作,例如圖2-11所示。
圖2-11數(shù)組編輯器變量列表欄的快捷菜單
通過Alphabetize命令可以將不同的變量頁按照字母序排序,Move…OnBar命令可以將當前的變量頁按照相應的方向依次移動。同樣,在BarPosition菜單下的命令可以決定變量列表欄的具體位置,默認位置在數(shù)組編輯器的底部(Bottom)。在數(shù)組編輯器中實現(xiàn)數(shù)據(jù)可視化操作的內容將在第6章詳細介紹,用戶也可以仔細閱讀MATLAB幫助文檔中的相關內容。
2.4索引2.4.1向量元素的訪問訪問向量的元素只要使用相應元素的索引即可,請參閱下面的例子2-8。在例子2-8中操作對象是一個向量,該向量為A=[1234567890]。例子2-8訪問向量中的元素。在MATLAB的命令行窗口中鍵入下面的指令:>>%訪問向量的第三個元素>>A(3)ans=3訪問向量的第一、三、七個元素:>>A([137])ans=137>>%訪問向量的第一、三、五個元素>>A([1:3:5])ans=135>>%訪問向量的最后四個元素>>A([end-3:end])ans=7890>>%重復訪問向量中的元素>>A([1:5,5:-1:1])ans=1234554321
說明:*訪問向量元素的結果是創(chuàng)建新的向量。*訪問向量的元素直接給出元素在向量中的序號,元素的序號不僅可以是單一的整數(shù),還可以是元素序號組成的向量,如例子2-8中的各種操作。*關鍵字end在訪問向量元素時,表示向量中最后一個元素的序號。*訪問向量元素時,序號的數(shù)值必須介于數(shù)值1~end之間??梢酝ㄟ^訪問元素的方法,對具體的元素賦值,參見例子2-9。例子2-9對向量的元素進行賦值。在MATLAB命令行窗口中鍵入下面的指令:>>%對向量的第三個元素賦值>>A(3)=-3A=12-34567890>>%對向量中不存在的數(shù)據(jù)賦值>>A(15)=-15A=Columns1through1012-34567890Columns11through150000-15
說明:在例子2-9中,對向量的第15個元素賦值,在賦值之前向量的第11~15個元素不存在,但是在賦值之后,將自動創(chuàng)建這些元素,并且為沒有明確賦值的元素賦默認值0,這就是MATLAB的數(shù)據(jù)自動擴充和初始化機制。2.4.2矩陣元素的訪問訪問矩陣的元素也需要使用矩陣元素的索引,不過具有兩種方式,第一種方式是使用矩陣元素的行列全下標形式,第二種方法是使用矩陣元素的單下標形式,參閱例子2-10。例子2-10訪問矩陣的元素。
MATLAB工作空間中具有一個5×5的矩陣,該矩陣是五階的幻方,通過命令行獲取矩陣的第二行、第四列的元素,于是在MATLAB命令行窗口中鍵入下面的指令:>>%創(chuàng)建矩陣>>A=magic(5)A=17241815235714164613202210121921311182529使用全下標的形式訪問元素:>>A(2,4)ans=14使用單下標的形式訪問元素:>>A(17)ans=14
說明:*使用了MATLAB函數(shù)magic創(chuàng)建幻方。所謂幻方,就是n階的方陣,該方陣的行元素和列元素的和都相等。*使用全下標的形式訪問矩陣元素的方法簡單、直接,同線性代數(shù)的矩陣元素的概念一一對應。*矩陣元素的單下標是矩陣元素在內存中存儲的序列號,一般地,同一個矩陣的元素存儲在連續(xù)的內存單元中。*矩陣元素的單下標與全下標之間的轉換關系如下,以的矩陣為例,該矩陣的第i行第j列的元素全下標表示為單下標l=(j-1)×m+i。
注意:
MATLAB的矩陣元素的排列以列元素優(yōu)先,這一點同F(xiàn)ORTRAN語言的二維數(shù)組元素的排列方法一致,與C語言的二維數(shù)組元素的排列不同,C語言的二維數(shù)組元素排列以行元素優(yōu)先。為了方便全下標和單下標之間的轉換,MATLAB提供了兩個函數(shù)分別完成兩者之間的相互轉化:*sub2ind:根據(jù)全下標計算單下標。*ind2sub:根據(jù)單下標計算全下標。表2-1使用索引訪問矩陣元素的方法例子2-11
用不同的方法訪問矩陣的元素。在MATLAB命令行中鍵入下面的指令:創(chuàng)建矩陣:>>A=1:25;>>A=reshape(A,5,5)A=16111621271217223813182349141924510152025訪問矩陣的第三行第一列元素:>>A(3,1)或A(3)ans=3訪問矩陣第三行的所有元素:>>A(3,:)ans=38131823訪問矩陣第四列的所有元素:>>A(:,4)ans=1617181920訪問矩陣的最后一行元素:>>A(end,:)ans=510152025獲取矩陣的子矩陣:>>I=[135];J=[24];>>A(I,J)ans=61681810202.5基本運算2.5.1矩陣生成函數(shù)表2-2MATLAB的矩陣生成函數(shù)例子2-12
矩陣生成函數(shù)的示例。在MATLAB命令行中鍵入下面的指令:創(chuàng)建三階帕斯卡矩陣:>>A=pascal(3)A=111123136從矩陣A生成下三角矩陣:>>tril(A)ans=100120136獲取矩陣A的對角線元素:>>diag(A)ans=126利用向量生成對角矩陣:>>diag(ans)ans=1000200062.5.2基本矩陣運算針對矩陣的運算MATLAB提供了若干函數(shù)和基本的運算規(guī)則,這些規(guī)則和函數(shù)都分別和線性代數(shù)的基本概念和運算規(guī)則對應。矩陣的基本運算參見表2-3。表2-3矩陣的基本運算提示:在MATLAB中,獲取矩陣(線性代數(shù))的運算函數(shù)列表請在MATLAB命令行窗口中鍵入如下命令:>>helpmatfun在MATLAB命令行窗口中將顯示相應的函數(shù)列表:Matrixfunctions-numericallinearalgebra.Matrixanalysis.norm -Matrixorvectornorm.normest -Estimatethematrix2-norm.…
一般的MATLAB函數(shù)都可以針對矩陣進行運算,但是在前面的help命令行中顯示的函數(shù)是專門針對矩陣和線性代數(shù)運算的函數(shù)。例子2-13
矩陣的基本運算示例——求解方程組。
這類問題可以直接通過矩陣運算解決。在MATLAB命令行窗口中鍵入下面的指令:創(chuàng)建線性方程組的系數(shù)矩陣和向量:>>A=[-112;3-11;-134];>>b=[2;6;4];求解方程,使用矩陣求逆的方法>>x=inv(A)*bx=1.0000-1.00002.0000求解方程,使用矩陣左除運算:>>x=A\bx=1.0000-1.00002.0000
從例子2-13可以看出以矩陣為基本運算單位進行數(shù)值運算的優(yōu)勢。對于MATLAB,矩陣的基本運算都可以用一種最簡單、直觀的表達式完成,像這種利用向量或者矩陣的運算,不僅可以簡化代碼,還能夠提高MATLAB的M語言的運行速度。矩陣的運算同時也包含了矩陣和標量之間的運算,MATLAB在處理這種運算的時候,首先對標量進行擴充,例如:>>w=[12;34]+5w=6789該指令行實際的執(zhí)行過程如下:
w=[12;34]+52.5.3基本數(shù)組運算
1.數(shù)組轉置數(shù)組轉置的操作符是在矩陣轉置操作符前加符號“.”,見例子2-14。例子2-14數(shù)組轉置操作。在MATLAB命令行窗口中,鍵入下面的指令:創(chuàng)建矩陣:>>A=ones(2,3);A(:)=1:6A=135246矩陣轉置:>>A'.ans=123456數(shù)組轉置:>>A'.ans=123456復數(shù)運算,矩陣A成為復數(shù)矩陣:>>A=A*IA=0+1.0000i0+3.0000i0+5.0000i0+2.0000i0+4.0000i0+6.0000i矩陣轉置:>>A'ans=0-1.0000i0-2.0000i0-3.0000i0-4.0000i0-5.0000i0-6.0000i數(shù)組轉置:>>A.'ans=0+1.0000i0+2.0000i0+3.0000i0+4.0000i0+5.0000i0+6.0000i
從例子2-14可以看出,對于實數(shù)矩陣,矩陣轉置和數(shù)組轉置的計算結果是一致的,但是對于復數(shù)矩陣,數(shù)組轉置和矩陣轉置的計算結果就不一致。所以,對于數(shù)組轉置運算也被稱為非共軛轉置,矩陣轉置運算則被稱為共軛轉置。
2.數(shù)組冪數(shù)組冪運算符就是在矩陣冪運算符前加上符號“.”,見例子2-15。例子2-15數(shù)組冪運算。在MATLAB命令行中,鍵入下面的指令:本例子中使用的矩陣:>>AA=0+1.0000i0+3.0000i0+5.0000i0+2.0000i0+4.0000i0+6.0000i矩陣冪運算:>>A^3???Errorusing==>^Matrixmustbesquare.數(shù)組冪運算:>>A.^3ans=1.0e+002*
0-0.0100i0-0.2700i0-1.2500i0-0.0800i0-0.6400i0-2.1600i
3.數(shù)組乘法和前面兩種運算類似,數(shù)組乘法運算符是在矩陣乘法運算符前加上符號“.”,見例子2-16。例子2-16數(shù)組乘法示例。在MATLAB命令行中,鍵入下面的指令:本例子中使用的矩陣>>AA=0+1.0000i0+3.0000i0+5.0000i0+2.0000i0+4.0000i0+6.0000i矩陣乘法:>>A*5ans=0+5.0000i0+15.0000i0+25.0000i0+10.0000i0+20.0000i0+30.0000i數(shù)組乘法:>>A.*5ans=0+5.0000i0+15.0000i0+25.0000i0+10.0000i0+20.0000i0+30.0000i矩陣乘法:>>A*A'ans=35444456數(shù)組乘法:>>A.*Aans=-1-9-25-4-16-362.5.4基本數(shù)學函數(shù)在MATLAB中有部分函數(shù)可以用來進行基本的數(shù)學運算,主要有如下類別:三角函數(shù)(見表2-4)、指數(shù)運算函數(shù)(見表2-5)、復數(shù)運算函數(shù)(見表2-6)、圓整和求余函數(shù)(見表2-7)。需要注意的是這些函數(shù)的參數(shù)可以是矩陣也可以是向量或者多維數(shù)組,函數(shù)在處理參數(shù)時,都是按照數(shù)組運算的規(guī)則來進行的,也就是說對于 的矩陣 ,函數(shù)f(●)的運算指。表2-4三角函數(shù)表2-5指數(shù)運算函數(shù)
說明:以real開頭的函數(shù)僅能處理實數(shù),如輸入的參數(shù)為復數(shù),則MATLAB會報錯。函數(shù)nextpow2是用來計算僅僅比輸入?yún)?shù)大的第一個2的冪,例如輸入?yún)?shù)為N,則函數(shù)的計算結果整數(shù)P需要滿足的條件為2P≥abs(N)≥2P-1。表2-6復數(shù)運算表2-7圓整和求余函數(shù)例子2-17MATLAB的圓整和求余函數(shù)。在MATLAB的命令行中,鍵入下面的指令:>>fix(-1.9)ans=-1>>floor(-1.9)ans=-2>>round(-1.9)ans=-2>>ceil(-1.9)ans=-1
上面比較了四種圓整函數(shù)處理同一個數(shù)據(jù)的結果,在使用不同的取整函數(shù)時要注意各個函數(shù)的特點。其實這四種圓整函數(shù)之間的區(qū)別主要是進行圓整運算時,趨近的方向不盡相同。例如fix函數(shù)是將數(shù)據(jù)向0的方向趨近,而floor函數(shù)是向無窮大的方向上趨近。>>mod(9,-2)ans=-1>>rem(9,-2)ans=12.5.5矩陣(數(shù)組)操作函數(shù)在前面的小節(jié)中主要介紹了進行數(shù)學運算的MATLAB函數(shù),在MATLAB中還存在一類函數(shù)用來獲取矩陣或者數(shù)組的信息,以及對數(shù)組進行操作,在表2-8中列舉了較常用的函數(shù)。完整的函數(shù)列表內容可以在MATLAB命令行中鍵入helpelmat指令來察看。表2-8用于矩陣(數(shù)組)操作的常用函數(shù)
例子2-18reshape函數(shù)的使用示例。在前面的例子2-11中曾經使用過reshape函數(shù),這里將詳細討論該函數(shù)的使用方法,在MATLAB命令行中,鍵入下面的指令:>>A=1:8A=12345678>>B=reshape(A,2,4)B=13572468>>C=reshape(B,3,3)???Errorusing==>reshapeToRESHAPEthenumberofelementsmustnotchange.例子2-19
對稱交換函數(shù)的使用示例。在MATLAB命令行中,鍵入下面的指令:>>A=reshape(1:9,3,3)A=147258369>>fliplr(A)ans=741852963>>flipud(A)ans=369258147>>flipdim(A,1)ans=369258147>>flipdim(A,2)ans=741852963
在生成比較復雜的矩陣時,可以使用MATLAB提供的矩陣擴展方法完成相應矩陣的構造。假設矩陣A為三階方陣,B為二階方陣,由矩陣A和B組合構成五階方陣 ,其中O為相應的零矩陣,具體的創(chuàng)建方法見例子2-20。例子2-20
創(chuàng)建復雜矩陣。在MATLAB命令行中,鍵入下面的指令:>>A=reshape(1:9,3,3);>>B=[12;34];>>O=zeros(length(A),length(B))O=000000>>C=[AO;O'B]C=1470025800369000001200034例子2-21使用方括號創(chuàng)建復雜矩陣。在MATLAB命令行中,鍵入下面的指令:>>A=[12;34];>>B=[A,A*2;tril(A),triu(A);A*3,A*4]B=122434681012340436489121216例子2-22
函數(shù)repmat的應用示例。>>repmat(magic(2),2,3)ans=131313424242131313424242repmat函數(shù)的基本語法為repmat(A,M,N),它的作用是將指定的矩陣A復制次,然后創(chuàng)建一個復雜的大矩陣,結果為 ,因此,在例子2-22中,將一個簡單的二行二列的矩陣進行了六次重復,創(chuàng)建了四行六列的大矩陣。2.6稀疏矩陣
矩陣元素的表示方法是計算機數(shù)據(jù)結構理論中經常討論的話題,因為在實際工作中,經常遇到這樣一類矩陣,這類矩陣中數(shù)值為0的元素居多,這類矩陣一般被稱為稀疏矩陣。如果使用滿陣的方式來表示稀疏矩陣,則0元素將占用相當?shù)膬却婵臻g,特別是在MATLAB中,由于MATLAB默認的數(shù)據(jù)類型是雙精度類型,每一個雙精度類型的數(shù)據(jù)元素都要占用八個字節(jié)的內存空間,當0元素很多的時候將占用相當可觀的內存空間,因此,在MATLAB中,專門提供了稀疏矩陣的表示方法。例子2-23
創(chuàng)建稀疏矩陣。在MATLAB命令行窗口中鍵入下面的指令:>>A=eye(5)A=1000001000001000001000001>>B=sparse(A)B=(1,1)1(2,2)1(3,3)1(4,4)1(5,5)1>>whosNameSizeBytesClassA5x5200doublearrayB5x584doublearray(sparse)Grandtotalis30elementsusing284bytes
在例子2-23中,首先使用eye函數(shù)創(chuàng)建了五階的單位矩陣,五階單位方陣一共有25個元素,其中卻有20個元素是0,于是使用sparse函數(shù)將該函數(shù)構造成為稀疏矩陣,這樣就得到了矩陣B。通過whos指令可以清晰地比較兩個矩陣占用的內存空間,A矩陣占用了200個字節(jié),而B矩陣僅占用了84個字節(jié)。稀疏矩陣和普通矩陣(滿陣)之間可以直接進行運算,例如>>A+Bans=2000002000002000002000002
這里運算得到的結果是一個滿陣,請讀者在進行稀疏矩陣運算的時候注意。
MATLAB中使用“三元組”表示法來表示稀疏矩陣,該表示方法一般由三個向量組成:第一個向量是由矩陣中非零元素組成的向量,其長度一般為nzmax,即矩陣中所有非零元素的個數(shù);第二個向量是非零元素的行序號,該向量的長度也為nzmax;第三個向量是非零元素的列序號,該向量的長度也為nzmax。例如對于下面的稀疏矩陣:因此,表示矩陣的三個向量分別為
>>data=6?15];>>ir=[15226131];>>jc=[11233446];利用上面的三個矩陣和sparse函數(shù)創(chuàng)建六行六列的稀疏矩陣:>>S=sparse(ir,jc,data,6,6)S=(1,1)15(5,1)91(2,2)11(2,3)3(6,3)28(1,4)22(3,4)-6(1,6)-15>>%將該矩陣還原成滿陣>>full(S)ans=1500220-150113000000-60000000091000000028000>>whosName SizeBytesClassS 6x6 124doublearray(sparse)ans 6x6 288doublearraydata 1x8 64doublearrayir 1x8 64doublearrayjc 1x8 64doublearrayGrandtotalis68elementsusing604bytes
注意:在不同的語言或者數(shù)學計算工具軟件中,表示稀疏矩陣的方法可能不盡相同,請讀者仔細查閱相應軟件的幫助文檔。
MATLAB專門提供了若干函數(shù)用于稀疏矩陣的運算,在表2-9中對這些函數(shù)進行了總結。提示:在MATLAB命令行窗口中鍵入指令helpsparfun可以得到稀疏矩陣運算函數(shù)的列表。表2-9稀疏矩陣的常用函數(shù)2.7多維數(shù)組2.7.1創(chuàng)建多維數(shù)組多維數(shù)組的創(chuàng)建也有多種方法:第一種方法是使用直接賦值的方法來創(chuàng)建;第二種方法是使用部分MATLAB的函數(shù)創(chuàng)建多維數(shù)組。具體的做法結合例子講述。
例子2-24
使用直接賦值的方法創(chuàng)建多維數(shù)組。在MATLAB的命令行中,鍵入下面的指令:>>A=pascal(4)A=1111123413610141020>>A(:,:,2)=eye(4)A(:,:,1)=1111123413610141020A(:,:,2)=1000010000100001>>A(:,:,3)=magic(5)???Subscriptedassignmentdimensionmismatch.
在例子2-24中,首先創(chuàng)建了一個矩陣——帕斯卡矩陣,也可以將其看作二維數(shù)組,然后,使用全下標的形式創(chuàng)建了三維數(shù)組的第二頁,第二頁上的矩陣是一個單位陣,接著在創(chuàng)建新的一頁時使用了五階方陣作為輸入,由于維數(shù)不匹配所以系統(tǒng)報錯。例子2-25
使用直接賦值的方法創(chuàng)建多維數(shù)組。在MATLAB的命令行中,鍵入下面的指令:>>B(3,3,3)=1B(:,:,1)=000000000B(:,:,2)=000000000B(:,:,3)=000000001例子2-26
使用函數(shù)創(chuàng)建多維數(shù)組。在MATLAB命令行中,鍵入下面的指令:>>rand(3,3,3)ans(:,:,1)=0.95010.48600.45650.23110.89130.01850.60680.76210.8214ans(:,:,2)=0.44470.92180.40570.61540.73820.93550.79190.17630.9169ans(:,:,3)=0.41030.35290.1389
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025裝修合同北京范本
- 2025標準房屋買賣合同
- 2025房產交易補充合同條款
- 2025有關代理參展訂貨合同模板
- 店鋪拆除承攬合同范本
- 地皮出售協(xié)議合同范本
- 2017林地流轉合同范本
- 廣告產品購銷合同范本
- 工地工程的合同范本
- 2025濟南市肉雞委托飼養(yǎng)合同書
- 足少陰腎經試題及答案
- 眼科OCT基礎知識課件
- 2025-2030中國還原鐵粉行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 2024年《防治煤與瓦斯突出細則》培訓課件
- 經皮腎術后護理試題及答案
- 河南航空港發(fā)展投資集團招聘筆試真題2024
- 烤煙種植與管理技術精粹
- 財政投資評審咨詢服務預算和結算評審項目投標文件(技術方案)
- 《半年度工作總結與規(guī)劃》課件
- 《稻田養(yǎng)鴨技術》課件
- 污水處理設施運維服務投標方案(技術標)
評論
0/150
提交評論