第11周Matlab一、二维数组二、二维数组与绘图一、二维数组二维数组是由实数或复数排列成矩形而构成的,从数据结构上看,二维数组和矩阵没有什么区别。当二维数组带有线形变换含义时,该二维数组就是矩阵(matrix)。1、二维数组的输入方法(1)在键盘上输入下列内容A=[1,2,3;4,5,6;7,8,9](2)按【Enter】键,指令被执行。(3)在指令执行后,MATLAB指令窗中将显示以下结果:A=123456789123456789A例:简单矩阵的输入步骤。说明:直接输入矩阵时,每行元素用空格或逗号分隔,矩阵行用分号分隔,整个矩阵放在方括号里,标点符号一定要在英文状态下输入。2、由一维数组创建二维数组A=[1,3,5]B=[2,4,6]C=[3,5,7]D=[A;B]E=[A;B;C]F=[A’,B’]G=[A’,B’,C’]3、由函数创建二维数组zeros(m,n)生成一个m行n列的零矩阵,m=n时可简写为zeros(n)ones(m,n)生成一个m行n列的元素全为1的矩阵,m=n时可写为ones(n)eye(m,n)生成一个主对角线全为1的m行n列矩阵,m=n时可简写为eye(n),即为n维单位矩阵magic(n)生成魔方数组,各行、列之和=(1+2+……+n2)/ndiag(v,k)v是向量,diag(v)产生以v为第k条对角线的矩阵,默认k=0rand(m,n)产生0~1间均匀分布的随机矩阵m=n时简写为rand(n)randn(m,n)产生均值为0,方差为1的标准正态分布随机矩阵m=n时简写为randn(n)diag(v,k)练习:在matlab中生成二维数组A=000000000111111111B=1000020000300004-40000-30000-20000-112345123452111111522222224233333332444444225555551[,,,,][1,0,1,2,3][,,,,][3,2,1,1,2]matlab1/12/23/34/45/5xyxxxxxxyyyyyyxxxyyxyxxxyyxyxxxyyxyxxxyyxyxxxyyxy已知一维数组和:,在生成下面的二维数组:4、二维数组操作函数cat(dim,A,B)把“大小”相同的若干数组,沿“指定维”方向,串接成高维数组。行(dim=1)列(dim=2)diag(A,k)A是矩阵,则diag(A,k)返回A的第k条对角线向量,默认k=0flipud(A)以数组“水平中线”为对称轴,交换上下对称位置上的数组元素fliplr(A)以数组“垂直中线”为对称轴,交换左右对称位置上的数组元素kron(A,B)按Kronecker乘法规则(直积)产生“积”数组二维数组操作函数repmat(A,m,n)按指定的“行数、列数”铺放模块数组,以形成更大的数组rot90(A,k)逆时针旋转k×90度reshape(A,m,n)在总元素数不便的前提下,改变数组的“行数、列数”tril(A)提取一个矩阵的下三角部分triu(A)提取一个矩阵的上三角部分5、二维数组的转置运算•A.’:转置•A’:共轭转置6、两个维数相同的二维数组之间的数组运算•A+B:加,对应位置的数组元素相加•A-B:减,对应位置的数组元素相减•A.*B:点乘,对应位置的数组元素相乘•A./B:右点除,对应位置的数组元素相除•A.\B:左点除•A.^B:点幂,对应位置的数组元素做幂运算7、二维数组的与标量的运算•A+c:A的每个元素加c•A-c:A的每个元素减c•A.*c:点乘,A的每个元素乘c•A./c:右点除,A的每个元素除c•A.\c:左点除,c除A的每个元素•A.^c:点幂,A的每个元素做幂运算•c.^A:点幂,c做幂运算8、函数作用在二维数组上的运算规则nmijmnmmnnxxxxxxxxxxX.....................212222111211ijmnfXfx9、引用二维数组的元素1、A(r,c):“全下标”标识:即指出是“第几行,第几列”的元素2、A(ind):“单下标”标识:LinearIndex只用一个下标来指明元素在数组中的位置:把二维数组的所有列,按先左后右的次序,首尾相接排成“一维长列”,然后,自上往下对元素位置进行标号。3、“单下标”与“全下标”的转化:全下标→单下标:ind=sub2ind(siz,r,c)单下标→全下标:[r,c]=ind2sub(siz,ind)二维数组的单个元素的引用和赋值•X=magic(6)•单个元素寻访X(2,3)X(5,5)X(16)•单个元素的赋值X(2,3)=0X(5,5)=7X(16)=8二维数组的子数组的引用和赋值A(r,:)由A的“r行”和“全部列”上的元素组成A(:,c)由A的“全部行”和“c列”上的元素组成A(r,c)由A的“r行”和“c列”上的元素组成A(r,c)=B对子数组A(r,c)进行赋值:B的“行、列”必须与A(r,c)的“行、列”相同(1)使用“双下标”方式A(:)由A的各列按自左到右的次序,首尾相接而生成的“一维长列”数组A(s)引用A中由一维数组s指定的元素。s若是行(或列),则A(s)就是长度相同的行(或列)A(:)=D(:)全元素赋值方式。结果:保持A的“行宽、列长”不变。条件:A、D两个数组的总元素相等,但“行宽、列长”不一定相同A(s)=B对A的部分元素重新赋值。结果:保持A的“行宽、列长”不变。条件:s单下标数组的长度必须与“一维数组”B的长度相等,但是s、B不一定同是“行数组”或“列数组”(2)使用“单下标”方式A(L)“逻辑数组”寻访,生成“一维”列数组:由与A同样大小的“逻辑数组”L中的“1元素”选出A的对应元素;按“单下标”次序排成长列组成(3)使用“逻辑数组”方式42024311353A例:找出数组中所有绝对值大于的元素。10、与二维数组相关的函数cmax=max(A)rmax=max(A,[],2)[cmax,index]=max(A)[rmax,index]=max(A,[],2)max(A,B)返回一个二维数组,元素为A,B相同位置上的较大值min(A),min(A,[],2)[c,d]=min(A),[c,d]=min(A,[],2),min(A,B)返回cmax为一个行数组,元素为A中每个列的最大值返回rmax为一个列数组,元素为A中每个行的最大值返回A中每个列的最大值及其位置,cmax,index为行数组返回A中每个列的最大值及其位置,rmax,index为列数组mean(A)mean(A,2)返回A中每个列向量的平均值返回A中每个行向量的平均值median(A)Median(A,2)返回A中每个列向量的中值返回A中每个行向量的中值std(A)std(A,2)返回A中每个列向量的标准差返回A中每个行向量的标准差sum(A)sum(A,2)计算A中每个列向量的元素的和计算A中每个行向量的元素的和cumsum(A)cumsum(A,2)A中每个列向量的累加和,维数与A相同A中每个行向量的累加和,维数与A相同prod(A)prod(A,2)计算A中每个列向量的元素的积计算A中每个行向量的元素的积cumprod(A)cumprod(A,2)A中每个列向量的累乘积,维数与A相同A中每个行向量的累乘积,维数与A相同sort(A)对A中列向量进行升序排序sort(A,’descend’)对A中列向量进行降序排序sort(A,2)对A中行向量进行升序排序sort(A,2,’descend’)对A中行向量进行降序排序sz=size(A)当只有一个输出参数时,size函数返回的是一个行向量,该行向量的第一个元素是数组的行数,第二个元素是数组的列数。[r,c]=size(A)当有两输出参数时,size函数将数组的行数返回到第一个输出变量,将数组的列数返回到第二个输出变量。r=size(A,1)返回数组A的行数c=size(A,2)返回数组A的列数length(A)返回数组的长度(行数或列数的较大值)numel(A)返回数组元素的个数2226,04()56,010,231,Matlabijijmnmnfxxxxxfxxxxxxxxfxfx函数的定义如下:且且其它编写一个函数实现该函数,且要求函数能够处理输入参数为数组的情况,即要求:一维、二维练习二、二维数组与绘图plot(x,y)(1)若x,y都是二维数组,将x的列和y中相应的列相组合,绘制多条平面曲线。此时x,y必须具有相同的大小。例:利用二维数组在同一坐标轴中同时绘制下列函数的图形:cos,0,2,1,2,3ykxxk1、二维数组在2d绘图中的应用01234567-3-2-1012301234567-3-2-10123plot用二维数组绘图的细节你想要是下面的哪一种图形?怎样绘制出这两种图形?补充:plot绘图的细节例题:用plot函数动态演示利萨如图形的形成。sinsin26xtytt=……plot(x([1,2]),y([1,2]))holdonaxis([-1.1,1.1,-1.1,1.1])fork=2:length(t)-1plot(x([k,k+1]),y([k,k+1]))pause(0.1)endplot(x,y)(2)若x是一维数组,y是二维数组当x的长度与y的行数相等,则将x与y中的各列相对应,绘制多条平面曲线;否则,若x的长度与y的列数相等,则将x与y中的各行相对应,绘制多条平面曲线。01234567-10-8-6-4-20246810线性代数中:列×行=矩阵x=linspace(0,2*pi,50)y=cos(x)’*(1:9)plot(x,y)例:利用plot函数的上述功能在同一坐标轴中同时绘制下列函数的图形:cos,0,2,1,2,,9ykxxk2、二维数组在3d绘图中的应用网格生成函数:meshgridx,y为给定的向量X,Y是网格划分后得到的网格矩阵绘制由函数z=z(x,y)确定的曲面时,首先需产生一个网格矩阵,然后计算函数在各网格点上的值。若x=y,可简写为[X,Y]=meshgrid(x)[X,Y]=meshgrid(x,y)例:“墨西哥帽子”确定的曲面其中由函数,/)sin(22yxrrrz(1)三维网格图:mesh,meshc,meshzmesh(X,Y,Z,C)绘制由矩阵X,Y,Z所确定的曲面网格图,矩阵C用于确定网格颜色,省略时C=Zmeshc(X,Y,Z,C)调用方式与mesh相同,在mesh基础上增加等高线meshz(X,Y,Z,C)调用方式与mesh相同,在mesh基础上屏蔽边界面-10-50510-10-50510-0.500.51-10-50510-10-50510-0.500.51-10-50510-10-50510-0.500.51meshmeshcmeshz(2)三维表面图:surf,surfcsurf(X,Y,Z,C)绘制由矩阵X,Y,Z所确定的曲面图,参数含义同meshsurfc(X,Y,Z,C)调用方式与surf相同,在surf基础上增加等高线-10-50510-10-50510-0.500.51-10-50510-10-50510-0.500.51surfsurfc-10-50510-10-50510-0.500.51-10-50510-10-50510-0.500.51若不想在三维表面图中显示网格线,可将属性“edgecolor”设为“none”surf(X,Y,Z,’edgecolor’,’none’)surfsurfc(3)mesh和surf绘图的细节11121112212221221112111221222122xxyyXxxYyyzzccZzzCccA、绘