MATLAB編程與應用系列-第2章 數組及矩陣的創建及操作(3)

本系列教程來源於出版設計《基於MATLAB編程基礎與典型應用書籍》,如涉及版權問題,請聯繫:[email protected]。 出版社:人民郵電出版社, 頁數:525。

本系列教程目前基於MATLABR2006a,可能對於更高級版本的功能和函數有差異,教程中如有問題,請聯繫:[email protected]

###2.2.2 數組及矩陣元素操作
對矩陣元素的操作是矩陣操作的基本技巧,下面將介紹矩陣元素的表示方式、子矩陣塊的尋訪和賦值以及矩陣的特殊操作等一些基本操作。

(1)矩陣元素的表示方式
矩陣和多維數組都是由多個元素組成的,每個元素通過下標來標識。元素的標示方式有兩種:全下標方式和單下標方式。

全下標方式是指由行下標和列下標表示矩陣的元素,即指明是“第幾行,第幾列”位置上的元素。使用該標識方法比較直觀,幾何概念比較清晰,是最常使用的一種標識方式。例如一個m×n的A矩陣的第i行第j列的元素表示爲A(i,j)

單下標方式是指只用一個下標來指明元素在數組中的位置。通過單下標方式表示矩陣元素首先要把元素進行一維編號。對於二維數組,首先把二維數組的所有列按先左後右的次序首尾相接排成一維長列,然後自上往下對元素位置進行編號。通過該編號就可以直接獲得指定位置的數組或矩陣元素。以m×n的矩陣A爲例,若元素A(i,j)則對應的“單下標”爲s=(j-1)×m+i。如果對於只有1行或1列的向量,直接用A(i)來表示該向量中第i個元素。

【例2.8】矩陣元素的提取
>> A=rand(4) %生成一個4×4的隨機分佈的矩陣A
上述語句生成一個(4×4)的隨機分佈的矩陣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
①若要雙下標方式提取矩陣A的第2行第3列對應的元素,可在命令窗口輸入:
&gt;&gt; A(2,3) %雙下標方式提取矩陣A的第2行第3列對應的元素
則提取到的矩陣A中的元素顯示如下,讀者可以對照上面的矩陣檢查提取到的元素是否是對應位置上的元素。
ans = 0.4447
②若要單下標方式提取第1行第3列對應的元素,可在命令窗口輸入:
&gt;&gt; A(15)
則提取到的矩陣A中的元素爲:
ans = 0.1763

注意:(1)如果在提取矩陣元素值時,矩陣元素的下標行或列(i,j)大於矩陣的大小(m,n),MATLAB會提示出錯;
(2)在給矩陣元素賦值時,如果行或列(i,j)超出矩陣的大小(m,n),MATLAB會自動擴充矩陣,擴充部分以0填充。

(2)子矩陣塊的尋訪和賦值
在理解和掌握了對矩陣元素標識的方法後,就很容易理解和掌握子矩陣的尋訪和賦值操作。子矩陣是從對應矩陣中取出一部分元素構成,用全下標或單下標方式提取子矩陣或進行重新賦值,具體參見表2.3。

格式 使用說明
A(r,c) 由A的“r指定行”和“c指定列”上的元素組成
A(r,:) 由A的“r指定行”和“全部列”上的元素組成
A(:,c) 由A的“全部行”和“c指定列”上的元素組成
A(:) 單下標方式尋訪,由A的全部元素組成
A(s) 單下標方式尋訪,生成s指定的一維數組。s若是行數組(列數組),則A(s)就是長度相同的行數組(列數組)。
A(L) “邏輯1”方式尋訪,生成一維列數組,由與A同樣大小的邏輯數組L中的“1”元素選出A的對應元素,按單下標次序排成長列組成
A(r,c)=Sa 以雙下標方式,對子數組A(r,c)進行賦值,Sa的行、列大小必須與A(r,c)的相同
A(:)=D(:) 全元素賦值方式,保持A的行、列大小不變,要求A、D兩個數組的總元素數相同,但行、列大小不一定相同。
A(s)=Sa 以單下標方式對A的部分元素進行重新賦值,保持A的行、列大小不變。要求s單下標數組的長度必須與一維數組Sa的長度相等,但s、Sa不一定都是行數組或列數組。

