矩陣是MATLAB數(shù)據(jù)存儲的基本單元,而矩陣的運(yùn)算是MATLAB語言的核心,在MATLAB語言系統(tǒng)中幾乎一切運(yùn)算均是以對矩陣的操作為基礎(chǔ)的。下面重點(diǎn)介紹矩陣的生成、矩陣的基本運(yùn)算和矩陣的數(shù)組運(yùn)算。 5.1 矩陣的生成 若要輸入矩陣,則必須在每一列結(jié)尾加上分號(;),如下例: A = [1 2 3 4; 5 6 7 8; 9 10 11 12]; A = 1 2 3 4 5 6 7 8 9 10 11 12 1. 直接輸入法 從鍵盤上直接輸入矩陣是最方便、最常用的創(chuàng)建數(shù)值矩陣的方法,尤其適合較小的簡單矩陣。在用此方法創(chuàng)建矩陣時,應(yīng)當(dāng)注意以下幾點(diǎn): ● 輸入矩陣時要以“[ ]”為其標(biāo)識符號,矩陣的所有元素必須都在括號內(nèi)。 ● 矩陣同行元素之間由空格或逗號分隔,行與行之間用分號或回車鍵分隔。 ● 矩陣大小不需要預(yù)先定義。 ● 矩陣元素可以是運(yùn)算表達(dá)式。 ● 若“[ ]”中無元素表示空矩陣。 2.利用M文件建立矩陣 對于比較大且比較復(fù)雜的矩陣,可以為它專門建立一個M文件。利用M文件建立MYMAT矩陣: (1) 啟動有關(guān)編輯程序或MATLAB文本編輯器,并輸入待建矩陣: (2) 把輸入的內(nèi)容以純文本方式存盤(設(shè)文件名為mymatrix.m)。 (3) 在MATLAB命令窗口中輸入mymatrix,即運(yùn)行該M文件,就會自動建立一個名為MYMAT的矩陣,可供以后使用。 外部文件讀入法 可以利用任意的文本編輯器編輯所要使用的矩陣,矩陣元素之間以特定分?jǐn)喾珠_,并按行列布置。讀入矩陣的一種方法可參考數(shù)據(jù)交換系統(tǒng)。 另外MATLAB語言也允許用戶調(diào)用在MATLAB環(huán)境之外定義的矩陣??梢岳胠oad函數(shù),其調(diào)用方法為: Load+文件名[參數(shù)] Load函數(shù)將會從文件名所指定的文件中讀取數(shù)據(jù),并將輸入的數(shù)據(jù)賦給以文件名命名的變量,如果不給定文件名,則將自動認(rèn)為matlab.mat文件為操作對象,如果該文件在MATLAB搜索路徑中不存在時,系統(tǒng)將會報錯。 例如: 事先在記事本中建立文件: 1 1 1 (并以data1.txt保存) 1 2 3 1 3 6 在MATLAB命令窗口中輸入: >> load data1.txt >> data1 data1= 1 1 1 1 2 3 1 3 6 3. 利用冒號表達(dá)式建立一個向量 冒號表達(dá)式可以產(chǎn)生一個行向量,一般格式是: e1:e2:e3 其中e1為初始值,e2為步長,e3為終止值。 首先,可以用冒號來定義行向量。 例如: >> a=1:0.5:4 a= Columns?。?through 7 1 1.5 2 2.5 3 3.5 4 其次,通過使用冒號,可以截取指定矩陣中的部分。 例如: >> A=[1 2 3;4 5 6;7 8 9]
A= 1 2 3 4 5 6 7 8 9 >> B=A (1:2, : ) B= 1 2 3 4 5 6 通過上例可以看到B是由矩陣A的1到2行和相應(yīng)的所有列的元素構(gòu)成的一個新的矩陣。在這里,冒號代替了矩陣A的所有列。 在MATLAB中,還可以用linspace函數(shù)產(chǎn)生行向量。 其調(diào)用格式為: linspace(a,b,n) 其中a和b是生成向量的第一個和最后一個元素,n是元素總數(shù)。 顯然,linspace(a,b,n)與a:(b-a)/(n-1):b等價。 4.特殊矩陣的生成 對于一些比較特殊的矩陣(單位陣、矩陣中含1或0較多),由于其具有特殊的結(jié)構(gòu),MATLAB提供了一些函數(shù)用于生成這些矩陣。常用的有下面幾個: zeros(m) 生成m階全0矩陣 eye(m) 生成m階單位矩陣 ones(m) 生成m階全1矩陣 rand(m) 生成m階均勻分布的隨機(jī)陣 randn(m) 生成m階正態(tài)分布的隨機(jī)矩陣
我們可以對矩陣進(jìn)行各種處理: A(2,3) = 5 % 改變位於第二列,第三行的元素值 A = 1 2 3 4 5 6 5 8 9 10 11 12 B = A(2,1:3) % 取出部份矩陣B B = 5 6 5 A = [A B'] % 將B轉(zhuǎn)置後以行向量并入A A = 1 2 3 4 5 5 6 5 8 6 9 10 11 12 5 A(:, 2) = [] % 刪除第二行(:代表所有列) A = 1 3 4 5 5 5 8 6 9 11 12 5 A = [A; 4 3 2 1] % 加入第四列 A = 1 3 4 5 5 5 8 6 9 11 12 5 4 3 2 1 A([1 4], :) = [] % 刪除第一和第四列(:代表所有行) A = 5 5 8 6 9 11 12 5 這幾種矩陣處理的方式可以相互疊代運(yùn)用,產(chǎn)生各種意想不到的效果。
小提示:在MATLAB的內(nèi)部資料結(jié)構(gòu)中,每一個矩陣都是一個以行為主(Column-oriented )的陣列(Array)因此對於矩陣元素的存取,我們可用一維或二維的索引(Index)來定址。舉例來說,在上述矩陣A中,位於第二列、第三行的元素可寫為A(2,3) (二維索引)或A(6)(一維索引,即將所有直行進(jìn)行堆疊後的第六個元素)。 此外,若要重新安排矩陣的形狀,可用reshape命令: B = reshape(A, 4, 2) % 4是新矩陣的列數(shù),2是新矩陣的行數(shù) B = 5 8 9 12 5 6 11 5 小提示: A(:)就是將矩陣A每一列堆疊起來,成為一個行向量,而這也是MATLAB變數(shù)的內(nèi)部儲存方式。以前例而言,reshape(A, 8, 1)和A(:)同樣都會產(chǎn)生一個8x1的矩陣。 5.2 矩陣的基本數(shù)學(xué)運(yùn)算 矩陣的基本數(shù)學(xué)運(yùn)算包括矩陣的四則運(yùn)算、與常數(shù)的運(yùn)算、逆運(yùn)算、行列式運(yùn)算、秩運(yùn)算、特征值運(yùn)算等基本函數(shù)運(yùn)算,這里進(jìn)行簡單介紹。 1.四則運(yùn)算 矩陣的加、減、乘運(yùn)算符分別為“+,—,*” ,用法與數(shù)字運(yùn)算幾乎相同,但計算時要滿足其數(shù)學(xué)要求(如:同型矩陣才可以加、減)。 在MATLAB中矩陣的除法有兩種形式:左除“\”和右除“/”。在傳統(tǒng)的MATLAB算法中,右除是先計算矩陣的逆再相乘,而左除則不需要計算逆矩陣直接進(jìn)行除運(yùn)算。通常右除要快一點(diǎn),但左除可避免被除矩陣的奇異性所帶來的麻煩。在MATLAB6中兩者的區(qū)別不太大。 2.與常數(shù)的運(yùn)算 常數(shù)與矩陣的運(yùn)算即是同該矩陣的每一元素進(jìn)行運(yùn)算。但需注意進(jìn)行數(shù)除時,常數(shù)通常只能做除數(shù)。 3.基本函數(shù)運(yùn)算 矩陣的函數(shù)運(yùn)算是矩陣運(yùn)算中最實用的部分,常用的主要有以下幾個: det(a) 求矩陣a的行列式 eig(a) 求矩陣a的特征值 inv(a)或a ^ (-1) 求矩陣a的逆矩陣 rank(a) 求矩陣a的秩 trace(a) 求矩陣a的跡(對角線元素之和) 例如: >> a=[2 1 –3 –1; 3 1 0 7; -1 2 4 –2; 1 0 –1 5]; >> a1=det(a); >> a2=det(inv(a)); >> a1*a2 ans= 1 注意:命令行后加“;”表示該命令執(zhí)行但不顯示執(zhí)行結(jié)果。 4.2.2 矩陣的數(shù)組運(yùn)算 我們在進(jìn)行工程計算時常常遇到矩陣對應(yīng)元素之間的運(yùn)算。這種運(yùn)算不同于前面講的數(shù)學(xué)運(yùn)算,為有所區(qū)別,我們稱之為數(shù)組運(yùn)算。 1.基本數(shù)學(xué)運(yùn)算 數(shù)組的加、減與矩陣的加、減運(yùn)算完全相同。而乘除法運(yùn)算有相當(dāng)大的區(qū)別,數(shù)組的乘除法是指兩同維數(shù)組對應(yīng)元素之間的乘除法,它們的運(yùn)算符為“.*”和“./”或“.\”。前面講過常數(shù)與矩陣的除法運(yùn)算中常數(shù)只能做除數(shù)。在數(shù)組運(yùn)算中有了“對應(yīng)關(guān)系”的規(guī)定,數(shù)組與常數(shù)之間的除法運(yùn)算沒有任何限制。 另外,矩陣的數(shù)組運(yùn)算中還有冪運(yùn)算(運(yùn)算符為 .^ )、指數(shù)運(yùn)算(exp)、對數(shù)運(yùn)算(log)、和開方運(yùn)算(sqrt)等。有了“對應(yīng)元素”的規(guī)定,數(shù)組的運(yùn)算實質(zhì)上就是針對數(shù)組內(nèi)部的每個元素進(jìn)行的。 例如: >> a=[2 1 -3 -1; 3 1 0 7; -1 2 4 -2; 1 0 -1 5]; >> a^3 ans= 32 -28 -101 34 99 -12 -151 239 -1 49 93 8 51 -17 -98 139 >> a .^3 ans= 8 1 -27 -1 27 1 0 343 -1 8 64 -8 1 0 -1 125 由上例可見矩陣的冪運(yùn)算與數(shù)組的冪運(yùn)算有很大的區(qū)別。 2.邏輯關(guān)系運(yùn)算 邏輯運(yùn)算是MATLAB中數(shù)組運(yùn)算所特有的一種運(yùn)算形式,也是幾乎所有的高級語言普遍適用的一種運(yùn)算。它們的具體符號、功能及用法見表4-2。 表4-2 符號運(yùn)算符 功 能 函 數(shù) 名 = = 等于 eq ~ = 不等于 ne < 小于 lt > 大于 gt <= 小于等于 le >= 大于等于 ge & 邏輯與 and | 邏輯或 or ~ 邏輯非 not 說明: ● 在關(guān)系比較中,若比較的雙方為同維數(shù)組,則比較的結(jié)果也是同維數(shù)組。它的元 素值由0和1組成。當(dāng)比較雙方對應(yīng)位置上的元素值滿足比較關(guān)系時,它的對 應(yīng)值為1,否則為0。 ● 當(dāng)比較的雙方中一方為常數(shù),另一方為一數(shù)組,則比較的結(jié)果與數(shù)組同維。 ● 在算術(shù)運(yùn)算、比較運(yùn)算和邏輯與、或、非運(yùn)算中,它們的優(yōu)先級關(guān)系先后為: 比較運(yùn)算、算術(shù)運(yùn)算、邏輯與或非運(yùn)算。 例如: >>a=[1 2 3; 4 5 6; 7 8 9]; >> x=5; >> y= ones(3)*5; >> xa= x<=a xa= 0 0 0 0 1 1 1 1 1 >> b=[0 1 0; 1 0 1; 0 0 1]; >> ab=a&b ab= 0 1 0 1 0 1 0 0 1 |
|