《MATLAB基礎(chǔ)與編程入門》課件第2章_第1頁(yè)
《MATLAB基礎(chǔ)與編程入門》課件第2章_第2頁(yè)
《MATLAB基礎(chǔ)與編程入門》課件第2章_第3頁(yè)
《MATLAB基礎(chǔ)與編程入門》課件第2章_第4頁(yè)
《MATLAB基礎(chǔ)與編程入門》課件第2章_第5頁(yè)
已閱讀5頁(yè),還剩119頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第二章矩陣和數(shù)組2.1概述2.2創(chuàng)建向量2.3創(chuàng)建矩陣2.4索引2.5基本運(yùn)算2.6稀疏矩陣2.7多維數(shù)組2.8本章小結(jié)2.1概述

1.變量和常量變量和常量是編程語(yǔ)言中數(shù)據(jù)類型的表現(xiàn)手段和形式,所以從M語(yǔ)言的角度而言,掌握變量和常量的概念也是掌握M語(yǔ)言編程的基礎(chǔ)。所謂變量,就是指在程序運(yùn)行過(guò)程中需要改變數(shù)值的量,每一個(gè)變量都具有一個(gè)名字,變量將在內(nèi)存中占據(jù)一定的空間,以便在程序運(yùn)行的過(guò)程中保存其數(shù)值。M語(yǔ)言和C語(yǔ)言類似,對(duì)變量的命名有相應(yīng)的要求:變量必須以字母開(kāi)頭,后面可以是字母、數(shù)字或者下劃線的組合。盡管在編寫程序的時(shí)候可以使用任意數(shù)量的字符表示變量名,但是MATLAB僅僅識(shí)別前面的N個(gè)字符,在不同的操作系統(tǒng)下可以識(shí)別的字符個(gè)數(shù)不盡相同,可以使用namelengthmax函數(shù)察看相應(yīng)的定義。

所謂常量就是在程序運(yùn)行的過(guò)程中不需要改變數(shù)值的量,例如,在求圓周周長(zhǎng)或者圓的面積的時(shí)候,需要一個(gè)常量π,它的值近似是3.1415927,常量也具有相應(yīng)的名字,其定義方法和變量一樣。M語(yǔ)言中的常量不像C語(yǔ)言中的常量,一般地在M語(yǔ)言中并不存在常量的定義,任何常量和變量都可以修改其數(shù)值,只不過(guò)在MATLAB中提供了一些常用的常數(shù)作為常量,這一點(diǎn)請(qǐng)讀者注意。

2.?dāng)?shù)組一般的,數(shù)組是有序數(shù)據(jù)的集合,在大多數(shù)編程語(yǔ)言中,數(shù)組的每一個(gè)成員(元素)都屬于同一種數(shù)據(jù)類型,它們使用同一個(gè)數(shù)組名稱和不同的下標(biāo)來(lái)惟一確定數(shù)組中的成員(元素)。其中,下標(biāo)是指數(shù)組元素在數(shù)組中的序號(hào)。對(duì)于MATLAB而言,大多數(shù)數(shù)據(jù)類型的數(shù)組每一個(gè)元素都是同一個(gè)數(shù)據(jù)類型的元素,而對(duì)于其特殊的元胞數(shù)組則不然。和一般的編程語(yǔ)言類似,M語(yǔ)言的數(shù)組也有一維、二維和多維數(shù)組的區(qū)別。而在MATLAB中一般不存在數(shù)組的數(shù)組,除非在M語(yǔ)言中使用Java數(shù)據(jù)對(duì)象。

3.向量從編程語(yǔ)言的角度上看,向量其實(shí)就是一維數(shù)組,然而從數(shù)學(xué)的角度上看,向量就是1×N或者N×1的矩陣,即行向量或列向量,即

MATLAB的基本運(yùn)算單位就是矩陣和向量,而M語(yǔ)言本身就是以向量化運(yùn)算為基礎(chǔ)的編程語(yǔ)言,正因?yàn)橛腥绱颂攸c(diǎn),使用M語(yǔ)言成為了目前最流行的算法開(kāi)發(fā)和驗(yàn)證的原型語(yǔ)言。都是一維數(shù)組,但是從數(shù)學(xué)的角度上看,分別被稱為列向量和行向量。

4.矩陣在MATLAB中,矩陣的概念就是線性代數(shù)中定義的矩陣的概念——矩陣是用一對(duì)圓括號(hào)或者方括號(hào)括起來(lái),符合一定規(guī)則的數(shù)學(xué)對(duì)象。例如:就是一個(gè)三行三列的方陣。

