单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,2,章,MATLAB,矩阵及其运算,2.1,变量和数据操作,2.2 MATLAB,矩阵,2.3 MATLAB,运算,2.4,矩阵分析,2.5,矩阵的超越函数,2.6,字符串,2.7,结构数据和单元数据,2.8,稀疏矩阵,2.1,变量和数据操作,2.1.1,变量与赋值,1,变量命名在,MATLAB 6.5,中,变量名是以字母开头,后接字母、数字或下划线的字符序列,最多,63,个字符。在,MATLAB,中,变量名区分字母的大小写。,2,赋值语句,(1),变量,=,表达式,(2),表达式其中表达式是用运算符将有关运算量连接起来的式子,其结果是一个矩阵。,例,2-1,计算表达式的值,并显示计算结果。在,MATLAB,命令窗口输入命令:,x=1+2i;y=3-sqrt(17);z=(cos(abs(x+y)-sin(78*pi/180)/(x+abs(y),其中,pi,和,i,都是,MATLAB,预先定义的变量,分别代表代表圆周率,和虚数单位。输出结果是:,z=-0.3488+0.3286i,2.1.2,预定义变量,在,MATLAB,工作空间中,还驻留几个由系统本身定义的变量。例如,用,pi,表示圆周率,的近似值,用,i,,,j,表示虚数单位。预定义变量有特定的含义,在使用时,应尽量避免对这些变量重新赋值。,2.1.3,内存变量的管理,1,内存变量的删除与修改,MATLAB,工作空间窗口专门用于内存变量的管理。在工作空间窗口中可以显示所有内存变量的属性。当选中某些变量后,再单击,Delete,按钮,就能删除这些变量。当选中某些变量后,再单击,Open,按钮,将进入变量编辑器。通过变量编辑器可以直接观察变量中的具体元素,也可修改变量中的具体元素。,clear,命令用于删除,MATLAB,工作空间中的变量。,who,和,whos,这两个命令用于显示在,MATLAB,工作空间中已经驻留的变量名清单。,who,命令只显示出驻留变量的名称,,whos,在给出变量名的同时,还给出它们的大小、所占字节数及数据类型等信息。,2.1.4 MATLAB,常用数学函数,MATLAB,提供了许多数学函数,函数的自变量规定为矩阵变量,运算法则是将函数逐项作用于矩阵的元素上,因而运算的结果是一个与自变量同维数的矩阵。函数使用说明:,(1),三角函数以弧度为单位计算。,(2)abs,函数可以求实数的绝对值、复数的模、字符串的,ASCII,码值。,2.2 MATLAB,矩阵,2.2.1,矩阵的建立,1,直接输入法 最简单的建立矩阵的方法是从键盘直接输入矩阵的元素。具体方法如下:将矩阵的元素用方括号括起来,按矩阵行的顺序输入各元素,同一行的各元素之间用空格或逗号分隔,不同行的元素之间用分号分隔。,2,利用,M,文件建立矩阵 对于比较大且比较复杂的矩阵,可以为它专门建立一个,M,文件。下面通过一个简单例子来说明如何利用,M,文件创建矩阵。,例,2-2,利用,M,文件建立,MYMAT,矩阵。,(1),启动有关编辑程序或,MATLAB,文本编辑器,并输入待建矩阵:,(2),把输入的内容以纯文本方式存盘,(,设文件名为,mymatrix.m,),。,(3),在,MATLAB,命令窗口中输入,mymatrix,,即运行该,M,文件,就会自动建立一个名为,MYMAT,的矩阵,可供以后使用。,3,利用冒号表达式建立一个向量 冒号表达式可以产生一个行向量,一般格式是:,e1:e2:e3,其中,e1,为初始值,,e2,为步长,,e3,为终止值。在,MATLAB,中,还可以用,linspace,函数产生行向量。其调用格式为:,linspace(a,b,n,),其中,a,和,b,是生成向量的第一个和最后一个元素,,n,是元素总数。显然,,linspace(a,b,n,),与,a:(b-a)/(n-1):b,等价。,4,建立大矩阵大矩阵可由方括号中的小矩阵或向量建立起来。,2.2.2,矩阵的拆分,1,矩阵元素 通过下标引用矩阵的元素,例如,A(3,2)=200,元素的修改,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,列中的所有元素。,2.2.3,特殊矩阵,1,通用的特殊矩阵常用的产生通用特殊矩阵的函数有:,zeros,:产生全,0,矩阵,(,零矩阵,),。,ones,:产生全,1,矩阵,(,幺矩阵,),。,eye,:产生单位矩阵。,2.3 MATLAB,运算,2.3.1,算术运算,1,基本算术运算,MATLAB,的基本算术运算有:,(,加,),、,(,减,),、*,(,乘,),、,/(,右除,),、,(,左除,),、,(,乘方,),。注意,运算是在矩阵意义下进行的,单个数据的算术运算只是一种特例。,(1),矩阵加减运算 假定有两个矩阵,A,和,B,,则可以由,A+B,和,A-B,实现矩阵的加减运算。运算规则是:若,A,和,B,矩阵的维数相同,则可以执行矩阵的加减运算,,A,和,B,矩阵的相应元素相加减。如果,A,与,B,的维数不相同,则,MATLAB,将给出错误信息,提示用户两个矩阵的维数不匹配。,(2),矩阵乘法 假定,k,为数值,A,为矩阵,k*A,表示用,k,乘矩阵的每一个元素,.,假定有两个矩阵,A,和,B,,若,A,为,mn,矩阵,,B,为,np,矩阵,则,C=A*B,为,mp,矩阵。,(3),矩阵除法在,MATLAB,中,有两种矩阵除法运算:,和,/,,分别表示左除和右除。如果,A,矩阵是非奇异方阵,则,AB,和,B/A,运算可以实现。,AB,等效于,A,的逆左乘,B,矩阵,也就是,inv(A,)*B,,而,B/A,等效于,A,矩阵的逆右乘,B,矩阵,也就是,B*,inv(A,),。对于含有标量的运算,两种除法运算的结果相同,如,3/4,和,43,有相同的值,都等于,0.75,。又如,设,a=10.5,25,,则,a/5=5a=2.1000 5.0000,。对于矩阵来说,左除和右除表示两种不同的除数矩阵和被除数矩阵的关系。对于矩阵运算,一般,ABB/A,。,(4),矩阵的乘方 一个矩阵的乘方运算可以表示成,Ax,,要求,A,为方阵,,x,为标量。,2,点运算 在,MATLAB,中,有一种特殊的运算,因为其运算符是在有关算术运算符前面加点,所以叫点运算。点运算符有,.*,、,./,、,.,和,.,。两矩阵进行点运算是指它们的对应元素进行相关运算,要求两矩阵的维参数相同。,2.3.2,关系运算,MATLAB,提供了,6,种关系运算符:,(,小于,),、,(,大于,),、,=(,大于或等于,),、,=(,等于,),、,=(,不等于,),。它们的含义不难理解,但要注意其书写方法与数学中的不等式符号不尽相同。,关系运算符的运算法则为:,(1),当两个比较量是标量时,直接比较两数的大小。若关系成立,关系表达式结果为,1,,否则为,0,。,(2),当参与比较的量是两个维数相同的矩阵时,比较是对两矩阵相同位置的元素按标量关系运算规则逐个进行,并给出元素比较结果。最终的关系运算的结果是一个维数与原矩阵相同的矩阵,它的元素由,0,或,1,组成。,(3),当参与比较的一个是标量,而另一个是矩阵时,则把标量与矩阵的每一个元素按标量关系运算规则逐个比较,并给出元素比较结果。最终的关系运算的结果是一个维数与原矩阵相同的矩阵,它的元素由,0,或,1,组成。,2.3.3,逻辑运算,MATLAB,提供了,3,种逻辑运算符:,&(,与,),、,|(,或,),和,(,非,),。逻辑运算的运算法则为:,(1),在逻辑运算中,确认非零元素为真,用,1,表示,零元素为假,用,0,表示。,(2),设参与逻辑运算的是两个标量,a,和,b,,那么,,a&b,a,b,全为非零时,运算结果为,1,,否则为,0,。,a|b,a,b,中只要有一个非零,运算结果为,1,。,a,当,a,是零时,运算结果为,1,;当,a,非零时,运算结果为,0,。,(3),若参与逻辑运算的是两个同维矩阵,那么运算将对矩阵相同位置上的元素按标量规则逐个进行。最终运算结果是一个与原矩阵同维的矩阵,其元素由,1,或,0,组成。,(4),若参与逻辑运算的一个是标量,一个是矩阵,那么运算将在标量与矩阵中的每个元素之间按标量规则逐个进行。最终运算结果是一个与矩阵同维的矩阵,其元素由,1,或,0,组成。,(5),逻辑非是单目运算符,也服从矩阵运算规则。,(6),在算术、关系、逻辑运算中,算术运算优先级最高,逻辑运算优先级最低。,例,2-9,建立矩阵,A,,然后找出大于,4,的元素的位置。,(1),建立矩阵,A,。,A=4,-65,-54,0,6;56,0,67,-45,0(2),找出大于,4,的元素的位置。,find(A,4),2.6,字符串 在,MATLAB,中,字符串是用单撇号括起来的字符序列。,MATLAB,将字符串当作一个行向量,每个元素对应一个字符,其标识方法和数值向量相同。也可以建立多行字符串矩阵。,例,2-13,建立一个字符串向量,然后对该向量做如下处理:,(1),取第,1,5,个字符组成的子字符串。,(2),将字符串倒过来重新排列。,(3),将字符串中的小写字母变成相应的大写字母,其余字符不变。,(4),统计字符串中小写字母的个数。,命令如下:,ch,=ABc123d4e56Fg9;,subch,=ch(1:5)%,取子字符串,revch,=ch(end:-1:1)%,将字符串倒排,k=,find(ch,=,a&ch,=z);%,找小写字母的位置,ch(k,)=,ch(k,)-(a-A);%,将小写字母变成相应的大写字母,char(ch,),length(k,)%,统计小写字母的个数,与字符串有关的另一个重要函数是,eval,,其调用格式为:,eval(t,),其中,t,为字符串。它的作用是把字符串的内容作为对应的,MATLAB,语句来执行。,