第2章 MATLAB数据 2.1 MATLAB数据的特点 2.2 变量和赋值 2.3 MATLAB矩阵 2.4 MATLAB运算 2.2 变量和赋值 2.3 MATLAB矩阵 2.4 MATLAB运算 2.5 字符串 2.6 结构和单元
2.1 MATLAB数据的特点 1.矩阵是MATLAB最基本、最重要的数据对象。单个数据(标量)可以看成是矩阵的特例。 数值数据:双精度型、单精度数、带符号整数和无符号整数。 字符数据。 结构(Structure)和单元(Cell)。 多维矩阵和稀疏矩阵(Sparse)。
2.2 变量和赋值 2.2.1 变量的命名 在MATLAB中,变量名是以字母开头,后接字母、数字或下划线的字符序列,最多19个字符。 2.2 变量和赋值 2.2.1 变量的命名 在MATLAB中,变量名是以字母开头,后接字母、数字或下划线的字符序列,最多19个字符。 在MATLAB中,变量名区分字母的大小写。MATLAB提供的标准函数名以及命令名必须用小写字母。
2.2.2 赋值语句 MATLAB赋值语句有两种格式: (1) 变量=表达式 (2) 表达式 一般地,运算结果在命令窗口中显示出来。如果在语句的最后加分号,那么,MATLAB仅仅执行赋值操作,不再显示运算的结果。 在MATLAB语句后面可以加上注释,注释以%开头,后面是注释的内容。
例2.1 计算表达式的值,并将结果赋给变量x,然后显示出结果。 在MATLAB命令窗口输入命令: x=(5+cos(47*pi/180))/(1+sqrt(7)-2*i) %计算表达式的值
2.2.3 数据的输出格式 MATLAB用十进制数表示一个常数,具体可采用日常记数法和科学记数法两种表示方法。 数据输出时用户可以用format命令设置或改变数据输出格式。format命令的格式为: format 格式符 注意,format命令只影响数据输出格式,而不影响数据的计算和存储。
2.2.4 预定义变量 在MATLAB工作空间中,还驻留几个由系统本身定义的变量。它们有特定的含义,在使用时,应尽量避免对这些变量重新赋值。
2.2.5 内存变量的管理 1. 内存变量的显示与删除 who和whos这两个命令用于显示在MATLAB工作空间中已经驻留的变量名清单。 clear命令用于删除MATLAB工作空间中的变量。 注意,预定义变量不能被删除。 2. 工作空间浏览器 (1) 工作空间浏览器的启动 (2) 工作空间浏览器的操作
3. 内存变量文件 利用MAT文件(.mat)可以把当前MATLAB工作空间中的一些有用变量长久地保留下来。 MAT文件的生成和装入由save和load命令来完成。常用格式为: save 文件名 [变量名表] [-append][-ascii] load 文件名 [变量名表] [-ascii]
2.3 MATLAB矩阵 2.3.1 矩阵的建立 1. 直接输入法 将矩阵的元素用方括号括起来,按矩阵行的顺序输入各元素,同一行的各元素之间用空格或逗号分隔,不同行的元素之间用分号分隔。例如 A=[1 2 3;4 5 6;7 8 9]
2. 利用M文件建立矩阵 对于比较大且比较复杂的矩阵,可以为它专门建立一个M文件。 例2.2 利用M文件建立MYMAT矩阵。 (1)启动有关编辑程序或MATLAB文本编辑器,并输入待建矩阵. (2)把输入的内容以纯文本方式存盘(设文件名为mymatrix.m)。 (3)运行该M文件,就会自动建立一个名为MYMAT的矩阵,可供以后使用。
几个产生特殊矩阵的函数:zeros、ones、 eye、rand、randn。 3. 利用MATLAB函数建立矩阵 几个产生特殊矩阵的函数:zeros、ones、 eye、rand、randn。 这几个函数的调用格式相似,下面以产生零矩阵的zeros函数为例进行说明。其调用格式是: zeros(m) 产生m×m零矩阵 zeros(m,n) 产生m×n零矩阵。 zeros(size(A)) 产生与矩阵A同样大小的零矩阵 相关的函数有:length(A)给出行数和列数中的较大者,即length(A)=max(size(A));ndims(A)给出A的维数。
例2.3 分别建立3×3、3×2和与矩阵A同样大小的零矩阵。 (1)建立一个3×3零矩阵:zeros(3) (2)建立一个3×2零矩阵:zeros(3,2) (3)建立与矩阵A同样大小零矩阵:zeros(size(A)) 此外,常用的函数还有reshape(A,m,n),它在矩阵总元素保持不变的前提下,将矩阵A重新排成m×n的二维矩阵。
4. 建立大矩阵 大矩阵可由方括号中的小矩阵建立起来。例如 A=[1 2 3;4 5 6;7 8 9]; C=[A,eye(size(A)); ones(size(A)),A]
2.3.2 冒号表达式 冒号表达式的一般格式: e1:e2:e3 还可以用linspace函数产生行向量:linspace(a,b,n) linspace(a,b,n)与a:(b-a)/(n-1):b等价。
2.3.3 矩阵的拆分 1. 矩阵元素 MATLAB允许用户对一个矩阵的单个元素进行赋值和操作。例如 A(3,2)=200 也可以采用矩阵元素的序号来引用矩阵元素。矩阵元素按列编号,先第一列,再第二列,依次类推。 以m×n矩阵A为例,矩阵元素A(i,j)的序号为(j-1)*m+i。其相互转换关系也可利用sub2ind和ind2sub函数求得。
2. 矩阵拆分 (1)利用冒号表达式获得子矩阵 ①A(:,j)表示取A矩阵的第j列全部元素;A(i,:)表示A矩阵第i行的全部元素;A(i,j)表示取A矩阵第i行、第j列的元素。 ②A(i:i+m,:)表示取A矩阵第i~i+m行的全部元素;A(:,k:k+m)表示取A矩阵第k~k+m列的全部元素,A(i:i+m,k:k+m)表示取A矩阵第i~i+m行内,并在第k~k+m列中的所有元素。 此外,还可利用一般向量和end运算符等来表示矩阵下标,从而获得子矩阵。end表示某一维的末尾元素下标。
(2)利用空矩阵删除矩阵的元素 在MATLAB中,定义[]为空矩阵。给变量X赋空矩阵的语句为X=[]。 注意,X=[]与clear X不同,clear是将X从工作空间中删除,而空矩阵则存在于工作空间,只是维数为0。 将某些元素从矩阵中删除,采用将其置为空矩阵的方法就是一种有效的方法。
2.3.4 多维矩阵 以三维矩阵为例,常用的方法有4种: (1)对二维矩阵进行扩充得到三维矩阵。 (2)若干个同样大小的二维矩阵进行组合得到三维矩阵。 (3)除产生单位矩阵的eye函数外,前面介绍的建立矩阵的函数都可以延伸到三维矩阵。 (4)用cat函数构建多维矩阵。一般调用格式是: cat(n,A1,A2,…,An) cat函数把大小相同的若干矩阵,沿第n维方向串接成高维矩阵。当n=1和2时,沿行和列的方向串接,结果是二维矩阵。当n=3时,沿页的方向串接,结果是三维矩阵。
2.4 MATLAB运算 2.4.1算术运算 1. 基本算术运算 MATLAB的基本算术运算有:+(加)、-(减)、*(乘)、/(右除)、\(左除)、^(乘方)。 注意:运算是在矩阵意义下进行的,单个数据的算术运算只是一种特例。 2. 点运算 点运算符有.*、./、.\和.^。两矩阵进行点运算是指它们的对应元素进行相关运算,要求两矩阵的维参数相同。 3.MATLAB常用数学函数
2.4.2 关系运算 MATLAB提供了6种关系运算符:<(小于)、<=(小于或等于)、>(大于)、>=(大于或等于)、==(等于)、~=(不等于)。 关系运算符的运算法则。
例2.4 产生5阶随机方阵A,其元素为[10,90]区间的随机整数,然后判断A的元素是否能被3整除。 A=fix((90-10+1)*rand(5)+10) (2) 判断A的元素是否可以被3整除。 P=rem(A,3)==0
2.4.3 逻辑运算 MATLAB提供了3种逻辑运算符:&(与)、|(或)和~(非)。 运算法则。
例2.5 在[0,3π]区间,按要求求y=sin(x)的值: 方法1: x=0:pi/100:3*pi;y=sin(x); y1=(x<pi|x>2*pi).*y; %消去负半波 q=(x>pi/3&x<2*pi/3)|(x>7*pi/3&x<8*pi/3); qn=~q; y2=q*sin(pi/3)+qn.*y1; %按要求处理第(2)步 方法2: y1=(y>=0).*y; %消去负半波 p=sin(pi/3); y2=(y>=p)*p+(y<p).*y1; %按要求处理第(2)步
2.5 字符串 字符串是用单撇号括起来的字符序列。例如,'Central South University'。若字符串中的字符含有单撇号,则该单撇号字符应用两个单撇号来表示。 字符串是以ASCII码形式存储的。abs和double函数都可以用来获取字符串矩阵所对应的ASCII码数值矩阵。相反,char函数可以把ASCII码矩阵转换为字符串矩阵。
例2.6 建立一个字符串向量,然后对该向量做如下处理: (1)取第1~5个字符组成的子字符串。 (2)将字符串倒过来重新排列。 (3)将字符串中的小写字母变成相应的大写字母,其余字符不变。 (4)统计字符串中小写字母的个数。
与字符串有关的另一个重要函数是eval,其调用格式为: eval(t) 其中t为字符串。它的作用是把字符串的内容作为对应的MATLAB语句来执行。例如 t=pi; m='[t,sin(t),cos(t)]'; y=eval(m)
2.6 结构和单元 2.6.1 结构数据 MATLAB通过使用结构(Structure)数据类型把一组不同类型的数据同时又是在逻辑上相关的数据组成一个有机的整体,以便于管理和引用。 1. 结构矩阵的建立与引用 2. 结构成员的修改
2.6.2 单元数据 单元(Cell)数据的概念与结构有些类似,也是把不同属性的数据放在一个变量中。所不同的是,结构变量的各个元素下有成员,每个成员都有自己的名字,对成员的引用是:结构变量名.成员名。而单元矩阵的各个元素就是不同类型的数据,用带有大括号下标的形式引用单元矩阵元素。