隨著線性代數(shù)理論的發(fā)展,矩陣和向量的運(yùn)算在工程領(lǐng)域內(nèi)越來(lái)越普遍,因此對(duì)于矩陣運(yùn)算的實(shí)現(xiàn)成為諸多計(jì)算機(jī)軟件工程師必須解決的問(wèn)題。對(duì)于編程語(yǔ)言,矩陣就是二維的數(shù)組,而由于一般的編程語(yǔ)言僅能處理單個(gè)元素的運(yùn)算,對(duì)于矩陣或者向量的處理,很難按照線性代數(shù)的運(yùn)算法則,將其作為一個(gè)整體來(lái)處理,從而增加了程序員的工作量,也降低了程序的執(zhí)行效率和開(kāi)發(fā)周期。于是,誕生了很多專門用于處理矩陣運(yùn)算的軟件包和算法包,其中,MATLAB軟件就是從EISPACK和LINPAC兩個(gè)線性代數(shù)軟件包的基礎(chǔ)上發(fā)展起來(lái)的。2.2創(chuàng)建向量

從編程語(yǔ)言的角度上看,向量也就是一維數(shù)組。在MATLAB中創(chuàng)建向量可以使用不同的方法,最直接也最簡(jiǎn)單的方法就是逐個(gè)輸入向量的元素,見(jiàn)例子2-1。

例子2-1

利用逐個(gè)輸入元素的方法在MATLAB中創(chuàng)建向量。在命令行窗口中鍵入:>>x=[13pi3+5i]x=1.00003.00003.14163.0000+5.0000i>>whosName SizeBytesClassx 1x4 64doublearray(complex)在例子2-1中,逐個(gè)輸入向量的元素,創(chuàng)建了一個(gè)向量x,其中需要注意,pi為MATLAB中內(nèi)建的常量,表示常量π。使用逐個(gè)元素輸入的方法創(chuàng)建向量的時(shí)候,元素彼此之間可以使用空格或者逗號(hào)“,”作為間隔符。第二種創(chuàng)建向量的方法可以利用運(yùn)算符——“:”,參閱例子2-2。

例子2-2

利用冒號(hào)運(yùn)算符創(chuàng)建向量。在命令行窗口中鍵入:>>x=1:10x=12345678910>>whosName SizeBytesClassx 1x1080doublearray

在例子2-2中使用冒號(hào)運(yùn)算符創(chuàng)建了具有10個(gè)元素的向量。利用冒號(hào)運(yùn)算符創(chuàng)建向量的基本語(yǔ)法如下:

X=J:INC:K

其中*J為向量的第一個(gè)元素,而K為向量的最后一個(gè)元素,INC為向量元素遞增的步長(zhǎng);*J、INC和K之間必須用“:”間隔;*若在表達(dá)式中忽略INC(如例子2-2所示),則默認(rèn)的遞增步長(zhǎng)為1;*INC可以為正數(shù)也可以為負(fù)數(shù),若INC為正數(shù),則必須J<K,若INC為負(fù)數(shù),則必須J>K,否則創(chuàng)建的為空向量。例子2-3

使用冒號(hào)運(yùn)算符創(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是用來(lái)創(chuàng)建線性間隔向量的函數(shù),函數(shù)linspace的基本語(yǔ)法為

x=linspace(x1,x2,n)其中

x1為向量的第一個(gè)元素,x2為向量的最后一個(gè)元素,n為向量具有的元素個(gè)數(shù),函數(shù)將根據(jù)n的數(shù)值平均計(jì)算元素之間的間隔,間隔的計(jì)算公式為:若在表達(dá)式中忽略參數(shù)n,則系統(tǒng)默認(rèn)地將向量設(shè)置為100個(gè)元素。函數(shù)的具體使用方法參見(jiàn)例子2-4。

例子2-4

使用linspace函數(shù)創(chuàng)建向量。>>x=linspace(1,2,5)x= 1.00001.25001.50001.75002.0000

在本例子中,使用linspace函數(shù)創(chuàng)建了一個(gè)具有五個(gè)元素的向量,而元素之間彼此的間隔為 。另外一個(gè)函數(shù)logspace被用來(lái)創(chuàng)建對(duì)數(shù)空間的向量,該函數(shù)的基本語(yǔ)法為x=logspace(x1,x2,n)其中:*該函數(shù)創(chuàng)建的向量第一個(gè)元素值為x1,而最后一個(gè)元素的數(shù)值為x2,n為向量的元素個(gè)數(shù),元素彼此之間的間隔按照對(duì)數(shù)空間的間隔設(shè)置;*若在表達(dá)式中忽略參數(shù)n,則參數(shù)默認(rèn)地將向量設(shè)置為50個(gè)元素。該函數(shù)的使用參見(jiàn)例子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)建的向量都是行向量,也就是說(shuō),創(chuàng)建的都是一行n列的二維數(shù)組(n表示元素的個(gè)數(shù)),如果需要?jiǎng)?chuàng)建列向量,即n行一列的二維數(shù)組(n表示元素的個(gè)數(shù)),則需要使用分號(hào)作為元素與元素之間的間隔或者直接使用轉(zhuǎn)置運(yùn)算符“'”,參見(jiàn)例子2-6。例子2-6

