Matlab线性代数基础---矩阵操作

来源:互联网 发布:开发上位机界面软件 编辑:程序博客网 时间:2024/05/21 17:45

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(5A =    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)=[]%%45行进行赋值为空,即为删除45行。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);>> CC(:,:,1) =     8     1     6     3     5     7     4     9     2C(:,:,2) =     1     1     1     1     2     3     1     3     6>> DD =     8     1     6     3     5     7     4     9     2     1     1     1     1     2     3     1     3     6>> EE =     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矩阵的上下翻转。

旋转的实例:

>> AA =     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    23      4      3     4    3    41     2     1     2     1     23     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     1B(:,:,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>>