【例2.9】對矩陣A,以不同的方式進行尋訪操作示例
&gt;&gt; A=magic(4); %創建4×4的魔方矩陣A
下面將對魔方矩陣A以不同的方式進行尋訪操作,讀者可以將下面各語句執行的結果與矩陣A中的元素進行比較,以加深對矩陣元素尋訪操作的理解。
①若以單下標方式尋訪矩陣A中編號爲1和4對應的元素,可在命令窗口輸入:
&gt;&gt; B=A([1,4])
結果顯示如下:
B = 16 4
②若以雙下標方式尋訪矩陣A中第1、3行和第2、3列對應的元素,可在命令窗口輸入:
&gt;&gt; B1=A([1 3],[2 3])
尋訪到的矩陣A中的元素如下:
B1 = 2 3 7 6
若以雙下標方式尋訪矩陣A中第1到3行和第2到3列上對應的元素,可在命令窗口輸入:
&gt;&gt; B2=A(1:3,2:3)
尋訪到的矩陣A中的元素如下:
B2 = 2 3<br/>11 10<br/>7 6
④若要尋訪矩陣A的第3列對應的所有元素,可在命令窗口輸入:
&gt;&gt; B3=A(:,3)
結果顯示如下:
B3 = 3<br/>10<br/>6<br/>15
⑤若要尋訪矩陣A第1至3行的最後一個元素,可在命令窗口輸入:
&gt;&gt; B4=A(1:3,end) %end表示最後行或者列
提取到的矩陣的元素顯示如下:
B4 =<br/>13<br/>8<br/>12

在實際使用過程中,經常會遇到尋找矩陣中大於某個值的元素等類似的問題,當遇到此類問題時採用邏輯矩陣的方法來提取子矩陣或進行重新賦值操作就很方便。所謂的邏輯矩陣就是該矩陣對應的各元素取值只能爲1或0。使用邏輯矩陣尋訪矩陣時,邏輯矩陣的大小和將要尋訪矩陣的大小相同,可以用A(L)來提取矩陣A中的子矩陣,其中L爲邏輯向量或邏輯矩陣,當L的元素爲0時則不取該位置元素,爲1則取該位置的元素。

【例2.10】利用邏輯矩陣來提取矩陣
&gt;&gt; A=rand(4) 生成一個4×4的隨機矩陣A
上述語句生成一個(4×4)的如下隨機矩陣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
下面將利用邏輯矩陣對隨機矩陣A進行尋訪操作,讀者可以將下面各語句執行的結果與矩陣A中的元素進行比較,以加深對利用邏輯矩陣對矩陣尋訪操作的理解。
①若要提取矩陣A第一列上L1向量的值爲1對應的元素,首先在命令窗口輸入邏輯向量L1:
&gt;&gt;L1=logical([1 0 1 1]) %生成行邏輯向量
然後在命令窗口輸入以下內容:
&gt;&gt; A(L1)
通過L1提取到的矩陣中的元素如下:
ans = 0.9355 0.4103 0.8936
②利用矩陣B提取矩陣A中所有>0.5的元素。
首生成矩陣B,可以在命令窗口輸入以下內容:
&gt;&gt; B=A&gt;0.5;
上述語句判斷矩陣A中所有元素是否>0.5,如果該元素>0.5則返回矩陣對應的該位置顯示1,否則顯示0。然後利用矩陣B提取矩陣A中所有>0.5的元素。在命令窗口輸入:
&gt;&gt; A(B)’ %爲了方便顯示,轉化爲行向量
結果顯示如下:
ans = 0.9355 0.9169 0.8936 0.8132 0.6038 0.7468

【例2.11】矩陣的賦值
可以採用單下標方式和雙下標方式對矩陣的元素賦值,通過下面的操作可以看出,採用雙下標方式比較直觀和容易操作,仍然採用例2.10所示的隨機矩陣A。
①採用雙下標方式將矩陣A第1到2行和第1到3列對應的元素賦值爲1。在命令窗口輸入:
&gt;&gt; A(1:2,1:3)=[1 1 1;1 1 1] %將A矩陣的1,2兩行,1到3列對應元素賦值爲1
上述語句執行的結果如下,對比上面的矩陣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
②採用單下標方式將矩陣A的編號爲12至15的四個元素賦值爲1。對應爲A矩陣的第4行第3列元素以及第4列的1到3行元素。在命令窗口輸入:
&gt;&gt; A(12:15)=[1 1 1 1] %將A矩陣的第12到15個位置賦值爲1。
上述語句執行的結果如下,對比上面的矩陣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
③採用單下標方式A(:)=B的形式給矩陣A的所有元素賦值時,矩陣B的元素總數必須等於矩陣A的元素總數,但行列數不一定相等。例如:
&gt;&gt; A=[1 2;3 4;5 6] %生成A矩陣
&gt;&gt; B=[1 2 3;4 5 6] %生成B矩陣
在命令窗口輸入以下內容,利用矩陣B對矩陣A進行賦值。
&gt;&gt; A(:)=B %用B對A進行賦值
上述語句的執行結果如下:
A = 1 5<br/>4 3<br/>2 6

