MATLAB的数据与运算(二)

MATLAB中的数组与矩阵

看到数组和矩阵,第一个想到就是两者的区别是什么?

矩阵是数学上的概念,最早来自于方程组的系数及常数所构成的方阵。这一概念由19世纪英国数学家凯利首先提出。

数组是在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来的一种形式。这些按序排列的同类数据元素的集合称之为数组。

在MATLAB中,数值数组和数组运算构成了其核心内容,而矩阵在某些情况下可以看做是一个二维的数组,两者是相互联系的。下面对数组,矩阵的构造以及矩阵的相关运算进行简单的介绍。

1.数组的创建

(1).直接构造法

a=[2,3.8,1/3,4,sqrt(2)] %采用逐个元素输入法构造数组

(2).增量法

%格式如下
a=初始值:增量(可缺省,默认增量为1):终止值

在使用数组时需要注意,数组元素要用[]为首尾,数组的行列之间用分号分隔,数组元素之间用“,”或者空格分隔。

2.矩阵的构建

(1).直接赋值法
元素较少时可以采用如下方法进行直接输入

a=[1 2 3;4 5 6;7 8 9]
% 复数矩阵的构造,对于虚数单位i,j可以看做一种运算量参与表达式的运算
R=[1,2,3;4,5,6];
I=[8,9,11;12,13,15];
ri=R*i+i;
ri=
	8.0000+1.0000i   9.0000+2.0000i   11.0000+3.0000i
	12.0000+4.0000i  13.0000+5.0000i  15.0000+6.0000i

(2).建立大矩阵
大矩阵可以由小矩阵来建立。
矩阵
其中eye(size(a))表示一个3x3单位矩阵,ones(3)表示一个3x3的全1矩阵。

(3).增量赋值法
增量构造矩阵

3.矩阵中元素信息的获取

(1).矩阵元素
A(i,j)表示第i行,第j列的元素值
A(i)表示序号为i对应的矩阵元素(序号是按列编号,先第一列,再第二列,以此类推)

序号(index)和下标(subscript)是一一对应的,我们可以用sub2ind,ind2sub函数求得

size(A)函数返回矩阵的行数和列数

length(A)得到行数和列数中较大值

ndims(A)给出A的维数

reshape(A,m,n)在数组总元素保持不变的情况下,将矩阵A重新排列成一个mxn的新矩阵。

(2).矩阵的拆分
A(:,j)表示取矩阵A第j列全部元素
A(i,:)表示取矩阵第i行全部元素
A(i:i+m,:)表示取矩阵第i~i+m行的全部元素
A(:,k:k+m)表示取矩阵第k~k+m列的全部元素
A(i:i+m,k:k+m)表示取第i~i+m行内,j ~j+m列内的所有元素
A( : )表示将每一列元素堆叠起来,变成一个列向量。
矩阵1
X=[ ]表示一个空矩阵,其维数为0。在实际应用中,我们可以用空矩阵去删除某些元素。

4.矩阵的运算

MATLAB提供了强大的矩阵运算的功能,运算法则和线性代数中矩阵的运算相同。(以下运算均在可进行的条件下进行运算)
(1).矩阵的算术运算
加法运算符 ‘+’ 减法运算符‘-’ 乘法运算符‘
‘.
’指的是两个矩阵之间对应的元素之间相乘
点乘
求逆运算: 用函数inv
除法运算: A\B表示A左除B,即A的逆与B相乘,可以看做是方程Ax=B的解。
A/B表示A右除B,即A与B的逆相乘。
乘方运算: 表示为A^P。
转置: A’,如果A是复数矩阵,A’表示复数矩阵的共轭转置。

(2).矩阵的翻转和旋转
在MATLAB中我们可以利用翻转和旋转生成新的矩阵。

函数 调用格式 功能
fliplr B=fliplr(A) 实现矩阵的左右翻转
flipud B=flipud(A) 实现矩阵的上下翻转
flipdim B=flipdim(A,dim) 将矩阵或者多维数组按照指定维数翻转,dim为1时,相当于B=flipud(A),dim为2时,相当于B=fliplr(A)
rot90() B=rot90(A) 将A逆时针旋转90度
rot90(A,k) B=rot90(A,k) 将A逆时针旋转k*90度,k为负数时表示顺时针旋转

(3).矩阵的提取
diag函数用于生成矩阵,也可以用来提取矩阵的对角线元素。调用格式如下:

X=diag(v,k) %向量v的元素位于X的第k条对角线上。
%k=0表示在主对角线上,k>0在主对角线以上。

X=diag(v) % 相当于X=diag(v,0)

v=diag(X,k) % 向量v中的元素由X的第k条对角线上的元素构成

v=diag(X) % 相当于v=diag(X,0)

tril函数实现下三角矩阵的提取。调用格式如下:

L=tril(X) %返回矩阵X的下三角部分,其余用0补齐
L=tril(X,k) %返回矩阵X第k条对角线以下元素,其余用0补齐

triu函数实现下三角矩阵的提取。调用格式如下:

L=triu(X) %返回矩阵X的上三角部分,其余用0补齐
L=triu(X,k) %返回矩阵X第k条对角线以上元素,其余用0补齐

blkdiag函数实现生成分块对角矩阵

out=blkdiag(a,b,c,d...) %a,b,c,d为矩阵,例子如下:

blkdiag
(4).矩阵的集合
在MATLAB中,可以对向量或矩阵进行集合的交,并,差,异或运算。这里解释一下异或集,A异或B表示属于A但不属于B或者属于B但不属于A的元素构成的集合。

intersect函数实现集合的交集

C=intersect(A,B) 
C=intersect(A,B,'rows') %C为一个A,B公共行构成的矩阵,A,B必须列数相同。
[c,ia,ib]=intersect(a,b) %a,b是向量,c为a,b元素交集,ia为c在a中的位置,ib为c在b中位置。

union函数实现集合的并集

C=union(A,B) 
C=union(A,B,'rows') %C的每一行是A,B的对应行相并,A,B必须列数相同。
[c,ia,ib]=union(a,b) %a,b是向量,c为a,b元素并集,ia为c在a中的位置,ib为c在b中位置。

setdiff函数实现集合的差集

C=setdiff(A,B) 
C=setdiff(A,B,'rows') %C的每一行是属于A但不属于B,A,B必须列数相同。
[C,I]=setdiff(A,B) %I表示C中元素在A中原来的位置

setxor函数实现集合的异或集

C=setxor(A,B) 
C=setxor(A,B,'rows') %C的每一行是属于A但不属于B或者是属于B但不属于A,A,B必须列数相同。
[c,ia,ib]=setxor(A,B) %ia为c在A中的位置,ib为c在B中位置。

ismember函数检测一个集合中的元素是否出现在另外一个集合中

tf=ismember(A,S) %tf和A大小相同,只包含0,1,当A的元素出现在S中时,tf中相应位置为1
tf=ismember(A,S,'rows') %tf和A行数相同检测A中的行在S中是否出现,A,S列数必须相同。

unique函数实现去掉集合中重复的元素

b=unique(A) 
b=unique(A,'rows') %去除相同行
[b,m,n]=unique()  %m为b在A中的位置,n为b在A中位置。

样例如下(以intersect为例,其它函数类似):
交1
交2

参考资料

猜你喜欢

转载自blog.csdn.net/weixin_44595362/article/details/104014745