前言:
Matlab用了有很多年了,有很多矩阵运用的小技巧经常忘,还需要重新找很麻烦,因此总结一下,文中某些专业函数的解释是参照别人的解释写的,可能有重复,望海涵。对大家有帮助的话可以点个赞,算是对我码字的认可,谢谢大家,有错误的地方望大佬指正!
一、矩阵和元胞数组的使用
在Matlab中常用的数组储存方式主要有两种,矩阵和元胞
1.数据为单(多)组一维和单组二维数据时,使用矩阵/一维数组进行储存
例如:
2.数据为多组二维数据时,使用元胞数组同时进行多个矩阵的储存
例如:
二、矩阵和元胞数组的生成
矩阵的生成方式主要有数据读取、随机生成、0/1生成以及特殊矩阵(单位阵等)的生成,数据的读取相信大家都很熟悉,使用xlsread等函数即可,因此主要讲述下面几种矩阵的生成方法。这里包括一维数组的生成,本人使用的时候一般不会区分,所以并没有分开说。
1. 随机矩阵
rand:产生均值为0.5、幅度在0~1之间的伪随机数
A=rand(n):生成0到1之间的n阶随机数方阵A
A=rand(m,n):生成0到1之间的m×n的随机数矩阵A
randn:产生均值为0方差为1的正态分布的随机数
同样的,A=randn(n)是生成方阵,A=randn(m,n)是生成m×n的矩阵
2. 0/1矩阵
zeros:生成全为0的矩阵
A=zeros(n):生成全为0的方阵
A=zeros(m,n):生成全为0的m×n的矩阵
ones:生成全为1的矩阵
同样的,A=ones(n)是生成全为1的方阵,A=ones(m,n)生成全为1的m×n的矩阵
3.单位矩阵
A=eye(m,n):生成m×n的单位矩阵
A= diag(a,k):生成第k行对角线元素为a其他元素为0的矩阵,k=0时为主对角线,k=1时为主对角线上一层对角线,-1为下一层对角线。
例如:A=diag([1,1,1],0) A=diag([1,1,1],1) A=diag([1,1,1],-1)
将A矩阵中k层对角线元素替换为特定的矩阵的方法:
将A矩阵中主对角线下一层(k=-1)对角线的值替换成[5,6]。
A=ones(3);
A=A-diag(diag(A,-1),-1)+diag([5,6],-1)
4.顺/逆序数组
生成方法为A=(起始值;增长长度(可为负增长);终止值)
A=(1:1:10): A=[1,2,3,4,,6,7,8,9,10],可缩写为A=(1:10)默认增长单位为1
A=(10:-1:1): A=[10,9,8,7,6,5,4,3,2,1]
5.元胞数组
A=cell(n):生成一个n×n的空值元胞数组
A=cell(m,n):生成一个m×n的空值元胞数组,类似于矩阵
A={X,Y,Z}:生成元胞数组{[X],[Y],[Z]},其中X、Y、Z可为具体矩阵和矩阵符号
例如:A={[1,2],[3,4],[5,6]}
三、矩阵和元胞数组的运算
1.矩阵的拼接
A=[B,C]:将C矩阵放到B矩阵的后面,A=[[1,2],[3,4]]为[1,2,3,4]
A=[B;C]:将C矩阵放到B矩阵的下一行,A=[[1,2];[3,4]]为[1,2;3,4]。注:拼接行矩阵需要维数一致,否则无法拼接!可以补0
A=reshape(A,n,m):(A中必须满足有m×n个元素)把A中元素按照列读取,然后按照行拼接
例如把A从3行4列换成4行3列,按照列的顺序读取并存储
A=[[1,2,3,4];[5,6,7,8];[9,10,11,12]];
A=reshape(A,4,3)
变换一下按照行的顺序读取,按照列的顺序存储
A=[[1,2,3,4];[5,6,7,8];[9,10,11,12]];
A=reshape(A',4,3)
2.矩阵的普通运算
矩阵的符号运算中*要换成.*,^要换成.^,+、-和/则不需要。
例如:
A=[1,2,3,4];
B=[5,6,7,8];
C=A.*B
3.元胞数组的运算
元胞数组的运算可以看作将矩阵从元胞中提取出来后的矩阵运算,因此只介绍矩阵的提取。
例如:把元胞中的第m行第n列个矩阵提取出来:a={m,n}。必须要大括号,否则提取出来的不是矩阵。
A={[1,2,3],[4,5,6],[7,8,9]};
a=A{1,1}
零零总总写了这么多,也花了自己一上午的时间,希望大家看完了可以点个赞,麻烦大家了啦~以后还会更新各类算法的代码,有需要的也可以私聊我~