源自於http://bime-matlab.blogspot.com/2006/09/25.html
矩陣疊加
利用幾個行向量或列向量相搭配,也可以湊出另一個新的矩陣。以A矩陣為例,可以自我疊加,或與其他同大小的矩陣疊加:
>>A=[1 2 3;4 5 6];
>>B=[A;A]
B =
1 2 3
4 5 6
1 2 3
4 5 6
>> C=[A' A']
C =
1 4 1 4
2 5 2 5
3 6 3 6
>> D=[A' A';B']
D =
1 4 1 4
2 5 2 5
3 6 3 6
1 4 1 4
2 5 2 5
3 6 3 6
結果,B為4x3大小之矩陣;C為3x4大小之矩陣。後者之A必須先行轉置,才能進行合併。
>> size(A)
ans = 2 3
>> size(B)
ans = 4 3
矩陣次標
要指出某矩陣中之元素,或取出運用必須有一套方法,通常就其位置在第幾列第幾行呼之,如:
>> A A = 1 2 3 4 5 6
>> A(1)
ans = 1
>> A(2)
ans = 4
>> A(3)
ans = 2
>> A(1,3)
ans = 3
>> [A(1,3) A(2,2) A(1,2)]
ans = 3 5 2
所以利用這種直接呼叫的方式,也可以另組一個新的矩陣,但仍必須加中括號規範之。若所要取出的元素是鄰近的位置,則可用n1:n2之表示法,以上述之C矩陣為例:
A = 1 2 3 4 5 6>> A(1,1:2) ans = 1 2 >> A(1,1:3) ans = 1 2 3
若要取得其中之全行,則僅使用冒號(:),前後不加數字即可
>> A
A =
1 2 3
4 5 6
>> C
C =
2 3 4 6
1 2 3 4
4 3 2 1
>>D=[A(1,:)' C(:,2:3)]
D =
1 3 4
2 2 3
3 3 2
如果所選取的行或列並不相鄰,則可以用中括號將所要的行或列直接列舉,
如將C矩陣中之第一、三、四行抽出成立E矩陣:
>> C
C =
2 3 4 6
1 2 3 4
4 3 2 1
>> E=C(:,[1,3,4]) %C矩陣中之第一、三、四行抽出成立E矩陣
E =
2 4 6
1 3 4
4 2 1
空矩陣也是一個常用的矩陣,實際上其內並不含任何元素,它常以[ ]表示。如果矩陣中某一行或列被此空矩陣取代,
表示將該行或該列將被刪除。
E =
2 4 6
1 3 4
4 2 1
>> E(2:3,:)=[]
E = 2 4 6
此時之E矩陣由於二及三列被取代為空矩陣,故只剩下孤單單的一個列矩陣了。
在矩陣之排序中,即使為二維矩陣,它仍有一定的排序順序。實際上其計數是
以行為順序進行計數,
>> AA=[1 2 3;4 5 6;7 8 9]
AA =
1 2 3
4 5 6
7 8 9
>> AA(3,2)
ans = 8
>> AA(6)
ans = 8
一個矩陣亦可由不同的區塊矩陣組成,例如:上述之A為[3 x 3]矩陣,
加上其他可以組成另一個 [6x4] 之B矩陣:>> A=[1 2 3;4 5 6;7 8 9]
再次請特別注意,矩陣中之”;”表示置於下一列,而”,”表示接續於下一行之意。
A =
1 2 3 4 5 6 7 8 9
>> B = [A, zeros(3,1); 4*ones(3,3), [1;2;3]]
B =
1 2 3 0
4 5 6 0
7 8 9 0
4 4 4 1
4 4 4 2
4 4 4 3
矩陣之重組
若要重排原來矩陣之型式,可以利用reshape函數,其第二及三個參數即為要改變之大小:
>> d=reshape(B,3,8)
d =
1 4 2 4 3 4 0 1
4 4 5 4 6 4 0 2
7 4 8 4 9 4 0 3
>> d=reshape(B,8,3)
d =
1 8 4
4 4 4
7 4 0
4 4 0
4 3 0
4 6 1
2 9 2
5 4 3
>> d=reshape(B,4,6)
d =
1 4 8 3 4 0
4 4 4 6 4 1
7 2 4 9 0 2
4 5 4 4 0 3
無論如何改變,注意其順序係先取行向,逐行取盡。若非此種取向,則B矩陣需先行轉置。
下面的例子為利用reshape之函數組成新矩陣AA之例子:
>> AA =reshape(1:9,3,3)
AA =
1 4 7
2 5 8
3 6 9>> AA =reshape(1:16,4,4)
AA =
1 5 9 13
2 6 10 14
3 7 11 15
4 8 12 16
若將其中對角線之元素累加,則得:
>> AA(1,1)+AA(2,2)+AA(3,3)
ans = 15
若相取出某一項超出矩陣範圍的元素時,程式會發出錯誤的信息:
>> AA(2,4)??? Index exceeds matrix dimensions.
但是也將矩陣之特定元素更換其值,例如:
>> AA(1,1)=10
AA =
10 4 7
2 5 8
3 6 9
第一項之值即單獨改變。但若將某值給予超出矩陣的位置時,矩陣倒可以隨機應變,增加其大小,其餘未有給值的元素一律給零,例如:
>> AA(2,4)=10
AA =
10 4 7 0
2 5 8 10
3 6 9 0
這個特性有時可以多加利用,但如果在程式中,一再利用這種擴充方式,可能會增加電腦之計算時間。實際上應用時,應加以考慮。
沒有留言:
張貼留言