《第一章 Matlab中的数组操作课件》由会员分享,可在线阅读,更多相关《第一章 Matlab中的数组操作课件(33页珍藏版)》请在金锄头文库上搜索。
1、1,MATLAB基础应用,2,第一章 Matlab中的数组操作,matlab中的运算和操作是以数组为对象的, 数组又包括:数值数组、字符数组、元胞数组等。 数值数组:(1)n元数值向量(行向量与列向量) (2)数值矩阵 (3)由数值矩阵构成的元胞数组,几个标点符号的作用: 逗号:用来分开数组中的行元素。(可用空格代替) 分号:用来将矩阵中的行分开。 (可用回车键代替) 冒号:相当于文字中的省略号。 中括号:界定数组的首与尾。,3,一、数组的建立 1.直接输入法 matlab在创立数组时以逗号或空格表示分列,分号或回车表示分行。数组开头“”、结尾“” 行数组:如a=1,2,3,8,-1 列数组:
2、 b=1;2;3;8;-1 或a 矩阵:A= 2,4,1;8:-2:4;2,4,6,4,2.通过数组编辑器生成矩阵 步骤:先建立空矩阵a=, 然后在工作空间(workspace)中点开a进入数 组编辑器,输入元素。,3.用函数创建数组,定步长生成法: x=a:t:b (t步长,省略是为1); 定数线性采样法: x=linspace(a,b,n), a与b是数组的第一个和最后一个元素, n是采样的总点数。,x=linspace(2,5,6),x = 2.0000 2.6000 3.2000 3.8000 4.4000 5.0000,5,zeros(m): m阶全零方阵,zeros(m,n): m
3、n阶全零方阵,eye(m): m阶单位阵,ones(m): m阶全1方阵,ones(m,n): mn阶全1方阵,rand(m): m阶均匀分布随机方阵,randn(m): m阶标准正态分布随机方阵,rand(m,n), randn(m,n),6,4.元胞数组的创建,元胞数组是MATLAB的一种特殊数据类型, 可以将元胞数组看做一种无所不包的通用矩阵, 或者叫做广义矩阵。 组成元胞数组的元素可以是任何一种数据类型的量,每一个元素也可以具有不同的尺寸,每一个元素的内容也可以完全不同,元胞数组的元素叫做元胞。 建立元胞数组: ,a=matlab,20;ones(2,3),1:10,a = matla
4、b 20 2x3 double 1x10 double,7,二、数组的操作 数组的编址:数组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),8,a=linspace(1,20,6),a = 1.00 4.80 8.60 12.40 16.20 20.00,提取a的第1,3,5个元素构成数组b: b=a(1:2:5) 提取a的第2到5
5、个元素,并反转次序构成数组b1: b1=a(5:-1:2) 按条件提取子数组: 提取a的元素值大于10的元素构成数组b2 b2=a(find(a10),b1 = 16.2000 12.4000 8.6000 4.8000,b2 = 12.40 16.20 20.00,9,1 2 3 4 5 0 1 2 3 4 -1 0 1 2 3 -2 -1 0 1 2,b1=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),二维数组A的元素的提取: 由于数组A有两种编址方法,matlab会根据接受的指令,先判断是哪一
6、种编址方法,然后再进行元素的提取。 如: A=1,2,3,4,5;0,1,2,3,4;-1,0,1,2,3;-2,-1,0,1,2,b6= 2 4 0 2,b7=A(2,4,3,5,1),b7= 2 4 0 0 2 -2,b2=2,b5=0 1 2 3 4 1 2 3 4 5,b3=0 1 2 3 4,b4=0,-1,10,元胞数组元素的提取:,()和 有着本质的区别, 表示元胞的内容, ()表示指定的元胞。,a=matlab,20;ones(2,3),1:10;ones(4,5),eye(4),a = matlab 20 2x3 double 1x10 double 4x5 double 4
7、x4 double,11,a = matlab 20 2x3 double 1x10 double 4x5 double 4x4 double,b = 4x4 double,b=a(3,2),b=a3,2,b = 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1,a2,3=cell(2),改变元胞数组元素的元胞:赋值,a = matlab 20 2x3 double 1x10 double 2x2 cell 4x5 double 4x4 double ,12,2.改变数组中的元素值数组的拼接,a=1:2:11,a= 1 3 5 7 9 11,a(1)=0,a= 0 3 5 7 9
8、 11,a(1:4)=2,-1,-2,-3,a= 2 -1 -2 -3 9 11,a(2,5)=1.5,0.5,a= 2 1.5 -2 -3 0.5 11,x=0:2:10, y=-2,-5,-8,x = 0 2 4 6 8 10,y = -2 -5 -8,xx=x,y,xx = 0 2 4 6 8 10 -2 -5 -8,yy = 2 8 -5 -8,yy=xx(2,5);y(2:3),13,空数组的使用: 建立空数组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,
9、2,3,4;-1,0,1,2,3 删除矩阵A第3行: A(3,:)= 删除矩阵A第2列: A(:,2)=,14,3.常用的数组操作命令,(1)确定数组大小命令 A=2,5,1,-2,7;0,3,-1,-2,4;0,0,5,8,8 求数组A行数与列数的最大值:n=length(A) 提取数组A的行数与列数:m,n=size(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),b = -1 0 2 2 3 4 5 6 7 7 8 9 11 13 k = 2 12 3 11 1 6 4 7 5
10、 13 14 10 8 9,将二维数组x的元素排序?,15,(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),B = 3 5 6 9 -1 7 11 2 2 4 13 8,c3 = 1 2 5 1 2 5 1 2 5 1 2 5 1 2 5 1 2 5,16,(5)稀疏矩阵与满矩阵的转化: 稀疏矩阵生成命令:sparse(a,b,
11、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为1820阶矩阵。,将稀疏矩阵x变回满矩阵: A=full(A),A = (2,3) -5 (4,12) -3 (18,20) -8,17,(6) sum(A):矩阵A按列求和,返回一个行向量; sum(A,2):矩阵A按行求和,返回一个列向量。 max(A):返回由矩阵各列的最大值构成的向量。 max(A,B):返回A与B对应元素
12、最大值构成的矩阵 min(A),min(A,B)类似,创建1820稀疏矩阵A,使A的(2,3),(4,12),(15,16)元素分别为-5,-3,-8,其余元素为零?,A=sparse(2,4,15,18,3,12,16,20,-5,-3,-8,0),18,A=1,2,3,4,5;0,6,2,3,4;-1,0,7,2,3;2,-1,0,1,2,1 2 3 4 5 0 6 2 3 4 -1 0 7 2 3 2 -1 0 1 2,B=sum(A,2),B = 15 15 11 4,b1=max(A),b1 = 2 6 7 4 5,返回由矩阵A各行的最大值构成的列向量?,b2=max(A),b3=m
13、ax(A,2) ?,b3 = 2 2 3 4 5 2 6 2 3 4 2 2 7 2 3 2 2 2 2 2,b2 = 5 6 7 2,19,b=diag(A): 提取方阵A的对角线元素构成列向量b,A=diag(b): 用一维数组b的元素生成对角方阵A,(7)diag命令:,A=diag(b,k): b为一维数组,k为整数 将b元素作为偏离主对角线的第k条对角生成方阵A,b=2,3,-1,5,6, A=diag(b,1) B=diag(b,-2),A = 0 2 0 0 0 0 0 0 3 0 0 0 0 0 0 -1 0 0 0 0 0 0 5 0 0 0 0 0 0 6 0 0 0 0
14、0 0,B = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 6 0 0,20,例1.1 输入n阶矩阵,n=input(输入方阵阶数n=) a1=4*ones(n,1); a2=2*ones(n-1,1); a3=ones(n-2,1);,A1=diag(a1)+diag(a2,1)+diag(a3,2); A2=diag(a2,-1)+diag(a3,-2); A=A1+A2,21,(8) find命令: find(A) 找出A的不为0的元素的下标 fi
15、nd(A,k) 找出A的前k个不为0的元素的下标 find(A,k,last)找出A的后k个不为0的元素的下标 find(g(A),其中g(A)是数组A的逻辑表达式, 返回数组A中满足条件g(A)的元素下标。,22,A=0,0,2,-1,3,0,0,5,0,6,-7,0,0,9; b1=find(A,3) b2=find(A,2, last),b1=3 4 5 b2=11 14,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,c1 = 2 3 4 5,m = 2 3 1 2,n = 1 1 2 2,23,B=0,1,0;2,3,0;4,0,0 t=find(B2),B = 0 1 0 2 3 0 4 0 0,t = 3 5,x = 3 2,y = 1 2,m = 2 1 2,n = 1 2 2,x,y=find(B2),m,n=find(B=1 M=nchoosek(a,2),求向量的全排列 perms(2,1,8),25,三、数组的运算,1.数值运算 数组的运算,也称点运算,是同阶数组对应分量的运算。包括点乘、点除和点乘方,