創(chuàng)建列向量。直接輸入元素的方法創(chuàng)建列向量>>A=[1;2;3;4;5;6]A=123456使用轉(zhuǎn)置的方法創(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)建了一個(gè)3×3的矩陣,在創(chuàng)建矩陣的時(shí)候,需要注意:*整個(gè)矩陣的元素必須在“[]”中鍵入;*矩陣的元素行與行之間需要使用分號(hào)“;”間隔,也可以在需要分行的地方用回車鍵間隔;*矩陣的元素之間可以使用逗號(hào)“,”或者空格間隔。其實(shí)創(chuàng)建上面的矩陣時(shí)還可以這么做>>B=[1:3;4:6;7:9]B=1234567892.3.2工作空間數(shù)組編輯器前文的例子中使用whos指令來(lái)察看當(dāng)前MATLAB會(huì)話保存在工作空間內(nèi)存中的各種變量,此外,還可以使用工作空間瀏覽器察看工作空間中包含的各種變量,圖2-1所示為執(zhí)行了例子2-7之后的工作空間瀏覽器。圖2-1MATLAB的工作空間瀏覽器從工作空間瀏覽器中可以看到變量A的基本內(nèi)容以及矩陣中的最大元素?cái)?shù)值和最小元素?cái)?shù)值。如果變量所包含的元素?cái)?shù)量較多,則無(wú)法顯示相應(yīng)的內(nèi)容,例如:>>B=1:20000;>>whosNameSizeBytesClassAttributesA3x372doubleB1x20000160000double此時(shí)在工作空間瀏覽器中能夠看到的是變量B相應(yīng)的尺寸以及元素的數(shù)據(jù)類型,如圖2-2所示。

圖2-2工作空間瀏覽器的快捷菜單在MATLAB的工作空間瀏覽器中可以看到更加豐富的內(nèi)容,單擊View菜單,可以看到ChooseColumns子菜單下具有很多菜單命令,分別執(zhí)行這些命令,可以在工作空間瀏覽器中選擇查看變量的尺寸(Size)、占用的內(nèi)存空間(Bytes)、數(shù)據(jù)類型(Class)、數(shù)據(jù)范圍(Range)等,如圖2-3所示。工作空間瀏覽器并不是能夠顯示所有變量的信息,如果變量所包含的元素過(guò)多則無(wú)法顯示相應(yīng)的變量統(tǒng)計(jì)信息,可以通過(guò)MATLAB的屬性設(shè)置對(duì)話框設(shè)置有關(guān)工作空間瀏覽器的相應(yīng)內(nèi)容,如圖2-4所示。

圖2-3選擇工作空間瀏覽器中的變量信息

圖2-4設(shè)置工作空間瀏覽器的屬性

工作空間瀏覽器不僅能夠顯示變量的信息,還可以通過(guò)交互式工具來(lái)實(shí)現(xiàn)在工作空間中變量的可視化操作,例如選擇相應(yīng)變量后,通過(guò)右鍵快捷菜單或者工具欄上的工具來(lái)實(shí)現(xiàn)不同方式的數(shù)據(jù)可視化工作。具體的可視化操作將在本書第六章中詳細(xì)介紹。此外,還可以在工作空間瀏覽器中對(duì)矩陣或者向量進(jìn)行編輯,也可以實(shí)現(xiàn)刪除、重命名工作空間的變量等操作。相應(yīng)的操作可以通過(guò)右鍵快捷菜單中相應(yīng)的命令來(lái)實(shí)現(xiàn),如圖2-5所示。

圖2-5工作空間瀏覽器中變量的右鍵快捷菜單

2.3.3數(shù)組編輯器在圖2-5所示的工作空間瀏覽器變量右鍵快捷菜單中可以看到EditValue指令,執(zhí)行該指令,可以直接在工作空間瀏覽器中對(duì)矩陣變量等進(jìn)行簡(jiǎn)單的編輯工作。不過(guò)這種編輯對(duì)那些元素?cái)?shù)量較少的簡(jiǎn)單變量比較方便,然而當(dāng)變量包含的元素?cái)?shù)量較多時(shí),對(duì)矩陣或者向量元素的編輯就需要通過(guò)數(shù)組編輯器來(lái)完成了。

對(duì)矩陣或者向量元素的編輯可以通過(guò)數(shù)組編輯器來(lái)完成,調(diào)用數(shù)組編輯器有以下幾種不同的方法:第一種,首先選擇工作空間瀏覽器中的變量,然后單擊工作空間瀏覽器工具欄中的按鈕,這時(shí)系統(tǒng)將運(yùn)行數(shù)組編輯器,同時(shí)在編輯器中加載變量。在用鼠標(biāo)選擇工作空間中的變量時(shí),可以按住Ctrl鍵或者Shift鍵選擇多個(gè)變量,同樣也可以使用快捷鍵Ctrl+A選擇工作空間中的所有變量。第二種方法是在工作空間瀏覽器中直接雙擊變量,也可以運(yùn)行數(shù)組編輯器,同時(shí)在編輯器中加載變量。

