第3讲矩阵的运算3.1MATLAB基本运算3.2矩阵分析3.3字符串3.1MATLAB基本运算3.1.1算术运算1.基本算术运算MATLAB的基本算术运算有:+(加)、-(减)、*(乘)、/(右除)、\(左除)、^(乘方)。注意,运算是在矩阵意义下进行的,单个数据的算术运算只是一种特例。(1)矩阵加减运算假定有两个矩阵A和B,则可以由A+B和A-B实现矩阵的加减运算。运算规则是:若A和B矩阵的维数相同,则可以执行矩阵的加减运算,A和B矩阵的相应元素相加减。如果A与B的维数不相同,则MATLAB将给出错误信息,提示用户两个矩阵的维数不匹配。(2)矩阵乘法假定有两个矩阵A和B,若A为m×n矩阵,B为n×p矩阵,则C=A*B为m×p矩阵。(3)矩阵除法在MATLAB中,有两种矩阵除法运算:\和/,分别表示左除和右除。如果A矩阵是非奇异方阵(行列式不等于零),则A\B和B/A运算可以实现。A\B等效于A的逆左乘B矩阵,也就是inv(A)*B,而B/A等效于A矩阵的逆右乘B矩阵,也就是B*inv(A)。对于含有标量的运算,两种除法运算的结果相同,如3/4和4\3有相同的值,都等于0.75。又如,设a=[10.5,25],则a/5=5\a=[2.10005.0000]。对于矩阵来说,左除和右除表示两种不同的除数矩阵和被除数矩阵的关系。对于矩阵运算,一般A\B≠B/A。(4)矩阵的乘方一个矩阵的乘方运算可以表示成A^x,要求A为方阵,x为标量。X为正整数2.点运算在MATLAB中,有一种特殊的运算,因为其运算符是在有关算术运算符前面加点,所以叫点运算。点运算符有.*、./、.\和.^。两矩阵进行点运算是指它们的对应元素进行相关运算,要求两矩阵的维参数相同。例3-1矩阵乘与矩阵点乘的区别:(1)矩阵乘:A=[123;034;201],B=[102;011;210],A*B(2)矩阵点乘:A=[123;034;201],B=[102;011;210],A.*B3.1.2关系运算MATLAB提供了6种关系运算符:(小于)、=(小于或等于)、(大于)、=(大于或等于)、==(等于)、~=(不等于)。它们的含义不难理解,但要注意其书写方法与数学中的不等式符号不尽相同。关系运算符的运算法则为:(1)当两个比较量是标量时,直接比较两数的大小。若关系成立,关系表达式结果为1,否则为0。(2)当参与比较的量是两个维数相同的矩阵时,比较是对两矩阵相同位置的元素按标量关系运算规则逐个进行,并给出元素比较结果。最终的关系运算的结果是一个维数与原矩阵相同的矩阵,它的元素由0或1组成。(3)当参与比较的一个是标量,而另一个是矩阵时,则把标量与矩阵的每一个元素按标量关系运算规则逐个比较,并给出元素比较结果。最终的关系运算的结果是一个维数与原矩阵相同的矩阵,它的元素由0或1组成。例3-2产生5阶随机方阵A,其元素为[10,90]区间的随机整数,然后判断A的元素是否能被3整除。(1)生成5阶随机方阵A:A=fix((90-10+1)*rand(5)+10)(2)判断A的元素是否可以被3整除:P=rem(A,3)==0其中,rem(A,3)是矩阵A的每个元素除以3的余数矩阵。此时,0被扩展为与A同维数的零矩阵,P是进行等于(==)比较的结果矩阵。3.1.3逻辑运算MATLAB提供了3种逻辑运算符:&(与)、|(或)和~(非)。逻辑运算的运算法则为:(1)在逻辑运算中,确认非零元素为真,用1表示,零元素为假,用0表示。逻辑运算的运算法则为:(1)在逻辑运算中,确认非零元素为真,用1表示,零元素为假,用0表示。(2)设参与逻辑运算的是两个标量a和b,那么:a&ba,b全为非零时,运算结果为1,否则为0。a|ba,b中只要有一个非零,运算结果为1。~a当a是零时,运算结果为1;当a非零时,运算结果为0。(3)若参与逻辑运算的是两个同维矩阵,那么运算将对矩阵相同位置上的元素按标量规则逐个进行。最终运算结果是一个与原矩阵同维的矩阵,其元素由1或0组成。(4)若参与逻辑运算的一个是标量,一个是矩阵,那么运算将在标量与矩阵中的每个元素之间按标量规则逐个进行。最终运算结果是一个与矩阵同维的矩阵,其元素由1或0组成。(5)逻辑非是单目运算符,也服从矩阵运算规则。(6)在算术、关系、逻辑运算中,算术运算优先级最高,逻辑运算优先级最低。例3-3建立矩阵A,然后找出大于4的元素的位置。(1)建立矩阵A:A=[4,-65,-54,0,6;56,0,67,-45,0](2)找出大于4的元素的位置:find(A4)3.2矩阵分析3.2.1对角阵与三角阵1.对角阵只有对角线上有非0元素的矩阵称为对角矩阵,对角线上的元素相等的对角矩阵称为数量矩阵,对角线上的元素都为1的对角矩阵称为单位矩阵。(1)提取矩阵的对角线元素设A为m×n矩阵,diag(A)函数用于提取矩阵A主对角线元素,产生一个具有min(m,n)个元素的列向量。diag(A)函数还有一种形式diag(A,k),其功能是提取第k条对角线的元素。(2)构造对角矩阵设V为具有m个元素的向量,diag(V)将产生一个m×m对角矩阵,其主对角线元素即为向量V的元素。diag(V)函数也有另一种形式diag(V,k),其功能是产生一个n×n(n=m+k)对角阵,其第k条对角线的元素即为向量V的元素。例3-4先建立5×5矩阵A,然后将A的第一行元素乘以1,第二行乘以2,…,第五行乘以5。A=[17,0,1,0,15;23,5,7,14,16;4,0,13,0,22;10,12,19,21,3;11,18,25,2,19];D=diag(1:5);D*A%用D左乘A,对A的每行乘以一个指定常数2.三角阵三角阵又进一步分为上三角阵和下三角阵,所谓上三角阵,即矩阵的对角线以下的元素全为0的一种矩阵,而下三角阵则是对角线以上的元素全为0的一种矩阵。(1)上三角矩阵求矩阵A的上三角阵的MATLAB函数是triu(A)。triu(A)函数也有另一种形式triu(A,k),其功能是求矩阵A的第k条对角线以上的元素。例如,提取矩阵A的第2条对角线以上的元素,形成新的矩阵B。(2)下三角矩阵在MATLAB中,提取矩阵A的下三角矩阵的函数是tril(A)和tril(A,k),其用法与提取上三角矩阵的函数triu(A)和triu(A,k)完全相同。3.2.2矩阵的转置与旋转1.矩阵的转置转置运算符是单撇号(’)。2.矩阵的旋转利用函数rot90(A,k)将矩阵A旋转90º的k倍,当k为1时可省略。逆时针3.矩阵的左右翻转对矩阵实施左右翻转是将原矩阵的第一列和最后一列调换,第二列和倒数第二列调换,…,依次类推。MATLAB对矩阵A实施左右翻转的函数是fliplr(A)。4.矩阵的上下翻转MATLAB对矩阵A实施上下翻转的函数是flipud(A)。3.2.3矩阵的逆与伪逆1.矩阵的逆对于一个方阵A,如果存在一个与其同阶的方阵B,使得:A·B=B·A=I(I为单位矩阵)则称B为A的逆矩阵,当然,A也是B的逆矩阵。求一个矩阵的逆是一件非常烦琐的工作,容易出错,但在MATLAB中,求一个矩阵的逆非常容易。求方阵A的逆矩阵可调用函数inv(A)。例3-5用求逆矩阵的方法解线性方程组。Ax=b其解为:x=A-1b命令为:a=[2,-3,1;8,3,2;45,1,-9];b=[4;2;17];x=inv(a)*b2.矩阵的伪逆如果矩阵A不是一个方阵,或者A是一个非满秩的方阵时,矩阵A没有逆矩阵,但可以找到一个与A的转置矩阵A’同型的矩阵B,使得:A·B·A=AB·A·B=B此时称矩阵B为矩阵A的伪逆,也称为广义逆矩阵。在MATLAB中,求一个矩阵伪逆的函数是pinv(A)。3.2.4方阵的行列式把一个方阵看作一个行列式,并对其按行列式的规则求值,这个值就称为矩阵所对应的行列式的值。在MATLAB中,求方阵A所对应的行列式的值的函数是det(A)。3.2.5矩阵的秩与迹1.矩阵的秩矩阵线性无关的行数与列数称为矩阵的秩。在MATLAB中,求矩阵秩的函数是rank(A)。2.矩阵的迹矩阵的迹等于矩阵的对角线元素之和,也等于矩阵的特征值之和。在MATLAB中,求矩阵的迹的函数是trace(A)。3.2.6向量和矩阵的范数矩阵或向量的范数用来度量矩阵或向量在某种意义下的长度。范数有多种方法定义,其定义不同,范数值也就不同。1.向量的3种常用范数及其计算函数在MATLAB中,求向量范数的函数为:(1)norm(V)或norm(V,2):计算向量V的2—范数。(2)norm(V,1):计算向量V的1—范数。(3)norm(V,inf):计算向量V的∞—范数。求最大值2.矩阵的范数及其计算函数MATLAB提供了求3种矩阵范数的函数,其函数调用格式与求向量的范数的函数完全相同。3.2.7矩阵的条件数在MATLAB中,计算矩阵A的3种条件数的函数是:(1)cond(A,1)计算A的1—范数下的条件数。(2)cond(A)或cond(A,2)计算A的2—范数数下的条件数。(3)cond(A,inf)计算A的∞—范数下的条件数。3.2.8矩阵的特征值与特征向量在MATLAB中,计算矩阵A的特征值和特征向量的函数是eig(A),常用的调用格式有3种:(1)E=eig(A):求矩阵A的全部特征值,构成向量E。(2)[V,D]=eig(A):求矩阵A的全部特征值,构成对角阵D,并求A的特征向量构成V的列向量。(3)[V,D]=eig(A,‘nobalance’):与第2种格式类似,但第2种格式中先对A作相似变换后求矩阵A的特征值和特征向量,而格式3直接求矩阵A的特征值和特征向量。例3-6用求特征值的方法解方程:3x5-7x4+5x2+2x-18=0p=[3,-7,0,5,2,-18];A=compan(p);%A的伴随矩阵x1=eig(A)%求A的特征值x2=roots(p)%直接求多项式p的零点3.3字符串在MATLAB中,字符串是用单撇号括起来的字符序列。MATLAB将字符串当作一个行向量,每个元素对应一个字符,其标识方法和数值向量相同。也可以建立多行字符串矩阵。字符串是以ASCII码形式存储的。abs和double函数都可以用来获取字符串矩阵所对应的ASCII码数值矩阵。相反,char函数可以把ASCII码矩阵转换为字符串矩阵。例3-7建立一个字符串向量,然后对该向量做如下处理:(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语句来执行。例3-8eval演示:t='A=[12;31]'s='inv(A)'eval(t)eval(s)