您好,欢迎访问三七文档
第第第二二二章章章数数数组组组和和和矩矩矩阵阵阵向量(矩阵)和数组是有区别的向量(矩阵)是一个数学概念,数组是一个计算机名词,一组数而已。非要给数组赋予数学含义,则一维数组相当于向量,二维数组相当于矩阵,向量或矩阵是数组的子集。向量(矩阵)的四则运算有具体的数学定义,使用通常的四则运算符号。数组运算特指数组对应元素之间的运算(也称点运算),其运算符是在通常的运算符符前加一点作为其运算符。二者在加、减与数乘三种运算上恰好一致:数组加减:A+B与A-B;矩阵加减:A+B与A-B,都是对应元素之间加减(不分±与.±)数乘数组:k.*A或A.*k;数乘矩阵:k*A或A*k,都是k乘A的每个元素但注意以下两点:(1)向量(矩阵)的乘法、乘方和除法等运算按线性变换定义,与数组对应的运算不一样。(2)数与矩阵加减、矩阵除法在数学没有定义,MATLAB中为简便起见定义了这两类运算;数组运算:数与数组加减:k+A与k-A,k加(减)A的每个元素数组乘数组:A.*B,对应元素相乘数组乘方:A.^kA的每个元素k次方,k.^A分别以k底A的元素为指数求幂值数除以数组:k./A和A.\kk分别被A的元素除数组除法:左除A.\B右除B./A,对应元素相除矩阵运算:数与矩阵加减:k+A与k-A,等价于k*ones(size(A))+-A%特殊的定义矩阵乘法:A*B,按数学定义的矩阵乘法规则矩阵乘方:A^k,k个矩阵A相乘矩阵除法:左除A\B右除B/A,分别为AX=B和XA=B的解搞清楚这些区别,发现数组的运算其实很简单,值得注意的是,在实际计算中什么时候需要对变量进行数组运算,什么时候需要对变量进行向量(矩阵)运算。比如第一章的积分表达式中的变量x就只能做数组元素。在不考虑数学意义时数组与向量(矩阵)是一回事!以下只讨论向量(矩阵)的运算MATLAB提供的数据类型(如下图),有十余种之多。但所有的MATLAB变量,不管它是什么类型的,都以数组或矩阵的形式保存。矩阵是数组的二维版本。MATLAB的数据类型说明:int8表示一个字节(8bit)222...111表表表达达达式式式与其他程序语言类似,MATLAB提供了数学表达式功能。但是,与大多数程序语言不同的是,这些表达式主要针对矩阵进行操作。与表达式相关的内容主要包括变量、数值(常数)、运算符和函数等。222...111...111变变变量量量○1MATLAB变量使用前不需要任何类型声明和维数说明。○2命名规则同C语言,变量名最长63个字符(7.0版)○3变量严格区分大小写222...111...222数数数值值值表表表示示示MATLAB使用传统的数值表示方法。对于比较长的数,使用科学计数法,用字母e指定以10为底的幂次。虚数用i或j作为后缀。所有数值在内部保存为IEEE浮点标准指定的long型格式。其精度为16ARRAYlogicalcharnumeric函数句柄Java类structurecelldouble整型singleint8,uint8int16,uint16int32,uint32个小数位,范围大约为10-308~10+308。内置常数:pi,i,j,eps,realmax,realmin,inf,NaN222...111...333运运运算算算符符符表达式采用的算术运算符和优光规则按此顺序:+(加)、_(减)、*(乘)、/(除)、\(左除)、^(幂)、’(复数共轭转置)、()(优先)222...111...444函函函数数数使用help函数名获得函数帮助222...222构构构造造造数数数组组组1、直接构造:用空格或逗号间隔数组元素,然后用方括号括起来:x=[1,2,3,4,5,6]2、增量法构造:使用冒号操作符创建数组。a=first:end。%递增、且步长为1的数组a=first:step:end。%指定增量步长值创建任何等差序列(数组)3、用linspace函数构造x=linspace(first,last,num)%需要指定首尾值和元素总个数,步长根据num平均分配222...333构构构造造造矩矩矩阵阵阵MAITLAB中,二维数组称为矩阵。图形图像方面要涉及到大量的矩阵运算,比如,一幅数字图像就是—个矩阵,矩阵中的每个元素表示图像上每个像素的信息。那么针对图像所作的任何操作实质上都是针对矩阵进行的。222...333...111简简简单单单的的的创创创建建建方方方法法法使用矩阵创建符号[],用逗号或空格隔开各元素间;用分号隔开各行。必须注意各行必须具有相同的元素个数222...333...222构构构造造造特特特殊殊殊矩矩矩阵阵阵函数功能ones创建一个所有元素都为1的矩阵zeros创建一个所有元素都为0的矩阵eye创建一个对角线元素为1,其他元素为0的矩阵diag根据向量创建对角矩阵magic创建一个方阵,所有行、列、对角线上的元素的和相等rand创建一个矩阵或数组,其中的元素为服从均匀分布的随机数randn创建一个矩阵或数组,其中的元素为服从正态分布的随机数randpem创建一个向量(1×n的矩阵)注:表中的大部分函数返回double型的矩阵。但是,可以用ones,zeros和eye函数生成任何数值类型的基本数组。方法是将数据类型名作为函数的最后一个参数值(class()函数可检测数据类型):A=zeros(4,6);class(A)%class()返回矩阵A数据类型为doubleA=zeros(4,6,'uint32');class(A)%显示的数据类型为uint32的矩阵函数示例:A=magic(5)%5阶魔方阵,每行、列和主对角线上的和相等。A=rand(5)*20%服从均匀分布的随机数的矩阵或数组,每个元素乘以20A=[10,9,8,-7,5];B=diag(A,-1)%以A为对角线的对角矩阵,-1表示元素放在主对角线下方222...333...333聚聚聚合合合矩矩矩阵阵阵矩阵聚合是通过连接一个或多个矩阵来形成一个新的矩阵。1、使用符号[]聚合:表达式c=[AB]水平聚合,c=[A;B]垂向聚合。A=ones(3,5)*6;%3×5的矩阵,元素为6B=rand(3,5);%3×5的矩阵,元素为随机数D=[AB]%横向(列)聚合A和B,要求A,B行数相同C=[A;B]%垂向(行)聚合A和B,要求A,B列数相同2、使用函数聚合函数描述cat沿指定的维聚合矩阵horzcat水平聚合矩阵vertcat垂向聚合矩阵repmat通过复制与蝶置来创建新矩阵blkdiag用已有矩阵创建块对角矩阵函数示例:(使用cat和vertcat函数可以代替[]实现矩阵的聚合)A=magic(3);B=[-5-6-9;-4-4-2;123];cat1ab=cat(1,A,B)%行(垂向)聚合,等价于[A;B]cat2ab=cat(2,A,B)%列(横向)聚合,等价于[AB]vab=vertcat(A,B)%行聚合,等价于[A;B]M=[12;34];repM=Repmat(M,2,3)%将M视为一个元素的m×n矩阵。C=eye(2)*8;blkdgabc=blkdiag(A,B,C)%以A,B,C为块的对角矩阵222...333...444聚聚聚合合合不不不同同同类类类型型型的的的矩矩矩阵阵阵聚合矩阵时,若矩阵的数据类型不同,则MATLAB会自动进行类型转换。高精度矩阵和低精度矩阵构造新矩阵时,新矩阵是低精度型的(1)single型和double型矩阵聚合为single型。X=[single(4.5)pi5.73*10^300]%这也是聚合,3个1×1矩阵的聚合。x=[ones(2)*2ones(2,3,'single')];class(x)%两矩阵聚合为single型。(2)character和double型矩阵聚合为character型:x=[‘A’‘B’‘C’686970]%x=ABCDEF;class(x)=char(3)logical和double型矩阵聚合为double,比较特殊:x=[truefalsefalsepisqrt(7)]%x=1.0000003.14162.6458;class(x)=double222...444获获获取取取矩矩矩阵阵阵的的的元元元素素素222...444...111获获获取取取单单单个个个元元元素素素A(row,column)%返回矩阵中第row行,第column列元素A(m)%返回矩阵中的第m元素。注:A(m)形式按矩阵的存贮顺序访问。即行优先(行标变化最快)原则,比如一个三阶方阵的存贮顺序是a11,a21,a31,a21,a22,a23,a31,a32,a33。显然A(4)=a21。一般对一个m×n矩阵A(i,j)和A(p)的对应关系为:p=(j-1)*m+i。函数sub2ind()和ind2sub()可以完成单索引p和位置(i,j)间的转换。A=[123;456;789]p=sub2ind(size(A),2,3)%size(A)返回矩阵A的行列值,A(2,3)为A(8)。[row,col]=ind2sub(size(A),8)%返回A(8)的下标(2,3)。222...444...222获获获取取取多多多个个个元元元素素素仔细体会冒号:,end关键字及first:step:end格式的使用。A=magic(4)S=A(1,4)+A(2,4)+A(3,4)+A(4,4)%求第4列1~4行元素的和S=sum(A(1:4,4))%同上,求第4列1~4行元素的和S=sum(A(:,2))%求第2列所有元素的和A(1:3:16)=-10%每隔两个元素处的值改为-10,注意按存贮顺序访问A(1:3,end)=10%将矩阵A的1~3行中最后一个元素的值替换为10。A(:)%按存贮顺序操作A的所有元素,此处为显示。222...555获获获取取取与与与矩矩矩阵阵阵有有有关关关的的的信信信息息息矩阵信息函数函数功能Length返回矩阵最长维的长度ndims返回矩阵维数numel返回矩阵元素的个数size返回每一维的长度下面这个例子演示上表中部分函数的使用。A=rand(5)*10;A(4:5,:)=[]%第四行,第五行各列元素全部被删除sum(A(:))/numel(A)%计算矩阵A中所有元素求和后再算均值。%查找矩阵中大小介于5和7之间的所有元素。ifndims(A)~=2%~=不等于,如果A的维数不是2即不是矩阵,就结束程序。returnend[rows,cols]=size(A);form=1:rows%行作为外循环是符合存贮顺序的,是高效率的。forn=1:colsifA(m,n)=5&&A(m,n)=7%&&逻辑与运算符disp(sprintf('A(%d,%d)=%5.2f',n,m,A(m,n)));%和C相同的的输出语句sprintfendendend下表中的函数检查矩阵中的元素是否属于指定的数据类型:数据类型检查函数函数功能isa是否属于给定类型(可代替以下各函数)iscell确定输入数据是否属于单元(元胞)数组iscellstr确定输入数据是否属于字符串元胞数组ischar确定输入数据是否属于字符数组isfloat确定输入数据是否属于浮点数组isinteger确定输入数据是否属于整型数组islogical确定输入数据是否属于逻辑数组isnumeric确定输入数据是否属于数值数组isreal确定输入数据是否属于实型值数组isstruct确定输入数据是否属于结构数组下面的代码从向量中找出数组中的实数。A=[5+7i6/74.2339jpi9-2i];form=1:numel(A)ifisnumeric(A(m))&&isreal(A(m))%matlab中logical也是用数值的,这条件不多余disp(A(m))endend判断数组A是否为字符串数组A=['This''is''character']ischar(A)isa(A,'char')%与ischar()函数效果相同下表中的函数检查矩阵中的元素是否为指定数据结构。数
本文标题:第2章数组和矩阵
链接地址:https://www.777doc.com/doc-2191734 .html