第三種方法就是通過(guò)工作空間瀏覽器中的快捷菜單命令Open來(lái)完成同樣的工作。第四種方法是直接在MATLAB命令行窗口中鍵入如下指令:

>>openvarA

也可以在數(shù)組編輯器中打開(kāi)變量A。打開(kāi)矩陣A的數(shù)組編輯器界面如圖2-6所示。圖2-6在數(shù)組編輯器中編輯矩陣

前文提及,在命令行窗口中直接輸入元素較多的向量或者矩陣時(shí)比較麻煩,所以,可以利用數(shù)組編輯器完成大矩陣的編輯,具體方法如下:首先在命令行窗口中創(chuàng)建一個(gè)新的變量,可以為這個(gè)變量賦任意的數(shù)值,例如在MATLAB的命令行窗口中鍵入:A=1。然后通過(guò)工作空間瀏覽器打開(kāi)數(shù)組編輯器,并在數(shù)組編輯器中加載相應(yīng)的變量。在數(shù)組編輯器的工具欄中,分別修改矩陣的行數(shù)和列數(shù),例如設(shè)置矩陣的行、列數(shù)分別為14行、15列,則數(shù)組編輯器將自動(dòng)擴(kuò)充矩陣,將未定義的元素賦初值為0,這時(shí)就可以雙擊任意元素來(lái)修改矩陣的元素值了,如圖2-7所示,即逐個(gè)修改必要的元素,完成矩陣的定義。圖2-7利用數(shù)組編輯器定義矩陣

就像在MATLAB命令行窗體中顯示數(shù)據(jù)一樣,在數(shù)組編輯器中可以使用多種格式來(lái)顯示數(shù)組中的數(shù)據(jù),就好像使用format指令一樣。通過(guò)數(shù)字編輯器View菜單下NumericArrayFormat子菜單中相應(yīng)的命令選擇不同的數(shù)據(jù)顯示方法,如圖2-8所示。

圖2-8設(shè)置數(shù)據(jù)顯示的方式

例如選擇Bank格式時(shí),數(shù)據(jù)顯示的情況如圖2-9所示。

圖2-9以Bank格式顯示數(shù)據(jù)

此外,還有一種創(chuàng)建大矩陣的方法就是利用M語(yǔ)言的腳本文件,關(guān)于腳本文件創(chuàng)建矩陣的方法在第4章中詳細(xì)講述??梢栽跀?shù)組編輯器中同時(shí)打開(kāi)多個(gè)變量,在工作空間瀏覽器中用鼠標(biāo)選擇變量時(shí),可以按住Ctrl鍵或者Shift鍵選擇多個(gè)變量,同樣也可以使用快捷鍵Ctrl+A選擇工作空間中所有的變量。然后通過(guò)前面介紹的方法打開(kāi)數(shù)組編輯器,例如圖2-10所示,此時(shí)的數(shù)組編輯器打開(kāi)了兩個(gè)變量,請(qǐng)讀者注意查看數(shù)組編輯器下部的變量列表欄。

圖2-10同時(shí)編輯多個(gè)變量

其實(shí)從MATLABRelease14即MATLAB7.0開(kāi)始,MATLAB的數(shù)組編輯器有了很大改進(jìn),例如突破了老版本MATLAB數(shù)組編輯器對(duì)64KB字節(jié)內(nèi)存空間的限制。從操作方面來(lái)說(shuō),MATLAB的數(shù)組編輯器與MicrosoftExcel很接近,也可以直接從Excel電子表格中將數(shù)據(jù)直接拷貝粘貼到MATLAB的數(shù)組編輯器中。而在編輯多個(gè)變量時(shí),可以通過(guò)變量列表欄的快捷菜單,對(duì)數(shù)組編輯器的外觀進(jìn)行編輯操作,例如圖2-11所示。

圖2-11數(shù)組編輯器變量列表欄的快捷菜單

通過(guò)Alphabetize命令可以將不同的變量頁(yè)按照字母序排序,Move…OnBar命令可以將當(dāng)前的變量頁(yè)按照相應(yīng)的方向依次移動(dòng)。同樣,在BarPosition菜單下的命令可以決定變量列表欄的具體位置,默認(rèn)位置在數(shù)組編輯器的底部(Bottom)。在數(shù)組編輯器中實(shí)現(xiàn)數(shù)據(jù)可視化操作的內(nèi)容將在第6章詳細(xì)介紹,用戶也可以仔細(xì)閱讀MATLAB幫助文檔中的相關(guān)內(nèi)容。

