您好,登錄后才能下訂單哦!
本系列教程來源于出版設(shè)計(jì)《基于MATLAB編程基礎(chǔ)與典型應(yīng)用書籍》,如涉及版權(quán)問題,請(qǐng)聯(lián)系:156204968@qq.com。 出版社:人民郵電出版社, 頁數(shù):525。
本系列教程目前基于MATLABR2006a,可能對(duì)于更高級(jí)版本的功能和函數(shù)有差異,教程中如有問題,請(qǐng)聯(lián)系:156204968@qq.com
###2.2.2 數(shù)組及矩陣元素操作
對(duì)矩陣元素的操作是矩陣操作的基本技巧,下面將介紹矩陣元素的表示方式、子矩陣塊的尋訪和賦值以及矩陣的特殊操作等一些基本操作。
(1)矩陣元素的表示方式
矩陣和多維數(shù)組都是由多個(gè)元素組成的,每個(gè)元素通過下標(biāo)來標(biāo)識(shí)。元素的標(biāo)示方式有兩種:全下標(biāo)方式和單下標(biāo)方式。
全下標(biāo)方式是指由行下標(biāo)和列下標(biāo)表示矩陣的元素,即指明是“第幾行,第幾列”位置上的元素。使用該標(biāo)識(shí)方法比較直觀,幾何概念比較清晰,是最常使用的一種標(biāo)識(shí)方式。例如一個(gè)m×n
的A矩陣的第i行第j列的元素表示為A(i,j)
。
單下標(biāo)方式是指只用一個(gè)下標(biāo)來指明元素在數(shù)組中的位置。通過單下標(biāo)方式表示矩陣元素首先要把元素進(jìn)行一維編號(hào)。對(duì)于二維數(shù)組,首先把二維數(shù)組的所有列按先左后右的次序首尾相接排成一維長(zhǎng)列,然后自上往下對(duì)元素位置進(jìn)行編號(hào)。通過該編號(hào)就可以直接獲得指定位置的數(shù)組或矩陣元素。以m×n的矩陣A為例,若元素A(i,j)
則對(duì)應(yīng)的“單下標(biāo)”為s=(j-1)×m+i
。如果對(duì)于只有1行或1列的向量,直接用A(i)
來表示該向量中第i個(gè)元素。
【例2.8】矩陣元素的提取
>> A=rand(4) %生成一個(gè)4×4的隨機(jī)分布的矩陣A
上述語句生成一個(gè)(4×4)的隨機(jī)分布的矩陣A,具體如下:A = 0.9501 0.8913 0.8214 0.9218<br/>0.2311 0.7621 0.4447 0.7382<br/>0.6068 0.4565 0.6154 0.1763<br/>0.4860 0.0185 0.7919 0.4057
①若要雙下標(biāo)方式提取矩陣A的第2行第3列對(duì)應(yīng)的元素,可在命令窗口輸入:>> A(2,3) %雙下標(biāo)方式提取矩陣A的第2行第3列對(duì)應(yīng)的元素
則提取到的矩陣A中的元素顯示如下,讀者可以對(duì)照上面的矩陣檢查提取到的元素是否是對(duì)應(yīng)位置上的元素。ans = 0.4447
②若要單下標(biāo)方式提取第1行第3列對(duì)應(yīng)的元素,可在命令窗口輸入:>> A(15)
則提取到的矩陣A中的元素為:ans = 0.1763
注意:(1)如果在提取矩陣元素值時(shí),矩陣元素的下標(biāo)行或列(i,j)大于矩陣的大小(m,n),MATLAB會(huì)提示出錯(cuò);
(2)在給矩陣元素賦值時(shí),如果行或列(i,j)超出矩陣的大小(m,n),MATLAB會(huì)自動(dòng)擴(kuò)充矩陣,擴(kuò)充部分以0填充。
(2)子矩陣塊的尋訪和賦值
在理解和掌握了對(duì)矩陣元素標(biāo)識(shí)的方法后,就很容易理解和掌握子矩陣的尋訪和賦值操作。子矩陣是從對(duì)應(yīng)矩陣中取出一部分元素構(gòu)成,用全下標(biāo)或單下標(biāo)方式提取子矩陣或進(jìn)行重新賦值,具體參見表2.3。
格式 | 使用說明 |
---|---|
A(r,c) |
由A的“r指定行”和“c指定列”上的元素組成 |
A(r,:) |
由A的“r指定行”和“全部列”上的元素組成 |
A(:,c) |
由A的“全部行”和“c指定列”上的元素組成 |
A(:) |
單下標(biāo)方式尋訪,由A的全部元素組成 |
A(s) |
單下標(biāo)方式尋訪,生成s指定的一維數(shù)組。s若是行數(shù)組(列數(shù)組),則A(s)就是長(zhǎng)度相同的行數(shù)組(列數(shù)組)。 |
A(L) |
“邏輯1”方式尋訪,生成一維列數(shù)組,由與A同樣大小的邏輯數(shù)組L中的“1”元素選出A的對(duì)應(yīng)元素,按單下標(biāo)次序排成長(zhǎng)列組成 |
A(r,c)=Sa |
以雙下標(biāo)方式,對(duì)子數(shù)組A(r,c)進(jìn)行賦值,Sa的行、列大小必須與A(r,c)的相同 |
A(:)=D(:) |
全元素賦值方式,保持A的行、列大小不變,要求A、D兩個(gè)數(shù)組的總元素?cái)?shù)相同,但行、列大小不一定相同。 |
A(s)=Sa |
以單下標(biāo)方式對(duì)A的部分元素進(jìn)行重新賦值,保持A的行、列大小不變。要求s單下標(biāo)數(shù)組的長(zhǎng)度必須與一維數(shù)組Sa的長(zhǎng)度相等,但s、Sa不一定都是行數(shù)組或列數(shù)組。 |
【例2.9】對(duì)矩陣A,以不同的方式進(jìn)行尋訪操作示例
>> A=magic(4); %創(chuàng)建4×4的魔方矩陣A
下面將對(duì)魔方矩陣A以不同的方式進(jìn)行尋訪操作,讀者可以將下面各語句執(zhí)行的結(jié)果與矩陣A中的元素進(jìn)行比較,以加深對(duì)矩陣元素尋訪操作的理解。
①若以單下標(biāo)方式尋訪矩陣A中編號(hào)為1和4對(duì)應(yīng)的元素,可在命令窗口輸入:>> B=A([1,4])
結(jié)果顯示如下:B = 16 4
②若以雙下標(biāo)方式尋訪矩陣A中第1、3行和第2、3列對(duì)應(yīng)的元素,可在命令窗口輸入:>> B1=A([1 3],[2 3])
尋訪到的矩陣A中的元素如下:B1 = 2 3 7 6
若以雙下標(biāo)方式尋訪矩陣A中第1到3行和第2到3列上對(duì)應(yīng)的元素,可在命令窗口輸入:>> B2=A(1:3,2:3)
尋訪到的矩陣A中的元素如下:B2 = 2 3<br/>11 10<br/>7 6
④若要尋訪矩陣A的第3列對(duì)應(yīng)的所有元素,可在命令窗口輸入:>> B3=A(:,3)
結(jié)果顯示如下:B3 = 3<br/>10<br/>6<br/>15
⑤若要尋訪矩陣A第1至3行的最后一個(gè)元素,可在命令窗口輸入:>> B4=A(1:3,end) %end表示最后行或者列
提取到的矩陣的元素顯示如下:B4 =<br/>13<br/>8<br/>12
在實(shí)際使用過程中,經(jīng)常會(huì)遇到尋找矩陣中大于某個(gè)值的元素等類似的問題,當(dāng)遇到此類問題時(shí)采用邏輯矩陣的方法來提取子矩陣或進(jìn)行重新賦值操作就很方便。所謂的邏輯矩陣就是該矩陣對(duì)應(yīng)的各元素取值只能為1或0。使用邏輯矩陣尋訪矩陣時(shí),邏輯矩陣的大小和將要尋訪矩陣的大小相同,可以用A(L)來提取矩陣A中的子矩陣,其中L為邏輯向量或邏輯矩陣,當(dāng)L的元素為0時(shí)則不取該位置元素,為1則取該位置的元素。
【例2.10】利用邏輯矩陣來提取矩陣
>> A=rand(4) 生成一個(gè)4×4的隨機(jī)矩陣A
上述語句生成一個(gè)(4×4)的如下隨機(jī)矩陣A:A = 0.9355 0.0579 0.1389 0.2722<br/>0.9169 0.3529 0.2028 0.1988<br/>0.4103 0.8132 0.1987 0.0153<br/>0.8936 0.0099 0.6038 0.7468
下面將利用邏輯矩陣對(duì)隨機(jī)矩陣A進(jìn)行尋訪操作,讀者可以將下面各語句執(zhí)行的結(jié)果與矩陣A中的元素進(jìn)行比較,以加深對(duì)利用邏輯矩陣對(duì)矩陣尋訪操作的理解。
①若要提取矩陣A第一列上L1向量的值為1對(duì)應(yīng)的元素,首先在命令窗口輸入邏輯向量L1:>>L1=logical([1 0 1 1]) %生成行邏輯向量
然后在命令窗口輸入以下內(nèi)容:>> A(L1)
通過L1提取到的矩陣中的元素如下:ans = 0.9355 0.4103 0.8936
②利用矩陣B提取矩陣A中所有>0.5的元素。
首生成矩陣B,可以在命令窗口輸入以下內(nèi)容:>> B=A>0.5;
上述語句判斷矩陣A中所有元素是否>0.5,如果該元素>0.5則返回矩陣對(duì)應(yīng)的該位置顯示1,否則顯示0。然后利用矩陣B提取矩陣A中所有>0.5的元素。在命令窗口輸入:>> A(B)’ %為了方便顯示,轉(zhuǎn)化為行向量
結(jié)果顯示如下:ans = 0.9355 0.9169 0.8936 0.8132 0.6038 0.7468
【例2.11】矩陣的賦值
可以采用單下標(biāo)方式和雙下標(biāo)方式對(duì)矩陣的元素賦值,通過下面的操作可以看出,采用雙下標(biāo)方式比較直觀和容易操作,仍然采用例2.10所示的隨機(jī)矩陣A。
①采用雙下標(biāo)方式將矩陣A第1到2行和第1到3列對(duì)應(yīng)的元素賦值為1。在命令窗口輸入:>> A(1:2,1:3)=[1 1 1;1 1 1] %將A矩陣的1,2兩行,1到3列對(duì)應(yīng)元素賦值為1
上述語句執(zhí)行的結(jié)果如下,對(duì)比上面的矩陣A觀察賦值后的變化。A = 1.0000 1.0000 1.0000 0.2722<br/>1.0000 1.0000 1.0000 0.1988<br/>0.4103 0.8132 0.1987 0.0153<br/>0.8936 0.0099 0.6038 0.7468
②采用單下標(biāo)方式將矩陣A的編號(hào)為12至15的四個(gè)元素賦值為1。對(duì)應(yīng)為A矩陣的第4行第3列元素以及第4列的1到3行元素。在命令窗口輸入:>> A(12:15)=[1 1 1 1] %將A矩陣的第12到15個(gè)位置賦值為1。
上述語句執(zhí)行的結(jié)果如下,對(duì)比上面的矩陣A觀察賦值后的變化。A = 1.0000 1.0000 1.0000 1.0000<br/>1.0000 1.0000 1.0000 1.0000<br/>0.4103 0.8132 0.1987 1.0000<br/>0.8936 0.0099 1.0000 0.7468
③采用單下標(biāo)方式A(:)=B的形式給矩陣A的所有元素賦值時(shí),矩陣B的元素總數(shù)必須等于矩陣A的元素總數(shù),但行列數(shù)不一定相等。例如:>> A=[1 2;3 4;5 6] %生成A矩陣
>> B=[1 2 3;4 5 6] %生成B矩陣
在命令窗口輸入以下內(nèi)容,利用矩陣B對(duì)矩陣A進(jìn)行賦值。>> A(:)=B %用B對(duì)A進(jìn)行賦值
上述語句的執(zhí)行結(jié)果如下:A = 1 5<br/>4 3<br/>2 6
【例2.12】矩陣元素的刪除
刪除操作就是把選定的矩陣元素賦值為空矩陣(用[]表示)。首先在MATLAB工作空間創(chuàng)建一個(gè)四階的魔方陣,使用magic命令如下所示:>> A=magic(4) %生成四階的魔方陣
下面將對(duì)矩陣A進(jìn)行刪除操作,可以將以下各語句的執(zhí)行結(jié)果與矩陣A進(jìn)行比較,理解矩陣刪除操作的執(zhí)行情況。
①將矩陣A的第三列用空陣代替,即刪除第三列上的元素。可在命令窗口輸入:>> A(:,3)=[] %刪除矩陣A的第三列元素
刪除第三列上所有元素后,矩陣如下:A = 16 2 13<br/>5 11 8<br/>9 7 12<br/>4 14 1
②使用單下標(biāo)刪除矩陣相關(guān)操作和賦值語句基本相同,在命令窗口中輸入:>> A=magic(4) %生成四階的魔方陣
>> A(15)=[] %刪除A矩陣的第15個(gè)元素,此時(shí)A成為15個(gè)元素的行向量;
注意: 使用矩陣元素刪除操作時(shí),不允許使用具體下標(biāo)的形式刪除某行或者某列中的單個(gè)元素,否則,無法形成矩陣。因此通常采用整行或者整列元素的刪除方式。
【例2.13】生成大矩陣
在MATLAB中,可以通過方括號(hào)“[]”實(shí)現(xiàn)對(duì)已有的矩陣進(jìn)行擴(kuò)展,將小矩陣聯(lián)接起來生成一個(gè)較大的矩陣。MATLAB提供了反轉(zhuǎn)、提取、插入、重組等多種操作,在后面的相關(guān)章節(jié)會(huì)有所介紹,在這里只簡(jiǎn)單的介紹將兩個(gè)比較小的矩陣合并為一個(gè)比較大的矩陣的操作。首先在MATLAB工作空間創(chuàng)建一個(gè)四階的單位對(duì)角陣:>>A=eye(4) %生成對(duì)角單位陣列
以單位矩陣A為基礎(chǔ),通過矩陣的合并生成比較大的矩陣。
①將矩陣A上下疊加生成新矩陣。在命令窗口中輸入:>> B=[A;A] %上下重疊矩陣,相當(dāng)于操作reshape(A,2,1)
②將矩陣A左右疊加生成新矩陣。在命令窗口中輸入:>> C=[A A] %左右疊加矩陣,相當(dāng)于操作reshape(A,1,2)
(3)矩陣的特殊操作 MATLAB提供了對(duì)矩陣的特殊操作,比較常用的有矩陣的上三角和下三角矩陣的提取、矩陣翻轉(zhuǎn)和旋轉(zhuǎn)等操作詳見表2.4所示。 |
函數(shù)名 | 功能 |
---|---|---|
triu(X) |
產(chǎn)生X矩陣的上三角矩陣,其余元素補(bǔ)0 | |
tril(X) |
產(chǎn)生X矩陣的下三角矩陣,其余元素補(bǔ)0 | |
flipud(X) |
使矩陣X沿水平軸上下翻轉(zhuǎn) | |
fliplr(X) |
使矩陣X沿垂直軸左右翻轉(zhuǎn) | |
Flipdim(X,dim) |
使矩陣X沿特定軸翻轉(zhuǎn)。dim=1,按行維翻轉(zhuǎn);dim=2,按列維翻轉(zhuǎn) | |
rot90(X) |
使矩陣X逆時(shí)針旋轉(zhuǎn)90o |
【例2.14】矩陣特殊操作的示例
首先在MATLAB命令行窗口中輸入以下命令,生成四階的魔方陣:>> X=magic(4) %生成四階的魔方陣
下面將以矩陣X為基礎(chǔ),進(jìn)行矩陣的三角矩陣提取、矩陣的翻轉(zhuǎn)和旋轉(zhuǎn)等各種操作。表2.4中已經(jīng)詳細(xì)地介紹了矩陣的相關(guān)操作函數(shù),這里不一一舉例演示相關(guān)函數(shù)的使用。提取矩陣X上三角矩陣操作,可在命令窗口中輸入:>> triu(X) %提取矩陣的上三角矩陣,下三角元素為零
提取得到的矩陣X的上三角矩陣如下:ans =<br/>16 2 3 13<br/>0 11 10 8<br/>0 0 6 12<br/>0 0 0 1
作者:德特?cái)?shù)據(jù)
聯(lián)系方式:156204968@qq.com
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。