1、第2章 MATLAB数据及其运算,2.1 MATLAB数据的特点2.2 变量和赋值2.3 MATLAB矩阵2.4 MATLAB运算2.5 字符串2.6 结构和单元,2.1 MATLAB数据的特点,1矩阵是MATLAB最基本、最重要的数据对象。向量、单个数据(标量)可以看成是矩阵的特例。 2MATLAB数据类型 数值数据:双精度数(double)、单精度数(single)、带符号整数(int)和无符号整数(uint)。 字符数据(用函数char实现)。 结构(Structure)和单元(Cell)。 多维矩阵和稀疏矩阵(Sparse)。,2.2 变量和赋值,2.2.1 变量的命名 在MATLAB
2、中,变量名是以字母开头,后接字母、数字或下划线的字符序列。 在MATLAB中,变量名区分字母的大小写。MATLAB提供的标准函数名以及命令名必须用小写字母。,2.2.2 赋值语句 MATLAB赋值语句有两种格式: (1) 变量=表达式 (2) 表达式 一般地,运算结果在命令窗口中显示出来。如果在语句的最后加分号,那么,MATLAB仅仅执行赋值操作,不再显示运算的结果。 在MATLAB语句后面可以加上注释,注释以%开头,后面是注释的内容。,例2.1 计算表达式的值,并将结果赋给变量x,然后显示出结果。在MATLAB命令窗口输入命令:x=(5+cos(47*pi/180)/(1+sqrt(7)-2
3、*i) %计算表达式的值执行结果: x =1.1980 + 0.6572i,2.2.3 数据的输出格式 MATLAB用十进制数表示一个常数,具体可采用日常记数法和科学记数法两种表示方法 如:3.1415 2+4i 1.7809e2 数据输出时用户可以用format命令设置或改变数据输出格式。 format命令的格式为: format 格式符 注意,format命令只影响数据输出格式,而不影响数据的计算和存储。,数值计算结果的显示格式,在MATLAB指令窗中,直接输入相应的指令,或在菜单弹出框中进行选择,都可获得所需的数值计算结果显示格式。,2.2.4 预定义变量在MATLAB工作空间中,还驻留
4、几个由系统本身定义的变量。它们有特定的含义,在使用时,应尽量避免对这些变量重新赋值。比如:ans(缺省赋值变量);pi(圆周率);inf(无穷大);nan(非数),非数NaN,按IEEE规定,0/0,/,0等运算都会产生非数(Not a Number)。该非数在MATLAB中用NaN或nan记述。 根据IEEE数学规范,NaN具有以下性质: NaN参与运算所得的结果也是NaN,即具有传递性; 非数没有大小概念,因此不能比较两个非数的大小。 非数的功用: 真实记述0/0,/,0运算的后果; 避免可能因0/0,/,0运算而造成程序执行的中断; 在数据可视化中,用来裁剪图形。,2.2.5 内存变量的
5、管理,1. 内存变量的显示与删除who和whos这两个命令用于显示在MATLAB工作空间中已经驻留的变量名清单。(who只列变量名;whos还列变量维数、字节、 类型) clear命令用于删除MATLAB工作空间中的变量。 注意,预定义变量不能被删除。 2. 工作空间浏览器专门用于内存变量的管理。可以通过双击工作空间的变量进行变量的编辑(包括改变输出格式和变量中的具体元素),3. 内存变量文件 利用MAT文件(.mat)可以把当前MATLAB工作空间中的一些有用变量长久地保留下来。 MAT文件的生成和装入由save和load命令来完成。 常用格式为:save 文件名 变量名表 -append-
6、asciiload 文件名 变量名表 -ascii,2.3 MATLAB矩阵,2.3.1 矩阵的建立1. 直接输入法将矩阵的元素用方括号括起来,按矩阵行的顺序输入各元素,同一行的各元素之间用空格或逗号分隔,不同行的元素之间用分号分隔。例如: A=1 2 3;4 5 6;7 8 9执行结果:A =1 2 34 5 67 8 9,2. 利用M文件建立矩阵,对于比较大且比较复杂的矩阵,可以为它专门建立一个M文件。例2.2 利用M文件建立MYMAT矩阵。(1)单击命令窗口FileNewM file,在编辑区内输入待建矩阵;mydat=2 3 5;5 6 7;8 9 1;(2)在文本编辑器窗口,单击Fi
7、leSave保存(设文件名为mymatrix.m)。3)运行该M文件,就会自动建立一个名为mydat的矩阵,可供以后使用。,3. 利用MATLAB函数建立矩阵 几个产生特殊矩阵的函数:zeros、ones、 eye、rand、randn。 这几个函数的调用格式相似,下面以产生零矩阵的zeros函数为例进行说明。其调用格式是:zeros(m) 产生mm零矩阵zeros(m,n) 产生mn零矩阵。 zeros(size(A) 产生与矩阵A同样大小的零矩阵 相关的函数有:length(A)给出行数和列数中的较大者,即length(A)=max(size(A);ndims(A)给出A的维数。,例2.3
8、 分别建立33、32和与矩阵A同样大小的零矩阵。 (1)建立一个33零矩阵:zeros(3) (2)建立一个32零矩阵:zeros(3,2) (3)建立与矩阵A同样大小零矩阵:zeros(size(A)此外,常用的函数还有reshape(A,m,n),它在矩阵总元素保持不变的前提下,将矩阵A重新排成mn的二维矩阵。,4. 建立大矩阵大矩阵可由方括号中的小矩阵建立起来。例如:A=1 2 3;4 5 6;7 8 9; C=A,eye(size(A); ones(size(A),A执行结果:C =1 2 3 1 0 04 5 6 0 1 07 8 9 0 0 11 1 1 1 2 31 1 1 4
9、5 61 1 1 7 8 9,2.3.2 冒号表达式 冒号表达式的一般格式:e1:e2:e3例: t=0:2:10执行结果: t =0 2 4 6 8 10 还可以用linspace函数产生行向量:linspace(a,b,n) linspace(a,b,n)与a:(b-a)/(n-1):b等价。,2.3.3 矩阵的拆分 1. 矩阵元素 MATLAB允许用户对一个矩阵的单个元素进行赋值和操作。 例如:A(3,2)=200 也可以采用矩阵元素的序号来引用矩阵元素。矩阵元素按列编号,先第一列,再第二列,依次类推。 以mn矩阵A为例,矩阵元素A(i,j)的序号为(j-1)*m+i。,2. 矩阵拆分(
10、1)利用冒号表达式获得子矩阵A(:,j)表示取A矩阵的第j列全部元素;A(i,:)表示A矩阵第i行的全部元素;A(i,j)表示取A矩阵第i行、第j列的元素。A(i:i+m,:)表示取A矩阵第ii+m行的全部元素;A(:,k:k+m)表示取A矩阵第kk+m列的全部元素,A(i:i+m,k:k+m)表示取A矩阵第ii+m行内,并在第kk+m列中的所有元素。,(2)利用空矩阵删除矩阵的元素 在MATLAB中,定义为空矩阵。给变量X赋空矩阵的语句为X=。 注意,X=与clear X不同,clear是将X从工作空间中删除,而空矩阵则存在于工作空间,只是维数为0。 将某些元素从矩阵中删除,采用将其置为空矩
11、阵的方法就是一种有效的方法。,例 1. (利用冒号表达式) a=1 2 3 4 5;6 7 8 9 10;11 12 13 14 15;16 17 18 19 20; a(2:3,4:5) ans =9 1014 15例 2. (利用空矩阵) a=1 2 3 4 5;6 7 8 9 10;11 12 13 14 15;16 17 18 19 20; a(:,2 4)= a =1 3 56 8 1011 13 1516 18 20,2.4 MATLAB运算,2.4.1算术运算1. 基本算术运算MATLAB的基本算术运算有:(加)、(减)、*(乘)、/(右除)、(左除)、(乘方)。注意:运算是在矩
12、阵意义下进行的,单个数据的算术运算只是一种特例。2. 点运算点运算符有.*、./、.和.。两矩阵进行点运算是指它们的对应元素进行相关运算,要求两矩阵的维参数相同。3MATLAB常用数学函数,2.4.2 关系运算MATLAB提供了6种关系运算符:(大于)、=(大于或等于)、=(等于)、=(不等于)。关系运算符的运算法则: (1)若比较量均为标量,则直接运算; (2)若比较量为标量和矩阵,则标量和矩阵的每个元素运算,结果为与矩阵同维矩阵; (3)若比较量为同型矩阵,则矩阵的对应元素运算,结果为与矩阵同维矩阵。,例2.4 产生5阶随机方阵A,其元素为10,90区间的随机整数,然后判断A的元素是否能被
13、3整除。(1) 生成5阶随机方阵A。A=fix(90-10+1)*rand(5)+10)(2) 判断A的元素是否可以被3整除。P=rem(A,3)=0 P =0 0 0 1 00 0 0 0 00 0 1 1 10 0 1 0 00 0 1 0 1,2.4.3 逻辑运算MATLAB提供了3种逻辑运算符: &(与)、|(或)和(非)。 运算法则: (1)若比较量均为标量,则直接运算; (2)若比较量为标量和矩阵,则标量和矩阵的每个元素运算,结果为与矩阵同维矩阵; (3)若比较量为同型矩阵,则矩阵的对应元素运算,结果为与矩阵同维矩阵。 (4)算术运算关系运算逻辑运算。,例2.5 在0,3区间,按要
14、求求y=sin(x)的值: 方法1: x=0:pi/100:3*pi;y=sin(x); y1=(x2*pi).*y; %消去负半波 q=(xpi/3 %按要求处理第(2)步,2.5 字符串,字符串是用单撇号括起来的字符序列。例如,ch=Central South University。若字符串中的字符含有单撇号,则该单撇号字符应用两个单撇号来表示。disp(I m a teacher. ) Matlab 将字符串当作一个行向量,也可以建立多行字符串矩阵。ch= abcdef ; 123456 ; 字符串是以ASCII码形式存储的。 char函数可以把ASCII码矩阵转换为字符串矩阵。,例2.
15、6 建立一个字符串向量,然后对该向量 做如下处理: (1)取第15个字符组成的子字符串。 (2)将字符串倒过来重新排列。 (3)将字符串中的小写字母变成相应的大写字母,其余字符不变。 (4)统计字符串中小写字母的个数。,例2.6 ch=ABc123d4e56Fg9 subch=ch(1:5) subch = ABc12 revch=ch(end:-1:1) revch = 9gF65e4d321cBA k=find(ch=a&ch=z) ch(k)=ch(k)-(a- A) char(ch) ans = ABC123D4E56FG9 length(k) ans =4,与字符串有关的另一个重要函
16、数是eval,其调用格式为:eval(t)其中t为字符串。它的作用是把字符串的内容作为对应的MATLAB语句来执行。例如:t=pi;m=t,sin(t),cos(t);y=eval(m)y =3.1416 0.0000 -1.0000,2.6 结构和单元,2.6.1 结构数据MATLAB通过使用结构(Structure)数据类型把一组不同类型的数据同时又是在逻辑上相关的数据组成一个有机的整体,以便于管理和引用。1. 结构矩阵的建立与引用2. 结构成员的修改,1. 结构矩阵的建立与引用 建立 具体格式: 结构矩阵名.成员名=表达式 例如:建立含有3个元素的结构矩阵a a(1).x1=10;a(1
17、).x2 yu ;a(1).x3=11 21;34 78; a(2).x1=12;a(2).x2= zhang ;a(2).x3=13 26;56 43; a(3).x1=14;a(3).x2= liu ;a(3).x3=41 57;112 90; 结构矩阵元素的成员也可以是结构数据。 a(2).x1.x11=90;a(3).x1.x12=12;a(3).x1.x13=30; 引用 对结构数据的引用可以是结构矩阵元素(如a(2));可以是其元素(如a(3).x1);也可以是此结构矩阵变量(如a )。,2.6.2 单元数据单元(Cell)数据的概念与结构有些类似,也是把不同属性的数据放在一个变量中。所不同的是,结构变量的各个元素下有成员,每个成员都有自己的名字,对成员的引用是:结构变量名.成员名。而单元矩阵的各个元素就是不同类型的数据,用带有大括号下标的形式引用单元矩阵元素。,