2.4索引2.4.1向量元素的訪問(wèn)訪問(wèn)向量的元素只要使用相應(yīng)元素的索引即可,請(qǐng)參閱下面的例子2-8。在例子2-8中操作對(duì)象是一個(gè)向量,該向量為A=[1234567890]。例子2-8訪問(wèn)向量中的元素。在MATLAB的命令行窗口中鍵入下面的指令:>>%訪問(wèn)向量的第三個(gè)元素>>A(3)ans=3訪問(wèn)向量的第一、三、七個(gè)元素:>>A([137])ans=137>>%訪問(wèn)向量的第一、三、五個(gè)元素>>A([1:3:5])ans=135>>%訪問(wèn)向量的最后四個(gè)元素>>A([end-3:end])ans=7890>>%重復(fù)訪問(wèn)向量中的元素>>A([1:5,5:-1:1])ans=1234554321

說(shuō)明:*訪問(wèn)向量元素的結(jié)果是創(chuàng)建新的向量。*訪問(wèn)向量的元素直接給出元素在向量中的序號(hào),元素的序號(hào)不僅可以是單一的整數(shù),還可以是元素序號(hào)組成的向量,如例子2-8中的各種操作。*關(guān)鍵字end在訪問(wèn)向量元素時(shí),表示向量中最后一個(gè)元素的序號(hào)。*訪問(wèn)向量元素時(shí),序號(hào)的數(shù)值必須介于數(shù)值1~end之間??梢酝ㄟ^(guò)訪問(wèn)元素的方法,對(duì)具體的元素賦值,參見(jiàn)例子2-9。例子2-9對(duì)向量的元素進(jìn)行賦值。在MATLAB命令行窗口中鍵入下面的指令:>>%對(duì)向量的第三個(gè)元素賦值>>A(3)=-3A=12-34567890>>%對(duì)向量中不存在的數(shù)據(jù)賦值>>A(15)=-15A=Columns1through1012-34567890Columns11through150000-15

說(shuō)明:在例子2-9中,對(duì)向量的第15個(gè)元素賦值,在賦值之前向量的第11~15個(gè)元素不存在,但是在賦值之后,將自動(dòng)創(chuàng)建這些元素,并且為沒(méi)有明確賦值的元素賦默認(rèn)值0,這就是MATLAB的數(shù)據(jù)自動(dòng)擴(kuò)充和初始化機(jī)制。2.4.2矩陣元素的訪問(wèn)訪問(wèn)矩陣的元素也需要使用矩陣元素的索引,不過(guò)具有兩種方式,第一種方式是使用矩陣元素的行列全下標(biāo)形式,第二種方法是使用矩陣元素的單下標(biāo)形式,參閱例子2-10。例子2-10訪問(wèn)矩陣的元素。

MATLAB工作空間中具有一個(gè)5×5的矩陣,該矩陣是五階的幻方,通過(guò)命令行獲取矩陣的第二行、第四列的元素,于是在MATLAB命令行窗口中鍵入下面的指令:>>%創(chuàng)建矩陣>>A=magic(5)A=17241815235714164613202210121921311182529使用全下標(biāo)的形式訪問(wèn)元素:>>A(2,4)ans=14使用單下標(biāo)的形式訪問(wèn)元素:>>A(17)ans=14

說(shuō)明:*使用了MATLAB函數(shù)magic創(chuàng)建幻方。所謂幻方,就是n階的方陣,該方陣的行元素和列元素的和都相等。*使用全下標(biāo)的形式訪問(wèn)矩陣元素的方法簡(jiǎn)單、直接,同線性代數(shù)的矩陣元素的概念一一對(duì)應(yīng)。*矩陣元素的單下標(biāo)是矩陣元素在內(nèi)存中存儲(chǔ)的序列號(hào),一般地,同一個(gè)矩陣的元素存儲(chǔ)在連續(xù)的內(nèi)存單元中。*矩陣元素的單下標(biāo)與全下標(biāo)之間的轉(zhuǎn)換關(guān)系如下,以的矩陣為例,該矩陣的第i行第j列的元素全下標(biāo)表示為單下標(biāo)l=(j-1)×m+i。

注意:

MATLAB的矩陣元素的排列以列元素優(yōu)先,這一點(diǎn)同F(xiàn)ORTRAN語(yǔ)言的二維數(shù)組元素的排列方法一致,與C語(yǔ)言的二維數(shù)組元素的排列不同,C語(yǔ)言的二維數(shù)組元素排列以行元素優(yōu)先。為了方便全下標(biāo)和單下標(biāo)之間的轉(zhuǎn)換,MATLAB提供了兩個(gè)函數(shù)分別完成兩者之間的相互轉(zhuǎn)化:*sub2ind:根據(jù)全下標(biāo)計(jì)算單下標(biāo)。*ind2sub:根據(jù)單下標(biāo)計(jì)算全下標(biāo)。表2-1使用索引訪問(wèn)矩陣元素的方法例子2-11

