1MATLAB基础应用2第一章Matlab中的数组操作matlab中的运算和操作是以数组为对象的,数组又包括:数值数组、字符数组、元胞数组等。数值数组:(1)n元数值向量(行向量与列向量)(2)数值矩阵(3)由数值矩阵构成的元胞数组几个标点符号的作用:逗号:用来分开数组中的行元素。(可用空格代替)分号:用来将矩阵中的行分开。(可用回车键代替)冒号:相当于文字中的省略号。中括号:界定数组的首与尾。3一、数组的建立1.直接输入法matlab在创立数组时以逗号或空格表示分列,分号或回车表示分行。数组开头“[”、结尾“]”行数组:如a=[1,2,3,8,-1]列数组:b=[1;2;3;8;-1]或a’矩阵:A=[2,4,1;8:-2:4;2,4,6]42.通过数组编辑器生成矩阵步骤:先建立空矩阵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.00002.60003.20003.80004.40005.00005zeros(m):m阶全零方阵zeros(m,n):m×n阶全零方阵eye(m):m阶单位阵ones(m):m阶全1方阵ones(m,n):m×n阶全1方阵rand(m):m阶均匀分布随机方阵randn(m):m阶标准正态分布随机方阵rand(m,n),randn(m,n)64.元胞数组的创建元胞数组是MATLAB的一种特殊数据类型,可以将元胞数组看做一种无所不包的通用矩阵,或者叫做广义矩阵。组成元胞数组的元素可以是任何一种数据类型的量,每一个元素也可以具有不同的尺寸,每一个元素的内容也可以完全不同,元胞数组的元素叫做元胞。建立元胞数组:{}a={'matlab',20;ones(2,3),1:10}a='matlab'[20][2x3double][1x10double]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),8a=linspace(1,20,6)a=1.004.808.6012.4016.2020.00提取a的第1,3,5个元素构成数组b:b=a(1:2:5)提取a的第2到5个元素,并反转次序构成数组b1:b1=a(5:-1:2)按条件提取子数组:提取a的元素值大于10的元素构成数组b2b2=a(find(a10))b1=16.200012.40008.60004.8000b2=12.4016.2020.009A1234501234-10123-2-1012b1=2b1=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会根据接受的指令,先判断是哪一种编址方法,然后再进行元素的提取。如:A=[1,2,3,4,5;0,1,2,3,4;-1,0,1,2,3;-2,-1,0,1,2]b6=2402b7=A([2,4],[3,5,1])b7=24002-2b2=2b5=0123412345b3=[01234]b4=[0,-1]10元胞数组元素的提取:()和{}有着本质的区别,{}表示元胞的内容,()表示指定的元胞。a={'matlab',20;ones(2,3),1:10;ones(4,5),eye(4)}a='matlab'[20][2x3double][1x10double][4x5double][4x4double]11a='matlab'[20][2x3double][1x10double][4x5double][4x4double]b=[4x4double]b=a(3,2)b=a{3,2}b=1000010000100001a{2,3}=cell(2)改变元胞数组元素的元胞:赋值a='matlab'[20][][2x3double][1x10double]{2x2cell}[4x5double][4x4double][]122.改变数组中的元素值数组的拼接a=1:2:11a=1357911a(1)=0a=0357911a(1:4)=[2,-1,-2,-3]a=2-1-2-3911a([2,5])=[1.5,0.5]a=21.5-2-30.511x=0:2:10,y=[-2,-5,-8],x=0246810y=-2-5-8xx=[x,y]xx=0246810-2-5-8yy=28-5-8yy=[xx([2,5]);y(2:3)]13空数组的使用:建立空数组A:A=[],空数组大小任意。可用空数组删除已有数组中的元素B=1:8B(1:2:5)=[]B=24678A=[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)=[]143.常用的数组操作命令(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=-1022345677891113k=2123111647513141089将二维数组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=3569-1711224138c3=12512512512512512516(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)A=(2,3)-5(4,12)-3(18,20)-817(6)sum(A):矩阵A按列求和,返回一个行向量;sum(A,2):矩阵A按行求和,返回一个列向量。max(A):返回由矩阵各列的最大值构成的向量。max(A,B):返回A与B对应元素最大值构成的矩阵min(A),min(A,B)类似创建18×20稀疏矩阵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])18A=[1,2,3,4,5;0,6,2,3,4;-1,0,7,2,3;2,-1,0,1,2]A1234506234-107232-1012B=sum(A,2)B=1515114b1=max(A)b1=26745返回由矩阵A各行的最大值构成的列向量?b2=max(A')'b3=max(A,2)?b3=22345262342272322222b2=567219b=diag(A):提取方阵A的对角线元素构成列向量bA=diag(b):用一维数组b的元素生成对角方阵A(7)diag命令:A=diag(b,k):b为一维数组,k为整数将b元素作为偏离主对角线的第k条对角生成方阵Ab=[2,3,-1,5,6],A=diag(b,1)B=diag(b,-2)A=020000003000000-100000050000006000000B=000000000000002000000030000000-100000005000000060020例1.1输入n阶矩阵421021421242112420124An=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+A221(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)的元素下标。22A=[0,0,2,-1,3,0,0,5,0,6,-7,0,0,9];b1=find(A,3)b2=find(A,2,'last')b1=345b2=1114B=[0,1,0;2,3,0;4,0,0]c1=find(B)[m,n]=find(B)B=010230400c1=2345m=2312n=112223B=[0,1,0;2,3,0;4,0,0]t=find(B2)B=010230400t=35x=32y=12m=212n=122[x,y]=find(B2)[m,n]=find(B=1&B=3)24求连乘积c1=prod(4:6)c2=cumprod(4:6)求组合nchoosek(a,k)D=nchoosek(5,2)D=10M=323137212717N=wxywxzwyzxyzb='wxyz'N=nchoosek(b,3)(9)排列组合c1=120c2=420120a=[3,2,1,7];M=nchoosek(a,2)求向量的全排列perms([2,1,8])25三、数组的运算1.数值运算数组的运算,也称点运算,是同阶数组对应分量的运算。包括点乘、点除和点乘方,对应的运算符号为.*,./.^这些运算符的公共特点是在算符前加上一个英文句号,以便与对应的矩阵运算相区别。设A与B为同阶数的数组,k为常数,A+B,A-B,k*AA.*B,A./B,A.^n262.关系运算与逻辑运算关系运算:等于:==,不等于:~=,小于:,大于:,小于等于:=,大于等于:=。逻辑运算:与:&;或:|;非:~。关系运算返回值为0或1如a=35,得a=027例1.2已知数组A=[2,5,1,-2,7;0,3,-1,-2,4;0,0,5,8,8],要求将A中大于4的元素减去2,小于0的元素加上1,其余元素不变构成矩阵B。A=[2,5,1,-2,7;0,3,-1,-2,4;0,0,5,8,8]A=251-2703-1-2400588B=231-15030-1400366B=A+(-2)*(A4)+(A0)28例1.3矩阵A=[2,6,1,-12,7;0,3,4,-5,4;1,0,5,8,9],要求将A中能被3整除的元素保留其余元素变为零构成矩阵B。A=[2,6,1,-12,7;0,3,4,-5,4;1,0,5,8,9]A=261-127034-5410589B=060-1200300000009B=A.*(mod(A,3)==0)293.数组的集合运算a=1:12;b=2:10;setdiff(a,b)(a与b的差集)得:1,11,12intersect(a,b)(a与