【例2.12】矩陣元素的刪除
刪除操作就是把選定的矩陣元素賦值爲空矩陣(用[]表示)。首先在MATLAB工作空間創建一個四階的魔方陣,使用magic命令如下所示:
&gt;&gt; A=magic(4) %生成四階的魔方陣
下面將對矩陣A進行刪除操作,可以將以下各語句的執行結果與矩陣A進行比較,理解矩陣刪除操作的執行情況。
①將矩陣A的第三列用空陣代替,即刪除第三列上的元素。可在命令窗口輸入:
&gt;&gt; A(:,3)=[] %刪除矩陣A的第三列元素
刪除第三列上所有元素後,矩陣如下:A = 16 2 13<br/>5 11 8<br/>9 7 12<br/>4 14 1
②使用單下標刪除矩陣相關操作和賦值語句基本相同,在命令窗口中輸入:
&gt;&gt; A=magic(4) %生成四階的魔方陣
&gt;&gt; A(15)=[] %刪除A矩陣的第15個元素,此時A成爲15個元素的行向量;

注意: 使用矩陣元素刪除操作時,不允許使用具體下標的形式刪除某行或者某列中的單個元素,否則,無法形成矩陣。因此通常採用整行或者整列元素的刪除方式。

【例2.13】生成大矩陣
在MATLAB中,可以通過方括號“[]”實現對已有的矩陣進行擴展,將小矩陣聯接起來生成一個較大的矩陣。MATLAB提供了反轉、提取、插入、重組等多種操作,在後面的相關章節會有所介紹,在這裏只簡單的介紹將兩個比較小的矩陣合併爲一個比較大的矩陣的操作。首先在MATLAB工作空間創建一個四階的單位對角陣:
&gt;&gt;A=eye(4) %生成對角單位陣列
以單位矩陣A爲基礎,通過矩陣的合併生成比較大的矩陣。
①將矩陣A上下疊加生成新矩陣。在命令窗口中輸入:
&gt;&gt; B=[A;A] %上下重疊矩陣,相當於操作reshape(A,2,1)
②將矩陣A左右疊加生成新矩陣。在命令窗口中輸入:
&gt;&gt; C=[A A] %左右疊加矩陣,相當於操作reshape(A,1,2)

(3)矩陣的特殊操作
MATLAB提供了對矩陣的特殊操作,比較常用的有矩陣的上三角和下三角矩陣的提取、矩陣翻轉和旋轉等操作詳見表2.4所示。
函數名 功能
triu(X) 產生X矩陣的上三角矩陣,其餘元素補0
tril(X) 產生X矩陣的下三角矩陣,其餘元素補0
flipud(X) 使矩陣X沿水平軸上下翻轉
fliplr(X) 使矩陣X沿垂直軸左右翻轉
Flipdim(X,dim) 使矩陣X沿特定軸翻轉。dim=1,按行維翻轉;dim=2,按列維翻轉
rot90(X) 使矩陣X逆時針旋轉90º

【例2.14】矩陣特殊操作的示例
首先在MATLAB命令行窗口中輸入以下命令,生成四階的魔方陣:
&gt;&gt; X=magic(4) %生成四階的魔方陣
下面將以矩陣X爲基礎,進行矩陣的三角矩陣提取、矩陣的翻轉和旋轉等各種操作。表2.4中已經詳細地介紹了矩陣的相關操作函數,這裏不一一舉例演示相關函數的使用。提取矩陣X上三角矩陣操作,可在命令窗口中輸入:
&gt;&gt; triu(X) %提取矩陣的上三角矩陣,下三角元素爲零
提取得到的矩陣X的上三角矩陣如下:
ans =<br/>16 2 3 13<br/>0 11 10 8<br/>0 0 6 12<br/>0 0 0 1

作者:德特數據
聯繫方式:[email protected]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章