用不同的方法訪問(wèn)矩陣的元素。在MATLAB命令行中鍵入下面的指令:創(chuàng)建矩陣:>>A=1:25;>>A=reshape(A,5,5)A=16111621271217223813182349141924510152025訪問(wèn)矩陣的第三行第一列元素:>>A(3,1)或A(3)ans=3訪問(wèn)矩陣第三行的所有元素:>>A(3,:)ans=38131823訪問(wèn)矩陣第四列的所有元素:>>A(:,4)ans=1617181920訪問(wèn)矩陣的最后一行元素:>>A(end,:)ans=510152025獲取矩陣的子矩陣:>>I=[135];J=[24];>>A(I,J)ans=61681810202.5基本運(yùn)算2.5.1矩陣生成函數(shù)表2-2MATLAB的矩陣生成函數(shù)例子2-12

矩陣生成函數(shù)的示例。在MATLAB命令行中鍵入下面的指令:創(chuàng)建三階帕斯卡矩陣:>>A=pascal(3)A=111123136從矩陣A生成下三角矩陣:>>tril(A)ans=100120136獲取矩陣A的對(duì)角線元素:>>diag(A)ans=126利用向量生成對(duì)角矩陣:>>diag(ans)ans=1000200062.5.2基本矩陣運(yùn)算針對(duì)矩陣的運(yùn)算MATLAB提供了若干函數(shù)和基本的運(yùn)算規(guī)則,這些規(guī)則和函數(shù)都分別和線性代數(shù)的基本概念和運(yùn)算規(guī)則對(duì)應(yīng)。矩陣的基本運(yùn)算參見(jiàn)表2-3。表2-3矩陣的基本運(yùn)算提示:在MATLAB中,獲取矩陣(線性代數(shù))的運(yùn)算函數(shù)列表請(qǐng)?jiān)贛ATLAB命令行窗口中鍵入如下命令:>>helpmatfun在MATLAB命令行窗口中將顯示相應(yīng)的函數(shù)列表:Matrixfunctions-numericallinearalgebra.Matrixanalysis.norm -Matrixorvectornorm.normest -Estimatethematrix2-norm.…

一般的MATLAB函數(shù)都可以針對(duì)矩陣進(jìn)行運(yùn)算,但是在前面的help命令行中顯示的函數(shù)是專門針對(duì)矩陣和線性代數(shù)運(yùn)算的函數(shù)。例子2-13

矩陣的基本運(yùn)算示例——求解方程組。

這類問(wèn)題可以直接通過(guò)矩陣運(yùn)算解決。在MATLAB命令行窗口中鍵入下面的指令:創(chuàng)建線性方程組的系數(shù)矩陣和向量:>>A=[-112;3-11;-134];>>b=[2;6;4];求解方程,使用矩陣求逆的方法>>x=inv(A)*bx=1.0000-1.00002.0000求解方程,使用矩陣左除運(yùn)算:>>x=A\bx=1.0000-1.00002.0000

從例子2-13可以看出以矩陣為基本運(yùn)算單位進(jìn)行數(shù)值運(yùn)算的優(yōu)勢(shì)。對(duì)于MATLAB,矩陣的基本運(yùn)算都可以用一種最簡(jiǎn)單、直觀的表達(dá)式完成,像這種利用向量或者矩陣的運(yùn)算,不僅可以簡(jiǎn)化代碼,還能夠提高M(jìn)ATLAB的M語(yǔ)言的運(yùn)行速度。矩陣的運(yùn)算同時(shí)也包含了矩陣和標(biāo)量之間的運(yùn)算,MATLAB在處理這種運(yùn)算的時(shí)候,首先對(duì)標(biāo)量進(jìn)行擴(kuò)充,例如:>>w=[12;34]+5w=6789該指令行實(shí)際的執(zhí)行過(guò)程如下:

w=[12;34]+52.5.3基本數(shù)組運(yùn)算

1.?dāng)?shù)組轉(zhuǎn)置數(shù)組轉(zhuǎn)置的操作符是在矩陣轉(zhuǎn)置操作符前加符號(hào)“.”,見(jiàn)例子2-14。例子2-14數(shù)組轉(zhuǎn)置操作。在MATLAB命令行窗口中,鍵入下面的指令:創(chuàng)建矩陣:>>A=ones(2,3);A(:)=1:6A=135246矩陣轉(zhuǎn)置:>>A'.ans=123456數(shù)組轉(zhuǎn)置:>>A'.ans=123456復(fù)數(shù)運(yùn)算,矩陣A成為復(fù)數(shù)矩陣:>>A=A*IA=0+1.0000i0+3.0000i0+5.0000i0+2.0000i0+4.0000i0+6.0000i矩陣轉(zhuǎn)置:>>A'ans=0-1.0000i0-2.0000i0-3.0000i0-4.0000i0-5.0000i0-6.0000i數(shù)組轉(zhuǎn)置:>>A.'ans=0+1.0000i0+2.0000i0+3.0000i0+4.0000i0+5.0000i0+6.0000i

