2、矩陣的基本操作
2.1 矩陣的修改
1、矩陣的擴充:D = [A;B C] A爲原來的矩陣,B C爲包含要擴充的元素,D爲擴充結果
2、刪除行:A= [m; :] = [ ]:刪除m行
3、A=[:,n]=[ ]:刪除第n列
4、A(m,n)=a,對m行n列的元素進行賦值爲a。
5、A(m, :)=[a,b……]:對m行進行賦值。
6、A(:, n)=[a,b……]:對n列進行賦值。
實例:
>> A = magic(5
A =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
>> A(:,4:5)=[]%%對4行5行進行賦值爲空,即爲刪除4、5行。
A =
17 24 1
23 5 7
4 6 13
10 12 19
11 18 25
2.矩陣的拼接:cat()、vercat()、horzcat();
調用格式:
C = cat(dim,A ,B):參數dim爲連接方向,dim的選值:
dim = 1,垂直方向上拼接矩陣;
dim = 2,水平方向上拼接矩陣;
dim = 3, 生成三維矩陣。
C = horzcat(A1,A2,A3,……),水平方向拼接多個矩陣A1,A2……,此時參數中的矩陣必須具有相同的行數。
C = vercat(A1,A2,A3,……),豎直方向拼接多個矩陣A1,A2……,此時參數中的矩陣必須具有相同的列數。
矩陣拼接的實例:
>> A = magic(3);
B = pascal(3);
C = cat(3,A,B);
D = vertcat(A,B);
>> E = horzcat(A,B);
>> C
C(:,:,1) =
8 1 6
3 5 7
4 9 2
C(:,:,2) =
1 1 1
1 2 3
1 3 6
>> D
D =
8 1 6
3 5 7
4 9 2
1 1 1
1 2 3
1 3 6
>> E
E =
8 1 6 1 1 1
3 5 7 1 2 3
4 9 2 1 3 6
>>
2.3矩陣的變向:
rot90(A):實現矩陣A的逆矩陣的90°;
rot90(A,k);實現矩陣A逆時針旋轉90°的k倍;
filplf(A):實現A矩陣的左右翻轉;
flipud(A):實現A矩陣的上下翻轉。
旋轉的實例:
>> A
A =
8 1 6
3 5 7
4 9 2
>> rot90(A)
ans =
6 7 2
1 5 9
8 3 4
>> flipud(A)
ans =
4 9 2
3 5 7
8 1 6
>>
2.4矩陣的抽取:主要是實現對對角元素和上下三角陣的抽取。對角矩陣和三角矩陣的抽取調用格式爲:
X = diag(V,k);其中V是一個向量,k爲相對於矩陣X的對角線的偏移,K大於1,表示在對角線以上(右上)反之:k爲負數,在主對角線左下。當k=0,表示對v賦值爲X的主對角線。
實例:
X = diag(v,k)的運用實例:
以向量v的元素作爲矩陣X的第k條對角線元素,當k=0時,v爲X的主對角線;當k>0時,v爲上方第k條對角線;當k<0時,v爲下方第k條對角線。
例:
>> v=[1 2 3];
>> x=diag(v,-1)
x =
0 0 0 0
1 0 0 0
0 2 0 0
0 0 3 0
>> X = diag([1,1,1],0)
X =
1 0 0
0 1 0
0 0 1
>>
矩陣的抽取tril()函數
L =tril(X):返回X矩陣的下三角部分,其餘部分以0補全;
L = tril(X,k):返回X矩陣的第k 條對角線以下的元素,其餘補全0;k=0爲表示爲主對角線,k<0爲左下,k>0爲右上。
L =triu(X):返回矩陣X的上三角部分。
L = triu(X,k):返回X矩陣的第k 條對角線以上的元素,其餘補全0;k=0爲表示爲主對角線,k<0爲左下,k>0爲右上。
實例:
>> tril(ones(4,4),-1)
ans =
0 0 0 0
1 0 0 0
1 1 0 0
1 1 1 0
>> triu(ones(4,4),-1)
ans =
1 1 1 1
1 1 1 1
0 1 1 1
0 0 1 1
>>
2.5矩陣塊操作:
矩陣的分塊操作調用格式:
B =repmat(A,m,n)或者B = repmat(A,[m,n]):產生大的矩陣B,對矩陣A 這個塊進行mxn的合成:最後生成的B的A的行列數乘以mxn的分別積
例子:A爲2x2,生成mxn爲2x3的矩陣,結果爲4x9列。
>>B=repmat( [1 2;3 4],2,3)%A爲2x2,生成mxn爲2x3的矩陣,結果爲4x9列。
B =
1 2 1 2 1 2
3 4 3 4 3 4
1 2 1 2 1 2
3 4 3 4 3 4
B =repmat(A,[m,n,p]):A爲矩陣,m,n,p分別是生成m行、n列、p維的矩陣
例子:
B = repmat(eye(2),[2,1,2])
B(:,:,1) =
1 0
0 1
1 0
0 1
B(:,:,2) =
1 0
0 1
1 0
0 1
>>
另外還有一個塊操作函數:blkdiag(a,b,c,d……),把a,b,c,d多個矩陣作爲對象塊,產生新的矩陣。
3.6、矩陣的轉置:A’
例子:
>> a = [1,2,3;4,5,6]
a =
1 2 3
4 5 6
>> a'
ans =
1 4
2 5
3 6
從例子中看得出:矩陣轉置就是行變換爲列,列變換爲行。
3.7、矩陣的尺寸改變
reshape(B,m,n, p):B爲待2重置的矩陣,m,n,p爲新建的行、列、頁數
reshape(B,……[ ] ,……):B爲待重置的數組,【】爲被置空的列或者行,其中【】x行(列)等於B的總元素數。
注意,改變矩陣的尺寸,但是矩陣的總元素數不變:sum(size(B))=m+n+p。
實例:
>> A = [1 2 3 4;7 8 9 6;4 5 7 9;1 5 7 9]
A =
1 2 3 4
7 8 9 6
4 5 7 9
1 5 7 9
>> b= reshape(A,2,8)
b =
1 4 2 5 3 7 4 9
7 1 8 5 9 7 6 9
>>