matlab数组运算与数组化编程

寵の児 提交于 2020-02-01 04:27:21

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的并集)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!