從例子2-14可以看出,對(duì)于實(shí)數(shù)矩陣,矩陣轉(zhuǎn)置和數(shù)組轉(zhuǎn)置的計(jì)算結(jié)果是一致的,但是對(duì)于復(fù)數(shù)矩陣,數(shù)組轉(zhuǎn)置和矩陣轉(zhuǎn)置的計(jì)算結(jié)果就不一致。所以,對(duì)于數(shù)組轉(zhuǎn)置運(yùn)算也被稱為非共軛轉(zhuǎn)置,矩陣轉(zhuǎn)置運(yùn)算則被稱為共軛轉(zhuǎn)置。

2.?dāng)?shù)組冪數(shù)組冪運(yùn)算符就是在矩陣冪運(yùn)算符前加上符號(hào)“.”,見(jiàn)例子2-15。例子2-15數(shù)組冪運(yùn)算。在MATLAB命令行中,鍵入下面的指令:本例子中使用的矩陣:>>AA=0+1.0000i0+3.0000i0+5.0000i0+2.0000i0+4.0000i0+6.0000i矩陣冪運(yùn)算:>>A^3???Errorusing==>^Matrixmustbesquare.數(shù)組冪運(yùn)算:>>A.^3ans=1.0e+002*

0-0.0100i0-0.2700i0-1.2500i0-0.0800i0-0.6400i0-2.1600i

3.?dāng)?shù)組乘法和前面兩種運(yùn)算類似,數(shù)組乘法運(yùn)算符是在矩陣乘法運(yùn)算符前加上符號(hào)“.”,見(jiàn)例子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ù)學(xué)函數(shù)在MATLAB中有部分函數(shù)可以用來(lái)進(jìn)行基本的數(shù)學(xué)運(yùn)算,主要有如下類別:三角函數(shù)(見(jiàn)表2-4)、指數(shù)運(yùn)算函數(shù)(見(jiàn)表2-5)、復(fù)數(shù)運(yùn)算函數(shù)(見(jiàn)表2-6)、圓整和求余函數(shù)(見(jiàn)表2-7)。需要注意的是這些函數(shù)的參數(shù)可以是矩陣也可以是向量或者多維數(shù)組,函數(shù)在處理參數(shù)時(shí),都是按照數(shù)組運(yùn)算的規(guī)則來(lái)進(jìn)行的,也就是說(shuō)對(duì)于 的矩陣 ,函數(shù)f(●)的運(yùn)算指。表2-4三角函數(shù)表2-5指數(shù)運(yùn)算函數(shù)

說(shuō)明:以real開(kāi)頭的函數(shù)僅能處理實(shí)數(shù),如輸入的參數(shù)為復(fù)數(shù),則MATLAB會(huì)報(bào)錯(cuò)。函數(shù)nextpow2是用來(lái)計(jì)算僅僅比輸入?yún)?shù)大的第一個(gè)2的冪,例如輸入?yún)?shù)為N,則函數(shù)的計(jì)算結(jié)果整數(shù)P需要滿足的條件為2P≥abs(N)≥2P-1。表2-6復(fù)數(shù)運(yùn)算表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ù)處理同一個(gè)數(shù)據(jù)的結(jié)果,在使用不同的取整函數(shù)時(shí)要注意各個(gè)函數(shù)的特點(diǎn)。其實(shí)這四種圓整函數(shù)之間的區(qū)別主要是進(jìn)行圓整運(yùn)算時(shí),趨近的方向不盡相同。例如fix函數(shù)是將數(shù)據(jù)向0的方向趨近,而floor函數(shù)是向無(wú)窮大的方向上趨近。>>mod(9,-2)ans=-1>>rem(9,-2)ans=12.5.5矩陣(數(shù)組)操作函數(shù)在前面的小節(jié)中主要介紹了進(jìn)行數(shù)學(xué)運(yùn)算的MATLAB函數(shù),在MATLAB中還存在一類函數(shù)用來(lái)獲取矩陣或者數(shù)組的信息,以及對(duì)數(shù)組進(jìn)行操作,在表2-8中列舉了較常用的函數(shù)。完整的函數(shù)列表內(nèi)容可以在MATLAB命令行中鍵入helpelmat指令來(lái)察看。表2-8用于矩陣(數(shù)組)操作的常用函數(shù)

例子2-18reshape函數(shù)的使用示例。在前面的例子2-11中曾經(jīng)使用過(guò)reshape函數(shù),這里將詳細(xì)討論該函數(shù)的使用方法,在MATLAB命令行中,鍵入下面的指令:>>A=1:8A=12345678>>B=reshape(A,2,4)B=13572468>>C=reshape(B,3,3)???Errorusing==>reshapeToRESHAPEthenumberofelementsmustnotchange.例子2-19

