本系列教程來(lái)源于出版設(shè)計(jì)《基于MATLAB編程基礎(chǔ)與典型應(yīng)用書籍》粉怕,如涉及版權(quán)問題处坪,請(qǐng)聯(lián)系:156204968@qq.com锅必。 出版社:人民郵電出版社, 頁(yè)數(shù):525氢卡。
本系列教程目前基于MATLABR2006a锈至,可能對(duì)于更高級(jí)版本的功能和函數(shù)有差異,教程中如有問題异吻,請(qǐng)聯(lián)系:156204968@qq.com
2.2.2 數(shù)組及矩陣元素操作
對(duì)矩陣元素的操作是矩陣操作的基本技巧裹赴,下面將介紹矩陣元素的表示方式、子矩陣塊的尋訪和賦值以及矩陣的特殊操作等一些基本操作诀浪。
(1)矩陣元素的表示方式
矩陣和多維數(shù)組都是由多個(gè)元素組成的棋返,每個(gè)元素通過下標(biāo)來(lái)標(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)來(lái)指明元素在數(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)
來(lái)表示該向量中第i個(gè)元素。
【例2.8】矩陣元素的提取
>> A=rand(4) %生成一個(gè)4×4的隨機(jī)分布的矩陣A
上述語(yǔ)句生成一個(gè)(4×4)的隨機(jī)分布的矩陣A矾削,具體如下:
A = 0.9501 0.8913 0.8214 0.9218 0.2311 0.7621 0.4447 0.7382 0.6068 0.4565 0.6154 0.1763 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)行尋訪操作么介,讀者可以將下面各語(yǔ)句執(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 11 10 7 6
④若要尋訪矩陣A的第3列對(duì)應(yīng)的所有元素镰吆,可在命令窗口輸入:
>> B3=A(:,3)
結(jié)果顯示如下:
B3 = 3 10 6 15
⑤若要尋訪矩陣A第1至3行的最后一個(gè)元素帘撰,可在命令窗口輸入:
>> B4=A(1:3,end) %end表示最后行或者列
提取到的矩陣的元素顯示如下:
B4 = 13 8 12
在實(shí)際使用過程中,經(jīng)常會(huì)遇到尋找矩陣中大于某個(gè)值的元素等類似的問題万皿,當(dāng)遇到此類問題時(shí)采用邏輯矩陣的方法來(lái)提取子矩陣或進(jìn)行重新賦值操作就很方便摧找。所謂的邏輯矩陣就是該矩陣對(duì)應(yīng)的各元素取值只能為1或0。使用邏輯矩陣尋訪矩陣時(shí)牢硅,邏輯矩陣的大小和將要尋訪矩陣的大小相同蹬耘,可以用A(L)來(lái)提取矩陣A中的子矩陣,其中L為邏輯向量或邏輯矩陣减余,當(dāng)L的元素為0時(shí)則不取該位置元素婆赠,為1則取該位置的元素。
【例2.10】利用邏輯矩陣來(lái)提取矩陣
>> A=rand(4) 生成一個(gè)4×4的隨機(jī)矩陣A
上述語(yǔ)句生成一個(gè)(4×4)的如下隨機(jī)矩陣A:
A = 0.9355 0.0579 0.1389 0.2722 0.9169 0.3529 0.2028 0.1988 0.4103 0.8132 0.1987 0.0153 0.8936 0.0099 0.6038 0.7468
下面將利用邏輯矩陣對(duì)隨機(jī)矩陣A進(jìn)行尋訪操作佳励,讀者可以將下面各語(yǔ)句執(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;
上述語(yǔ)句判斷矩陣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
上述語(yǔ)句執(zhí)行的結(jié)果如下,對(duì)比上面的矩陣A觀察賦值后的變化吼和。
A = 1.0000 1.0000 1.0000 0.2722 1.0000 1.0000 1.0000 0.1988 0.4103 0.8132 0.1987 0.0153 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炫乓。
上述語(yǔ)句執(zhí)行的結(jié)果如下刚夺,對(duì)比上面的矩陣A觀察賦值后的變化。
A = 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 0.4103 0.8132 0.1987 1.0000 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)行賦值
上述語(yǔ)句的執(zhí)行結(jié)果如下:
A = 1 5 4 3 2 6
【例2.12】矩陣元素的刪除
刪除操作就是把選定的矩陣元素賦值為空矩陣(用[]表示)。首先在MATLAB工作空間創(chuàng)建一個(gè)四階的魔方陣卒茬,使用magic命令如下所示:
>> A=magic(4) %生成四階的魔方陣
下面將對(duì)矩陣A進(jìn)行刪除操作船老,可以將以下各語(yǔ)句的執(zhí)行結(jié)果與矩陣A進(jìn)行比較,理解矩陣刪除操作的執(zhí)行情況圃酵。
①將矩陣A的第三列用空陣代替柳畔,即刪除第三列上的元素」停可在命令窗口輸入:
>> A(:,3)=[] %刪除矩陣A的第三列元素
刪除第三列上所有元素后薪韩,矩陣如下:A = 16 2 13 5 11 8 9 7 12 4 14 1
②使用單下標(biāo)刪除矩陣相關(guān)操作和賦值語(yǔ)句基本相同,在命令窗口中輸入:
>> A=magic(4) %生成四階的魔方陣
>> A(15)=[] %刪除A矩陣的第15個(gè)元素捌锭,此時(shí)A成為15個(gè)元素的行向量俘陷;
注意: 使用矩陣元素刪除操作時(shí),不允許使用具體下標(biāo)的形式刪除某行或者某列中的單個(gè)元素观谦,否則拉盾,無(wú)法形成矩陣。因此通常采用整行或者整列元素的刪除方式豁状。
【例2.13】生成大矩陣
在MATLAB中捉偏,可以通過方括號(hào)“[]”實(shí)現(xiàn)對(duì)已有的矩陣進(jìn)行擴(kuò)展,將小矩陣聯(lián)接起來(lái)生成一個(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 = 16 2 3 13 0 11 10 8 0 0 6 12 0 0 0 1
作者:德特?cái)?shù)據(jù)
聯(lián)系方式:156204968@qq.com