matlab中的运算和操作主要是以数组为对象的, 数组又包括:数值数组、字符数组、元胞数组等。
一、数值数组的建立:
1. 直接输入法:
逗号:用来分开数组中的行元素。(可用空格代替)
分号:用来将数组中的行分开。 (可用回车键代替)
中括号[ ]:界定数组的首与尾。
a=[1,2,3,8,-1],
b=[1;2;3;8;-1],
A= [2,4,1;0,-2,4;2,4,6]
2.通过数组编辑器生成矩阵
步骤:先建立空矩阵a=[], 然后在工作空间(workspace)中点开a进入数组编辑器,输入元素。
3. 数据导入法:
matlab可在主界面上直接导入excel文件、纯文本文件中的数据。
4.用函数创建数组
定步长生成法: x=a:t:b (t步长,省略是为1);
定数线性采样法: x=linspace(a,b,n),a与b是数组的第一个和最后一个元素,n是采样的总点数。
zeros(m): m阶全零方阵
zeros(m,n): m×n阶全零阵
eye(m): m阶单位阵
eye(m): m阶单位阵
ones(m,n): m×n阶全1方阵
rand(m): m阶在[0,1]上均匀分布随机方阵
randn(m): m阶标准正态分布随机方阵
rand(m,n), randn(m,n)
二、字符数组、元胞数组的建立:
字符数组输入法:用单引号输入字符数组,如:A=‘matlab’
元胞数组是MATLAB的一种特殊数据类型,可以将元胞数组看做一种无所不包的通用矩阵,或者叫做广义矩阵。 组成元胞数组的元素可以是任何一种数据类型的量,每一个元素也可以具有不同的尺寸,每一个元素的内容也可以完全不同,元胞数组的元素叫做元胞。
建立元胞数组:
逗号:用来分开数组中的行元素。(可用空格代替)
分号:用来将数组中的行分开。 (可用回车键代替)
大括号{}:界定数组的首与尾。
如:a={'matlab',20;ones(2,3),1:10}
二、数组的操作:
数组的编址:数组a建立后,a中各元素的编址方法如下:
单下标编址:a(1)表示a的第1个元素,a(n)表示a的第n个元素。对于二维数组按列优先原则进行单下标编址。
双下标编址:a(2,3)表示矩阵a的第2行第3列元素。
1. 数组元素与子数组的提取
提取数组a的第3个元素:y=a(3)
提取a的第3到7个元素:y=a(3:7),
format
a=linspace(1,20,7)
b=a(1:3:5)
b1=a(5:-3:2)
b2=a(a>1)
二维数组A的元素的提取:
由于数组A有两种编址方法,matlab会根据接受的指令,先判断是哪一种编址方法,然后再进行元素的提取。
如:
A=[1,2,3,4,5;0,1,2,3,4;-1,0,1,2,3;-2,-1,0,1,2]
b1=A(5)
b2=A(2,3)
b3=A(2,:)
b4=A([2,3])
b5=[A(2,:);A(1,:)]
b6=A([2,4],[3,5])
b7=A([2,4],[3,5,1])
2.改变数组中的元素值与数组的拼接
a=1:2:11
a(1)=0
a(1:4)=[2,-1,-2,-3]
a([2,5])=[1.5,0.5]
x=0:2:10,
y=[-2,-5,-8]
xx=[x,y]
yy=[xx([2,5]);y(2:3)]
空数组的使用:
建立空数组A: A=[ ] ,空数组大小任意。
可用空数组删除已有数组中的元素
B=1:8
B(1:2:5)=[]
B = 2 4 6 7 8
A=[2,3,4,5,6;1,2,3,4,5;0,1,2,3,4;-1,0,1,2,3]
删除矩阵A第3行:A(3,:)=[]
删除矩阵A第2列:A(:,2)=[]
3.常用的数组操作命令
(1)确定数组大小命令
找出数组A行数与列数的最大值:n=length(A)
提取数组A的行数与列数:[m,n]=size(A)
找出数组A的元素总个数:N=numel(A);
(2)排序命令 将一维数组x的元素排序: x=[3,-1,2,5,7,4,6,11,13,9,2,0,7,8] b=sort(x), [b,k]=sort(x)
(3)改变数组形状的命令 x=[3,-1,2,5,7,4,6,11,13,9,2,8] 将一维数组x按条件转化为矩阵: B=reshape(x,3,4)
(4)数组的复制: c=[1,2,5] c1=repmat(c,4,1) c2=repmat(c,1,4) c3=repmat(c,3,2) c4=repmat(c,3)
(5)稀疏矩阵与满矩阵的转化:
稀疏矩阵生成命令:sparse(a,b,c) 数组a,b,c的大小必须相同 数组a与b分别指定元素的行标与列标, 数组c指定元素的值 A=sparse([2,4,18],[3,12,20],[-5,-3,-8]) 创建稀疏矩阵A,A的(2,3),(4,12),(18,20)元素分别为-5,-3,-8,其余元素为零,A为18×20阶矩阵。 将稀疏矩阵x变回满矩阵: A=full(A)
(6) sum(A):矩阵A按列求和,返回一个行向量;
sum(A,2):矩阵A按行求和,返回一个列向量。
max(A):返回由矩阵各列的最大值构成的向量。
max(A,B):返回A与B对应元素最大值构成的矩阵
min(A),min(A,B)类似
(7)diag命令
b=diag(A): 提取方阵A的对角线元素构成列向量b
A=diag(b): 用一维数组b的元素生成对角方阵A
A=diag(b,k): (b为一维数组,k为整数) 将b元素作为偏离主对角线的第k条对角生成方阵A
b=[2,3,-1,5,6], A=diag(b,1) B=diag(b,-2)
(8) find命令:
find(A) 找出A的不为0的元素的下标
find(A,k) 找出A的前k个不为0的元素的下标
find(A,k,’last’)找出A的后k个不为0的元素的下标
find(g(A)),其中g(A)是数组A的逻辑表达式,返回数组A中满足条件g(A)的元素下标。
A=[0,0,2,-1,3,0,0,5,0,6,-7,0,0,9];
b1=find(A,3)
b2=find(A,2, 'last')
B=[0,1,0;2,3,0;4,0,0]
c1=find(B)
[m,n]=find(B)
B=[0,1,0;2,3,0;4,0,0]
t=find(B>2)
[x,y]=find(B>2)
[m,n]=find(B>=1&B<=3)
(9) 排列组合
求组合nchoosek(a,k) D=nchoosek(5,2)
a=[3,2,1,7]; M=nchoosek(a,2)
b='wxyz' N=nchoosek(b,3)
求连乘积 c1=prod(4:6) c2=cumprod(4:6)
求向量的全排列 perms([2,1,8])
(10) 其它命令:
fliplr: 将矩阵左右反转
flipud:将矩阵上下反转
rot90: 将矩阵按逆时针旋转
tril: 提取矩阵的主下三角部分
triu: 提取矩阵的主上三角部分
clc,clear
a=[8,4,3,2
4,6,2,2
3,6,2,1
2,2,0,7]
b1=fliplr(a)
a, b2=rot90(a)
a, b3=tril(a)
11. 元胞数组元素的提取与操作:
()和 { }有着本质的区别, { } 表示元胞的内容, ()表示指定的元胞。
三、数组的运算
1.数组的数值运算 数组的数值运算,也称点运算,是同阶数组对应分量之间的运算。包括点乘、点除和点乘方,对应的运算符号为 .* , ./ .^ 这些运算符的公共特点是在算符前加上一个英文句号,以便与对应的矩阵运算相区别。 设A与B为同阶数的数组,k为常数, A+B,A-B,k*A A.*B, A./B, A.^n
则:a+b= [a1+b1,a2+b2,…,an+bn]
a.*b= [a1*b1,a2*b2,…,an*bn]
a./b= [a1/b1,a2/b2,…,an/bn]
a.\b=[b1/a1,b2/a2,…,bn/an]
a.^b=[a1^b1,a2^b2,…,an^bn]
2.关系运算与逻辑运算 关系运算:不等于:~=
3. 数组的集合运算
a=1:12; b=2:10; setdiff(a,b) (a与b的差集) 得:1,11,12
intersect(a,b) (a与b的交集)
得:2,3,4,5,6,7,8,9,10
union(a,b)(a与b的并集)
来源:CSDN
作者:mmk27
链接:https://blog.csdn.net/mmk27_word/article/details/104065215