對(duì)稱交換函數(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

在生成比較復(fù)雜的矩陣時(shí),可以使用MATLAB提供的矩陣擴(kuò)展方法完成相應(yīng)矩陣的構(gòu)造。假設(shè)矩陣A為三階方陣,B為二階方陣,由矩陣A和B組合構(gòu)成五階方陣 ,其中O為相應(yīng)的零矩陣,具體的創(chuàng)建方法見(jiàn)例子2-20。例子2-20

創(chuàng)建復(fù)雜矩陣。在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使用方括號(hào)創(chuàng)建復(fù)雜矩陣。在MATLAB命令行中,鍵入下面的指令:>>A=[12;34];>>B=[A,A*2;tril(A),triu(A);A*3,A*4]B=122434681012340436489121216例子2-22

函數(shù)repmat的應(yīng)用示例。>>repmat(magic(2),2,3)ans=131313424242131313424242repmat函數(shù)的基本語(yǔ)法為repmat(A,M,N),它的作用是將指定的矩陣A復(fù)制次,然后創(chuàng)建一個(gè)復(fù)雜的大矩陣,結(jié)果為 ,因此,在例子2-22中,將一個(gè)簡(jiǎn)單的二行二列的矩陣進(jìn)行了六次重復(fù),創(chuàng)建了四行六列的大矩陣。2.6稀疏矩陣

矩陣元素的表示方法是計(jì)算機(jī)數(shù)據(jù)結(jié)構(gòu)理論中經(jīng)常討論的話題,因?yàn)樵趯?shí)際工作中,經(jīng)常遇到這樣一類矩陣,這類矩陣中數(shù)值為0的元素居多,這類矩陣一般被稱為稀疏矩陣。如果使用滿陣的方式來(lái)表示稀疏矩陣,則0元素將占用相當(dāng)?shù)膬?nèi)存空間,特別是在MATLAB中,由于MATLAB默認(rèn)的數(shù)據(jù)類型是雙精度類型,每一個(gè)雙精度類型的數(shù)據(jù)元素都要占用八個(gè)字節(jié)的內(nèi)存空間,當(dāng)0元素很多的時(shí)候?qū)⒄加孟喈?dāng)可觀的內(nèi)存空間,因此,在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個(gè)元素,其中卻有20個(gè)元素是0,于是使用sparse函數(shù)將該函數(shù)構(gòu)造成為稀疏矩陣,這樣就得到了矩陣B。通過(guò)whos指令可以清晰地比較兩個(gè)矩陣占用的內(nèi)存空間,A矩陣占用了200個(gè)字節(jié),而B(niǎo)矩陣僅占用了84個(gè)字節(jié)。稀疏矩陣和普通矩陣(滿陣)之間可以直接進(jìn)行運(yùn)算,例如>>A+Bans=2000002000002000002000002

這里運(yùn)算得到的結(jié)果是一個(gè)滿陣,請(qǐng)讀者在進(jìn)行稀疏矩陣運(yùn)算的時(shí)候注意。

MATLAB中使用“三元組”表示法來(lái)表示稀疏矩陣,該表示方法一般由三個(gè)向量組成:第一個(gè)向量是由矩陣中非零元素組成的向量,其長(zhǎng)度一般為nzmax,即矩陣中所有非零元素的個(gè)數(shù);第二個(gè)向量是非零元素的行序號(hào),該向量的長(zhǎng)度也為nzmax;第三個(gè)向量是非零元素的列序號(hào),該向量的長(zhǎng)度也為nzmax。例如對(duì)于下面的稀疏矩陣:因此,表示矩陣的三個(gè)向量分別為

>>data=6?15];>>ir=[15226131];>>jc=[11233446];利用上面的三個(gè)矩陣和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

注意:在不同的語(yǔ)言或者數(shù)學(xué)計(jì)算工具軟件中,表示稀疏矩陣的方法可能不盡相同,請(qǐng)讀者仔細(xì)查閱相應(yīng)軟件的幫助文檔。

MATLAB專門提供了若干函數(shù)用于稀疏矩陣的運(yùn)算,在表2-9中對(duì)這些函數(shù)進(jìn)行了總結(jié)。提示:在MATLAB命令行窗口中鍵入指令helpsparfun可以得到稀疏矩陣運(yùn)算函數(shù)的列表。表2-9稀疏矩陣的常用函數(shù)2.7多維數(shù)組2.7.1創(chuàng)建多維數(shù)組多維數(shù)組的創(chuàng)建也有多種方法:第一種方法是使用直接賦值的方法來(lái)創(chuàng)建;第二種方法是使用部分MATLAB的函數(shù)創(chuàng)建多維數(shù)組。具體的做法結(jié)合例子講述。

例子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)建了一個(gè)矩陣——帕斯卡矩陣,也可以將其看作二維數(shù)組,然后,使用全下標(biāo)的形式創(chuàng)建了三維數(shù)組的第二頁(yè),第二頁(yè)上的矩陣是一個(gè)單位陣,接著在創(chuàng)建新的一頁(yè)時(shí)使用了五階方陣作為輸入,由于維數(shù)不匹配所以系統(tǒng)報(bào)錯(cuò)。例子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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論