版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第3章 数组和向量本章重点:数组的创建方法数组的操作向量的创建方法向量的操作8/4/20221第1页,共68页。3.1 MATLAB数组 出于数值计算离散本质的考虑,也出于“向量化”快速处理数据的需要,MATLAB总把数组看作存储和运算的基本单元,而标量数据被看作(11)的数组。8/4/20222第2页,共68页。按照数组元素个数和排列方式empty array只有一个元素的标量(scalar)只有一行或一列的向量(vector),行向量(row vector)或列向量(column vector),也可统称为一维数组。普通的具有多行多列元素的二维数组。超过二维的多维数组(具有行、列、页等多个
2、维度)。数组的分类方式:8/4/20223第3页,共68页。size(),length()函数 a=1 2 3;4 5 6a = 1 2 3 4 5 6 size(a)ans = 2 3 length(a)ans = 3n维数组A,Size()函数的调用格式:1:sz=size(A),将返回一个n维向量,其中包含数组每一维的大小2:rows,cols=size(A),将返回具有要求的A的各维大小。length()函数返回数组的最大维值8/4/20224第4页,共68页。2: 按照存储方式分类:1 普通数组2 稀疏数组(sparse):为了提高数据存储和运算的效率。 b=0 0 0 0 0 0
3、;0 0 0 1 5 0b = 0 0 0 0 0 0 0 0 0 1 5 0 c=sparse(b)c = (2,4) 1 (2,5) 58/4/20225第5页,共68页。3.2 创建数组(一):一维数组的创建1:递增/递减一维数组的创建数组的特点:数组元素值的大小按照递增或递减的次序排列;数组元素值之间的差是确定的,即“等步长”的。用途:主要用作函数的自变量和for循环中循环自变量等(1)冒号生成法x=a: inc: ba是数组第一个元素,inc为步长,可为正也可为负,当inc为负数时,必须保证ab;当inc为正数时,必须保证a 1:2:9ans = 1 3 5 7 9 1:2:10an
4、s = 1 3 5 7 9 1:10ans = 1 2 3 4 5 6 7 8 9 10 10:-3:2ans = 10 7 48/4/20228第8页,共68页。a=linspace(1,10,4);b=10.a;c=logspace(1,10,4);b=cans = 1 1 1 1这里可以看到对数等分和线性等分的联系。8/4/20229第9页,共68页。(二):二维数组的创建1:通过直接输入数值来创建数组:使用“;”或者另起一行表明一行的结束。例如:a=1 2;3 4 a = 1 2 3 42:通过MATLAB内置函数来创建具有某一特点的数组。8/4/202210第10页,共68页。zer
5、os(m,n)与ones(m,n):分别产生填充值为0或1的m行n列的数组。rand(m,n)与randn(m,n):分别产生取值为01之间的随机数的数组。diag()具有多种形式,最常用的是diag(A),其中A为一数组,它将A的对角线上的元素作为向量返回;diag(V),其中V为一向量,它返回一个对角线为V的方阵。magic(m)函数,它产生一个填充1到m2之间数字的数组,其组织方式使得每一行、每一列以及对角线上的元素分别加起来等于相同的数。 3.2.2 创建数组的函数 z=zeros(2,3)z = 0 0 0 0 0 0 e=ones(3,4)e = 1 1 1 1 1 1 1 1 1
6、 1 1 1 r=rand(2,2)r = 0.8147 0.1270 0.9058 0.9134 rand(size(e)ans = 0.6324 0.5469 0.1576 0.4854 0.0975 0.9575 0.9706 0.8003 0.2785 0.9649 0.9572 0.1419 diag(r)ans = 0.8147 0.9134 diag(size(e)ans = 3 0 0 4 magic(3)ans = 8 1 6 3 5 7 4 9 28/4/202211第11页,共68页。1:randn:产生均值为0,方差为1的标准正态分布随机矩阵。2:hilb(n)函数:生
7、成希尔伯特矩阵。3:invhilb(n) :求n阶希尔伯特矩阵的逆的函数。4:vander(V)函数:生成以向量V为基础向量的范得蒙矩阵。5: gallery(jordbloc,n,lambda):产生主对角元为lambda的n阶Jordan。3.2.3 几个特殊矩阵生成函数8/4/202212第12页,共68页。随机数组生成函数1:rand(m,n):元素在0,1中均匀分布的m行n列随机数组 au=rand(1,5)au =0.8147 0.9058 0.1270 0.9134 0.6324 y=rand(1,3000);plot(y)8/4/202213第13页,共68页。y=randn(
8、1,3000000);hist(y,3000)8/4/202214第14页,共68页。2. Ai=randint(m,n,a,b):元素取区间a,b中整数的均匀分布m行n列随机数组 randint(2,3),randint(2,3,10),randint(2,3,-2,10)ans = 1 1 0 1 1 1ans = 1 0 0 7 2 0ans = 8 2 -2 7 10 38/4/202215第15页,共68页。3:AS=randsrc(3,4,-3,-1,1,3,1):在-3,-1,1,3字符集上产生(34)均布数组,随机发生器的状态置为1. AS=randsrc(3,4,-3,-1,
9、1,3,1)AS = 3 1 3 -1 1 3 1 3 3 -1 -3 -18/4/202216第16页,共68页。 a=1 2 3 4 5;vander(a)ans = 1 1 1 1 1 16 8 4 2 1 81 27 9 3 1 256 64 16 4 1 625 125 25 5 14:A = VANDER(V) returns the Vandermonde matrix whose columns are powers of the vector V, that is A(i,j) = v(i)(n-j):列向量V生成的范德蒙矩阵。8/4/202217第17页,共68页。4: r
10、andperm(n): 产生从1到n的正整数随机排列 randperm(12)ans = 6 3 11 7 8 5 1 2 4 9 10 12 randperm(5)ans = 4 5 2 3 18/4/202218第18页,共68页。3.3 数组的操作获取数组中的元素从数组中移除元素数组具体操作8/4/202219第19页,共68页。3.3.1 获取数组中的元素可以通过索引值对数组中的元素进行寻址;其中第一个值为行索引值,第二个值为列索引值。可以通过元素在数组中的序号对元素进行寻址。Matlab中数组元素的存放是先列,后行。使用sub2ind(),ind2sub()函数,对元素的下标和元素的
11、序号进行相互转换Ind=sun2ind(size,i,j)row,col=ind2sub(size,ind)使用find()函数Ind=find()row,col=find()8/4/202220第20页,共68页。 m=magic(3)m = 8 1 6 3 5 7 4 9 2 m(2,3)ans = 7 m(6)ans = 9row,col=ind2sub(size(m),6)row = 3col = 2 ind=sub2ind(size(m),3,2)ind = 6 r,c=find(m=7)r = 2c = 3 find(m=7)ans = 88/4/202221第21页,共68页。冒
12、号(:)的用法:用线性存储显示数组所有元素:A(:)获取数组的第i行元素:A(i,:)获取数组的第i列元素: A(:,i)获取数组的指定范围内的元素:A(i:j,:)A(:,i:j)8/4/202222第22页,共68页。 m=magic(3)m = 8 1 6 3 5 7 4 9 2 m(2,:)ans = 3 5 7 m(:,2)ans = 1 5 9 m(:)ans = 8 3 4 1 5 9 6 7 2 m(1:2,:)ans = 8 1 6 3 5 7 m(:,2:3)ans = 1 6 5 7 9 28/4/202223第23页,共68页。3.3.2 从数组中移除元素 可以使用空数
13、组 的一种特殊用法来完成此项任务。 数组必须保持矩形,因此元素必须整行或整列移除。 m(2,3)=0m = 8 1 6 3 5 0 4 9 2 m(2,:)=m = 8 1 6 4 9 2 m(:,2)=m = 8 6 4 28/4/202224第24页,共68页。 m=magic(4)m = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 m(2,:)=m = 16 2 3 13 9 7 6 12 4 14 15 1 m(5)=m = 16 9 4 2 14 3 6 15 13 12 18/4/202225第25页,共68页。3.3.3数组操作算术操作 m=ma
14、gic(3)m = 8 1 6 3 5 7 4 9 2 n=3 2;4 5;5 6n = 3 2 4 5 5 6 m*nans = 58 57 64 73 58 65 a=2 3 4;1 2 3a = 2 3 4 1 2 3 b=1 2 1;2 3 4b = 1 2 1 2 3 4 a.*bans = 2 6 4 2 6 128/4/202226第26页,共68页。2. 逻辑运算 aa = 2 3 4 1 2 3 a3ans = 0 0 1 0 0 0 bb = 1 2 1 2 3 4 abans = 1 1 1 0 0 08/4/202227第27页,共68页。3. 使用库函数sum()和m
15、ean():返回一个行向量,包括每一列的和与平均值max()和min():返回两个行向量:每一列中的最大值或者最小值以及他们在每一列中出现的行号。8/4/202228第28页,共68页。 m=magic(3)m = 8 1 6 3 5 7 4 9 2 values rows=max(m)values = 8 9 7rows = 1 3 2 max(m)ans = 8 9 7 v,c=max(values)v = 9c = 28/4/202229第29页,共68页。数组的特殊操作 为了生成比较复杂的数组,或为了对已生成的数组进行修改、扩展,MATLAB提供了诸如扩充、收缩、变形、翻转、排序等操作
16、。1. 数组的扩充和收缩广义的讲,数组可以在两个层面上扩缩:维数扩缩:例如几个相同的一维数组扩成二维数组等大小扩缩:在维数不变的情况下,改变某个或某些维数的大小。8/4/202230第30页,共68页。(1) 借助标点符号扩充数组 a=1:5;b=10:14;c=-2:2; a_b_c=a,b,c %水平链接a_b_c = 1 2 3 4 5 10 11 12 13 14 -2 -1 0 1 2 abc=a;b;c %垂直链接abc = 1 2 3 4 5 10 11 12 13 14 -2 -1 0 1 2数组的扩充和收缩8/4/202231第31页,共68页。(2) 借助指令repmat(
17、)扩充数组 ab=a;bab = 1 2 3 4 5 10 11 12 13 14 ab1=repmat(ab,2,2) %排成(22)的“ab块”数组ab1 = 1 2 3 4 5 1 2 3 4 5 10 11 12 13 14 10 11 12 13 14 1 2 3 4 5 1 2 3 4 5 10 11 12 13 14 10 11 12 13 14 ab1=repmat(ab,2,1)ab1 = 1 2 3 4 5 10 11 12 13 14 1 2 3 4 5 10 11 12 13 148/4/202232第32页,共68页。(3) 借助空阵符收缩数组 ab=a;bab =
18、1 2 3 4 5 10 11 12 13 14 ab(:,1 3)=ab = 2 4 5 11 13 148/4/202233第33页,共68页。数组重排reshape(A):将数组A按照另外一种维数进行展示。要求重新排列的维数的乘积必须与A的维数乘积相等。 a=magic(4)a = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 b=reshape(a,2,8)b = 16 9 2 7 3 6 13 12 5 4 11 14 10 15 8 1 c=reshape(a,3,8)? Error using = reshapeTo RESHAPE the num
19、ber of elements must not change.8/4/202234第34页,共68页。 a=1:24; A=reshape(a,2,4,3) %把向量a重新变成“2行4列3页”的三维数组%三维数组的显示形式分页显示A(:,:,1) = 1 3 5 7 2 4 6 8A(:,:,2) = 9 11 13 15 10 12 14 16A(:,:,3) = 17 19 21 23 18 20 22 248/4/202235第35页,共68页。数组的上下、左右及对角翻转 B=reshape(a,4,6)B = 1 5 9 13 17 21 2 6 10 14 18 22 3 7 11
20、 15 19 23 4 8 12 16 20 24 c=flipud(B)c = 4 8 12 16 20 24 3 7 11 15 19 23 2 6 10 14 18 22 1 5 9 13 17 21 d=fliplr(B)d = 21 17 13 9 5 1 22 18 14 10 6 2 23 19 15 11 7 3 24 20 16 12 8 4 c1=flipdim(B,1) %相当于flipudc1 = 4 8 12 16 20 24 3 7 11 15 19 23 2 6 10 14 18 22 1 5 9 13 17 21 d1=flipdim(B,2) %相当于flip
21、lrd1 = 21 17 13 9 5 1 22 18 14 10 6 2 23 19 15 11 7 3 24 20 16 12 8 4flipdim()翻转的通用指令8/4/202236第36页,共68页。绕数组元素的旋转 B90=rot90(B) %以B矩阵第(1,1)元素使整个数组逆时针旋转90B90 = 21 22 23 24 17 18 19 20 13 14 15 16 9 10 11 12 5 6 7 8 1 2 3 4 B180=rot90(B,2) %以B矩阵第(1,1)元素使整个数组逆时针旋转90两次B180 = 24 20 16 12 8 4 23 19 15 11 7
22、 3 22 18 14 10 6 2 21 17 13 9 5 18/4/202237第37页,共68页。数组的行、列平移 Bd=circshift(B,2,0)Bd = 3 7 11 15 19 23 4 8 12 16 20 24 1 5 9 13 17 21 2 6 10 14 18 22 Bd=circshift(B,2)Bd = 3 7 11 15 19 23 4 8 12 16 20 24 1 5 9 13 17 21 2 6 10 14 18 22 Bl=circshift(B,0,-1)Bl = 5 9 13 17 21 1 6 10 14 18 22 2 7 11 15 19
23、 23 3 8 12 16 20 24 4 Bl=circshift(B,0,1)Bl = 21 1 5 9 13 17 22 2 6 10 14 18 23 3 7 11 15 19 24 4 8 12 16 20circshift(A,shifsize):将数组的元素按照shifsize进行按行、列进行平移。8/4/202238第38页,共68页。 aa = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 d(:,2)=a(:,4)d = 0 13 0 8 0 12 0 1数组切片:将数组中的一部分移入另一数组中8/4/202239第39页,共68页。线性化数
24、组存储数组的内存块是顺序存放的,数组按照列的顺序存放在内存中。find():返回满足条件的值所在数组中的位置 a=2 3 4 5;4 7 8 9;12 34 5 6a = 2 3 4 5 4 7 8 9 12 34 5 6 ix=find(a7)ix = 3 6 8 11 a(ix)=a(ix)+100a = 2 3 4 5 4 7 108 109 112 134 5 68/4/202240第40页,共68页。数组操作实例:脚本文件8/4/202241第41页,共68页。3.4 应用实例-计算土壤体积问题:估计为一座建筑准备地基所需要移走泥土的数量。 Step1:测量待修建筑物的地面,得到一个
25、矩形的方格点,每一个方格点上定义了该点的高度 。Step2:考虑建筑地基的建筑图 。其中阴影区域是为了建造建筑地基而必须将泥土移走的地方。从建筑图中可以估计出每一个测量的方块中必须被移走泥土的比例(对于这个实例来说,它是一个介于01之间的数)。Step3:需要被移走的泥土的总量就等于每一小方块的深度与该方块中需要移除面积的乘积之和。脚本文件8/4/202242第42页,共68页。地形测量 阴影区域8/4/202243第43页,共68页。3.5 MATLAB向量向量是对相似数据项的集合进行分组的最简单方式,向量是数据的一维分组。元素:向量中单个的数据项通常称为元素(element)。元素属性:数
26、值及在向量中的位置。2334245值索引1 2 n-1 n8/4/202244第44页,共68页。3.5.1 创建向量创建向量有两种方法:使用一系列常值来创建向量。(1)直接输入数值 a=3 34 56 78a = 3 34 56 78 a=3, 34, 56, 78a = 3 34 56 78 逗号可有可无8/4/202245第45页,共68页。(2)使用冒号:起始值:增量:结束值 b=2:4:30b = 2 6 10 14 18 22 26 30当增量为1时,冒号可以省略 c=2:10c = 2 3 4 5 6 7 8 9 108/4/202246第46页,共68页。(3)使用linspa
27、ce()函数:可以创建取值位于两个数之间且具有指定长度的向量。例如:linspace(下界,上界,数值的个数)步长= linspace(0,100,11)ans =0 10 20 30 40 50 60 70 80 90 1008/4/202247第47页,共68页。(4)使用zeros(1,n),ones(1,n),rand(1,n),randn(1,n)等函数. d=23d = 23 e=ones(1,4)e = 1 1 1 18/4/202248第48页,共68页。2.通过对已有的向量进行操作产生新的向量。 ee = 1 1 1 1 e.*2ans = 2 2 2 2 f=ones(4,
28、1)f = 1 1 1 1 e*fans = 48/4/202249第49页,共68页。3.5.2 向量尺寸向量有一个专门的属性:向量的长度。在多数情况下,该长度在向量创建时就已固定。MATLAB能够通过插入或删除元素来增加或减小向量的长度。 函数size(V):返回包含向量行数和列数的一个向量。函数length(V)返回数组大小中的最大值 对于向量,该数值即为其长度。8/4/202250第50页,共68页。 e=ones(1,4)e = 1 1 1 1 size(e)ans = 1 4 length(e)ans = 48/4/202251第51页,共68页。3.5.3 向量索引向量中的每个元
29、素具有两个属性:元素的值及在向量中的位置。可以通过索引获取数组中的元素。数值索引 a=rand(1,5)a = 0.8147 0.9058 0.1270 0.9134 0.6324 a(3)ans = 0.12708/4/202252第52页,共68页。MATLAB允许向超出向量范围的位置写入元素: b=randn(1,3)b = -0.4326 -1.6656 0.1253 b(5)=90b = -0.4326 -1.6656 0.1253 0 90.0000向量当前元素与试图写入的新元素之间缺失元素,用0补充8/4/202253第53页,共68页。(2) 逻辑索引 注意:命令窗口中显示的逻
30、辑变量值是用1代表真,用0代表假。用逻辑向量进行索引时,结果中将包含向量中对应逻辑索引向量中取值为真的位置上的元素。 bb = -0.4326 -1.6656 0.1253 0 90.0000 mask=true false false false truemask = 1 0 0 0 1 b(mask)ans = -0.4326 90.00008/4/202254第54页,共68页。3.5.4 缩短向量 bb = -0.4326 -1.6656 0.1253 0 90.0000 b(4)=b = -0.4326 -1.6656 0.1253 90.0000注意:实际中很少将缩短向量作为对问题
31、的正确求解方法,而且这样做可能会导致逻辑混乱。有可能的话,要使用索引来对需要保留的元素进行复制。8/4/202255第55页,共68页。3.5.5 向量操作MATLAB语言的本质核心在于具有丰富的数组和向量操作工具。向量有以下几种操作:(1)算术操作(2)逻辑操作(3)使用库函数(4)连接。(5)切片(广义索引)。从对标量的操作推广而来8/4/202256第56页,共68页。算术操作前提:两个向量长度相同或者其中一个是标量,则算术操作可以执行。向量的算术操作不同于矩阵,因此需要用新的符号:.*符号:逐个元素相乘./符号:逐个元素相除. 符号:逐个元素进行指数运算8/4/202257第57页,共
32、68页。 a=1:5a = 1 2 3 4 5 a+8ans = 9 10 11 12 13 a.*3ans = 3 6 9 12 15 a./2ans = 0.5000 1.0000 1.5000 2.0000 2.5000 a.*(a+3)ans = 4 10 18 28 408/4/202258第58页,共68页。2. 逻辑操作 两个向量的长度相同或者其中一个是标量,可以在两个向量上执行逐个元素的逻辑操作。结果是与原始向量具有相同长度的且取逻辑值的向量。例:8/4/202259第59页,共68页。 a=1 3 4 89 23 45a = 1 3 4 89 23 45 b=linspace
33、(1,11,6)b = 1 3 5 7 9 11 a=bans = 1 1 0 1 1 1 c=1:3c = 1 2 3 ac? Error using = gtMatrix dimensions must agree.8/4/202260第60页,共68页。find()函数: bb = 1 3 5 7 9 11 find(b5)ans = 4 5 6find()函数返回逻辑数组中取真值的元素所对应位置的向量。8/4/202261第61页,共68页。3. 应用库函数(1)sum(V)与mean(V):返回向量V的元素和与平均值。 bb = 1 3 5 7 9 11 sumb=sum(b)sumb = 36 mean_b=mean(b)mean_b = 68/4/202262第62页,共68页。(2)min(V)与max(V):返回两个量,向量中的最大值和最小值以及该值在向量中出现的位置。b=1 3 5 7 9 11 max(b)ans = 11 value where=max(b)value = 11where = 68/4/202263第63页,共68页。(3):取整函数:round(V),ceil(V),floor(V),fix(V) A=2.3,3.6,2.0,23,99,10.001A = 2.3000 3.6000 2.0000 23.0000 9
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 石河子大学《药物分析实验》2022-2023学年第一学期期末试卷
- 石河子大学《现代教育技术》2023-2024学年第一学期期末试卷
- 石河子大学《纪录片赏析》2023-2024学年第一学期期末试卷
- 沈阳理工大学《自动检测技术》2022-2023学年第一学期期末试卷
- 沈阳理工大学《色彩构成》2021-2022学年第一学期期末试卷
- 沈阳理工大学《建筑力学》2021-2022学年第一学期期末试卷
- 沈阳理工大学《后期特效》2023-2024学年第一学期期末试卷
- 沈阳理工大学《电工与电子技术实验》2021-2022学年期末试卷
- 沈阳理工大学《测量学》2021-2022学年第一学期期末试卷
- 海商法修改船舶融资租赁合同
- 《市场营销》教案(第3周)市场营销环境分析
- 租地种香蕉合同
- 上海市虹口区2024学年第一学期期中考试初三物理试卷-学生版
- 旧市场提升改造方案
- 湖北汉江王甫洲水力发电限责任公司公开招聘工作人员【6人】高频难、易错点500题模拟试题附带答案详解
- 统编版 七年级上册(2024修订) 第四单元 13 纪念白求恩 课件
- 国开(甘肃)2024年春《地域文化(专)》形考任务1-4终考答案
- 档案整理及数字化服务方案(技术标 )
- 村纪检监督小组工作职责
- 《宏观经济学乘数论》PPT课件.ppt
- 警务监督员表态发言(共4篇)
评论
0/150
提交评论