第6章矩阵分析75.ppt
第六章,矩阵分析,荆华,MATLAB使用详解2012学年选修课,第6章 矩阵分析,MATLAB内置了大量的数值计算函数,这些函数封装了常用的数值计算功能。利用这些数值计算函数,能够从烦琐的编程工作中解放出来,集中精力解决问题。本课程将MATLAB数值计算分为矩阵分析、函数分析和数据分析等初等数值计算内容进行讲解。,教学重点:,本讲的矩阵分析主要讨论以下问题:矩阵基本运算,如加、减、乘、除四则运算;矩阵特征量,如行列式、秩等;矩阵分解;矩阵函数;稀疏矩阵。,6.1 MATLAB数值计算中的矩阵分析,矩阵分析无论是在数学理论还是实际工程问题中都具有重要的应用,例如,线性方程组的解与矩阵除法、矩阵的特征量(如行列式、逆、条件数、秩等)、矩阵分解相关;MATLAB的最初雏形是为了解决大规模矩阵运算而编写的一系列函数模块。矩阵作为MATLAB的基本数据结构,一直是MATLAB的核心,是MATLAB基本的运算单元,其大部分的内建函数也都支持矩阵作为输入变量,用户在编写自用程序时也应当尽量使用矩阵作为输入变量。,6.2 矩阵基本运算,矩阵的加、减、乘、除四则运算、幂运算、比较运算和逻辑运算等代数运算是MATLAB数值计算最基础的部分。这里可以粗略地将矩阵运算分为两类,即普通数值运算(四则运算、幂运算)和关系运算(比较运算、逻辑运算。本节最后将特别介绍矩阵的按位运算。,6.2.1 矩阵的加、减,矩阵的加、减运算定义为相应元素的加减。对矩阵A、B,其和(差),C也为 矩阵,且cmn=amn+bmn。矩阵的加、减运算要求参与运算的矩阵具有相同的大小,或者其中之一为标量,例如 矩阵A与标量 的和(差),为 矩阵,且。,应用举例:,例:已知矩阵 A=1:4;5:8,B=0:3;1:4,C=1:3;2:4,x3,求A+B,A+C,A+x。,在Matlab中执行结果如下:A+Bans=1 3 5 7 6 8 10 12 A+C?Error using=plusMatrix dimensions must agree.A+3ans=4 5 6 7 8 9 10 11,注意:矩阵加减运算要求参与运算的矩阵具有相同的大小,即行数、列数相等,否则系统会拒绝运算,并给出出错信息。一种例外的情况是参与运算的矩阵之一为标量。,6.2.2 矩阵的线性代数乘法*,应用举例:,已知矩阵A=1,2,1;-1,3,1,矩阵B=-1,2;2,3;4,6,求A*B和B*A。在Matlab中执行结果如下:A*B ans=7 14 11 13 B*A ans=-3 4 1-1 13 5-2 26 10,注意:矩阵乘法要求 被乘矩阵的列数与乘矩阵的行数相等,否则系统给出错误信息。可以看到A*B并不等于B*A。,6.2.3 矩阵的按位乘法,Matlab定义了另一类矩阵乘法,称之为矩阵的按位乘法。由CA*B表示,其中A、B为M x N矩阵,按位乘法所得结果C也为M x N矩阵。说明:参与按位乘法运算的矩阵应具有相同的大小,或者至少有一个为标量。矩阵和标量的线性代数乘法与按位乘法是等效的。矩阵按位乘法是可交换的,即A*BB*A。,应用举例:,已知A=1,2;3,4;B=-1,1;1,1;C=1,2,3;求A.*B,B.*A,A.*C。,MATLAB执行结果如下:A.*Bans=-1 2 3 4 B.*Aans=-1 2 3 4 A.*C?Error using=timesMatrix dimensions must agree.,参与按位乘法运算的矩阵必须具有相同的行数和列数,6.2.4 矩阵线性代数除法,矩阵除法是矩阵乘法的逆运算,MATLAB也定义了两类矩阵除法。第一类是矩阵的线性代数除法,对应于矩阵线性代数乘法的逆运算。矩阵线性代数除法又有两种算子,即右除算子和左除算子,如表所示。,矩阵线性代数除法,Matlab在进行矩阵线性代数除法运算时,对右除A/B,要求A的列数与B的列数相等;对左除AB,要求A的行数与B的行数相等。,6.2.4 矩阵线性代数除法*,应用举例:,例:已知 A=rand(3),B=1,2,3T,分别求线性方程组A*XB和X*ABT的解;,在Matlab中执行结果如下:A=rand(3)A=0.9501 0.4860 0.4565 0.2311 0.8913 0.0185 0.6068 0.7621 0.8214 B=1,2,3;X=ABX=-1.3480 2.5460 2.2860验证是否A*X等于B A*Xans=1.0000 2.0000 3.0000显然A*XB;,AB对应线性方程A*XB的解 B/A对应线性方程 X*AB的解,应用举例:,X*ABT的解为X=B/AMatlab命令窗口中输入 X=B/A执行结果如下:X=-1.7100-0.7740 4.6200验证是否X*ABT在Matlab中输入 X*A执行结果如下:ans=1 2 3显然X*ABT注意:左除式要求参与运算的矩阵具有相同的行数,右除式要求参与运算的矩阵具有相同的列数。,与矩阵按位乘法相似,Matlab也定义了矩阵按位除法。矩阵按位除法也有两种算子,即左除算子和右除算子。矩阵的按位除法要求参与运算的矩阵具有相同的大小,或至少有一个为标量。,6.2.5 矩阵按位除法,矩阵按位除法,应用举例:,例:已知A=1,3;2,1,B=2,6;2,1,求A./B和A.B在Matlab中执行结果如下:A./Bans=0.5000 0.5000 1.0000 1.0000 A.Bans=2 2 1 1,6.2.6 矩阵的幂,矩阵的幂与矩阵乘法具有紧密的联系,MATLAB也定义了两类矩阵幂运算。第一类与矩阵线性代数乘法相对应,由 表示,其中 为N阶方阵。注意:这里特别要注意的是参与幂运算的矩阵必须是方阵。因为:矩阵乘法要求 被乘矩阵的列数与乘矩阵的行数相等,由于被乘矩阵与乘矩阵为同一矩阵因此要求矩阵A为方阵。,应用举例:,已知A=1,2;-1,2,B=1,2;-1,2;3,5,求A2和B2在Matlab命令窗口中输入 A=1,2;-1,2;B=1,2;-1,2;3,5;执行结果如下:A2ans=-1 6-3 2 B2?Error using=mpower Matrix must be square.,6.2.7 矩阵按位幂,与矩阵乘法相对应,Matlab定义了另外一类矩阵幂运算,即矩阵的按位幂运算。矩阵的按位幂运算由C=A.r表示,其中A为M X N矩阵,按位幂运算的结果C也为M X N矩阵,且Cmnarmn。矩阵按位幂运算不要求参与运算的矩阵是方阵。,应用举例:,已知A=1,-1;2,2;1,3,求A.2和A.3。在Matlab命令窗口中输入:A=1,-1;2,2;1,3;A.2 A.3执行结果如下:A.2 A.3ans=ans=1 1 1-1 4 4 8 8 1 9 1 27,显然A.2不等于A2矩阵按位幂运算不要求参与运算的矩阵是方阵。,6.2.8 矩阵按位运算,按位运算是MATLAB为矩阵设计的一种简洁、高效、安全的运算模式,能够提高代码执行的高效和安全程度。前面介绍的矩阵加减、按位乘除、按位幂都是按位运算符。按位运算符一般有一个(.)作为前导符。,表:常见的矩阵按位运算符,6.3 矩阵特征量,线性代数中有一些矩阵特征量用于刻画矩阵某方面的性质,包括矩阵的行列式、秩、条件数、以及矩阵的逆等。,6.3.1 矩阵的行列式,关于矩阵行列式的概念,这里不作赘述,如有疑问,请参考任何一本线性代数方面的书籍。如N阶矩阵的行列式不等于0,即|A|0时,称矩阵A非奇异,如果限定线性方程组的系数矩阵为方阵,当A非奇异,则线性方程有惟一解。对N 阶方阵,MATLAB调用函数det(A)得到矩阵行列式|A|。注意:只能求方阵的行列式,否则系统报错,应用举例:,例:已知Amagic(3),求|A|。在Matlab命令窗口中输入如下代码:A=magic(3);A=8 1 6 3 5 7 4 9 2 det(A)执行结果如下:ans=-360,应用举例:,例:矩阵A1,2,3;3,4,5求其行列.A=1,2,3;3,4,5A=1 2 3 3 4 5 det(A)?Error using=detMatrix must be square,6.3.2 矩阵的逆,若线形方程组Ax=b且系数矩阵A非奇异,即|A|不等于0,则线性方程组有惟一解,该惟一解为xA1b,其中A1为A的逆矩阵。对非奇异矩阵A,其逆矩阵A1是满足以下条件的矩阵:AA1=A1A=I(I为单位矩阵)。MATLAB调用函数inv(A)求A的逆矩阵A1。当A奇异时即|A|=0,inv(A)依然能被执行,Matlab只会给出警告信息。,应用举例:,已知A=1,2,3;1,4,9;1,8,27b=12;16;8求A1验证AA1=A1A=I,求Axb的解。,在Matlab命令窗口中输入如下代码 A=1,2,3;1,4,9;1,8,27;b=12;16;8;cinv(A)执行结果如下:c=3.0000-2.5000 0.5000-1.5000 2.0000-0.5000 0.3333-0.5000 0.1667 A*cans=1.0000 0 0 0.0000 1.0000 0 0.0000 0 1.0000,应用举例:,c*Aans=1.0000-0.0000-0.0000 0 1.0000 0 0.0000 0 1.0000 c*bans=-0.0000 10.0000-2.6667,应用举例:,例:B1,2,3;1,2,3;1,2,3,求逆B1B=1 2 3 1 2 3 1 2 3 inv(B)Warning:Matrix is singular to working precision.ans=Inf Inf Inf Inf Inf Inf Inf Inf Inf 解为无穷,det(B)=0,6.3.3 矩阵的秩,矩阵线性无关的行数与列数称为矩阵的秩。Matlab中的函数rank用于求矩阵的秩,其调用格式为:R=rank(A)。例如:T=1 1 1;2 2 3T=1 1 1 2 2 3 r=rank(T)r=2,6.4 矩阵分解,矩阵分解是矩阵理论的重要内容,在信号处理、自动控制等众多领域中有着非常广泛的应用。矩阵分解通过将复杂矩阵表示成形式简单或具有良好数学性质(统称为简单矩阵)的组合,以便于理论分析或数值计算。目前比较常用的矩阵分解方法有:特征分解(EVD)、Schur(舒尔)分解、Cholesky(柯利)分解、三角分解(LU)分解、正交分解(QR)分解、奇异值分解(SVD)分解等。,6.4 矩阵分解,表列出了一些常用的矩阵分解及其对应的MATLAB实现函数,对N阶方阵A,为标量,V是非零的N维列向量,且满足Avv。则称为方阵A的特征值,v是A相对于特征值的特征向量。在MATLAB中,计算矩阵A的特征值和特征向量的函数是eig(A),常用的调用格式有2种:(1)E=eig(A)矩阵A的全部特征值,构成向量E。(2)V,D=eig(A)矩阵A的全部特征值,构成对角阵D,并且A的特征向量构成V的列向量。,6.4.1 特征分解,应用举例:,例:求3阶范德蒙德矩阵A的特征分解。A=vander(1:3)A=1 1 1 4 2 1 9 3 1 V,D=eig(A)V=-0.2738-0.3487 0.2014-0.5006 0.1162-0.7710-0.8213 0.9300 0.6042D=5.8284 0 0 0-2.0000 0 0 0 0.1716,5.8284,-2.0000,0.1716为A的特征值,求解线性方程组:,利用矩阵的LU(三角分解)、QR(正交分解)和Cholesky(柯利)分解法对求解求解大型方程组非常有用。优点是运算速度快、可以节省磁盘空间、节省内存,6.4.3 Cholesky分解,如果A为对称正定矩阵,则Cholesky分解可将矩阵A分解为上三角矩阵和其转置矩阵的乘积,即A=RT*R,其中R上三角矩阵。MATLAB提供函数chol用于正定矩阵的Cholesky分解。Chol常用的调用格式有以下两种:R=chol(X)R,p=chol(X)如果X为正定矩阵,则返回上三角矩阵R,此时p=0,表示函数调用成功;如果X非正定,则前一种调用会产生错误信息,后一种调用不会产生错误,而是将p设为正整数,因此,可以通过查询p的状态检查Cholesky分解是否成功,也可以依此判断X的正定性。,应用举例:,例:已知A=1,1,1,1;1,2,3,4;1,3,6,10;1,4,10,20,求矩阵A的Cholesky分解。在Matlab命令窗口中输入:A=1,1,1,1;1,2,3,4;1,3,6,10;1,4,10,20;R,P=chol(A)R=1 1 1 1 0 1 2 3 0 0 1 3 0 0 0 1P=0,R上为三角矩阵,p=0,表示函数调用成功,也说明矩阵A是正定矩阵,应用举例*:,已知A16 4 8;4 5-4;8-4 22,B=28 5 26T 通过Cholesky分解法求AX=B的解,因为A=RT*R,因此A*X=B变成RT*R*X=B X=R(RTB)A=16 4 8;4 5-4;8-4 22 B=28 5 26 R=chol(A)X=R(RB),LU分解法,可以把任意矩阵分解为下三角矩阵的基本变换形式和上三角矩阵的乘积。即A=LU(或PALU)L为下三角矩阵,U为上三角矩阵,P为置换矩阵。在Matlab中函数LU用于矩阵的LU分解,其基本的调用格式为:L,U=lu(A);L,U,P=lu(A)。,6.4.4 LU(三角)分解,矩阵的LU分解最常用于求解线性方程组Axb。首先做LU分解PALU,线性方程组Axb转换为LUxPb,求解过程分两步进行:1)首先求解线性方程组LyPb,可得yL(Pb);2)接着求原方程组的解Uxy,得xUy。,6.4.4 LU(三角)分解*,应用举例*:,例:利用LU分解求线性方程组1,2,3;4,5,6;7,8,9x=2;3;4的解。,Axb转换为LUxPb,x=UL(pb)在Matlab命令窗口中输入如下代码:A=1,2,3;4,5,6;7,8,9;b=2;3;4;L,U,P=lu(A);y=L(P*b);x=Uy,6.4.5 QR(正交)分解,对于任何长方矩阵A,都可以进行QR分解,其中Q为正交矩阵,R为上三角矩阵,即A=QR。在Matlab中常用的调用格式为:Q,R=qr(A);因为A=QR 因此A*X=b变成Q*R*X=b X=R(Qb),应用举例*:,已知A=16 4 8;4 5-4;8-4 22,B=28 5 26T通过QR分解法求AXB的解,A*X=b变成Q*R*X=b X=R(Qb)A=16 4 8;4 5-4;8-4 22 B=28 5 26 Q,R=qr(A)X=R(QB),6.5 矩阵函数,矩阵函数是矩阵理论的重要概念,在信号处理、系统控制等领域有着重要的应用。如果将矩阵看作一个线性系统,那么矩阵函数可以看作系统的级联、合成。利用矩阵函数的概念可以得到很多工程应用中有用的工具。,6.5.1 常用矩阵函数,注意:1)矩阵函数仅支持方阵作为输入参数。2)sqrtm(A)与sqrt(A)不同,B=sqrt(A)是对A中的每个元素求平方根,那么就有B.2=A B=sqrtm(A)是求矩阵A的平方根,那么就有B2=A,应用举例:,例:已知A=1,1;0,4求sqrt(A)和sqrtm(A)。在matlab命令窗口中输入如下代码:A=1,1;0,4A=1 1 0 4 sqrt(A)ans=1 1 0 2 sqrtm(A)ans=1.0000 0.3333 0 2.0000,6.6 稀疏矩阵,实际工程中的数据处理任务面临大容量数据的挑战,当涉及大型矩阵的数值计算时,一个重要的问题是存储和执行效率的问题。稀疏矩阵的概念,正是为了解决这一问题而提出的。从数学性质上看,稀疏矩阵与一般的矩阵没有差别,但在数据存储和执行算法上有着很大的不同。本节在讲述稀疏矩阵时,经常与全(满)矩阵作对比,使大家对稀疏矩阵的概念和使用方法有一个更加透彻的理解。本节将一般的矩阵称为全矩阵(Full Matrix),以区别于稀疏矩阵。,6.6.1 稀疏矩阵与全矩阵,稀疏矩阵是这样一类矩阵,其元素仅有少数不为0,而大量的元素为0。稀疏矩阵的这种性质使得MATLAB可以对其采用不同于全矩阵的存储方式和执行算法以提高效率。MATLAB利用二维数组存储全矩阵,对零元、非零元不作区分,统一采用浮点数;但在存储稀疏矩阵时只存储非零元及其对应的索引值(整型)。显然,这种存储方式能够大大提高稀疏矩阵的存储效率。,应用举例:,例:利用函数sprand创建1000 x 1000稀疏矩阵。在Matlab命令窗口中输入如下代码:A=sprand(1000,1000,0.1);%sprand创建稀疏矩阵,前两个参数分别为稀疏矩阵的行数和列数,最后一个参数为非0元所占比例。full_A=full(A);%full函数将稀疏矩阵转化为全矩阵 whos Name Size Bytes Class A 1000 x1000 1144964 double array(sparse)full_A 1000 x1000 8000000 double array可以看出稀疏矩阵所需存储空间仅是1144964个字节,是对应全矩阵的1144964/8000000=0.1431倍,由此看出稀疏矩阵可以提高效率。,稀疏矩阵的执行效率。对上例中的两个矩阵,A和full_(A)分别执行乘数运算。tic;2*A;tocElapsed time is 0.016000 seconds.tic;2*full_A;tocElapsed time is 0.047000 seconds.说明稀疏矩阵提高了运行效率。%tic表示计时开始,toc表示计时结束,时间差即为中间代码执行时间。,应用举例:,6.6.2 创建稀疏矩阵,除了通过将全矩阵转换为稀疏矩阵外,MATLAB还提供了一系列函数用于创建稀疏矩阵,如表所示。,稀疏矩阵创建函数,具体的:函数A=sparse(S)将矩阵S转化为稀疏存储方式的矩阵A。sparse(m,n):生成一个mn的所有元素都是0的稀疏矩阵。函数speye(m,n)生成一个mn的稀疏存储单位矩阵函数Aspdiags(B,d,m,n)创建mn的稀疏矩阵,A的第d个对角线为B的列。,6.6.2 创建稀疏矩阵,此外,还有一些和稀疏矩阵操作有关的函数。例如u,v,S=find(A):返回矩阵A中非0元素的下标和元素。full(A):返回和稀疏存储矩阵A对应的完全存储方式矩阵。,6.6.2 创建稀疏矩阵,应用举例:,例:创建全矩阵A,并将A转化为稀疏矩阵。,在Matlab命令窗口中输入如下代码:A=eye(4);A(1,3)=2A=1 0 2 0 0 1 0 0 0 0 1 0 0 0 0 1 S=sparse(A)S=(1,1)1(2,2)1(1,3)2(3,3)1(4,4)1,6.6.3 稀疏矩阵操作,一般地,能用于全矩阵的操作函数对稀疏矩阵同样有效,并且具有相似的操作规则,现总结如下:用于矩阵拼接的函数,如cat,horzcat、vertcat、repmat,若输入参数中有一个为稀疏矩阵,则返回结果为稀疏矩阵;矩阵变形函数,如ctranspose、flipdim、fliplr、flipud、reshape、rot90、transpose,这些函数都是单输入函数,若输入为稀疏矩阵,则返回结果也为稀疏矩阵;,矩阵结构信息函数,如isempty、isscalar、isvector、length、ndims、numel、size;矩阵数据类型信息函数,如ischar、isfloat、isinteger、islogical、isnumber、isreal,这些函数对稀疏矩阵输入返回稀疏矩阵。,6.6.3 稀疏矩阵操作,应用举例*:,例:1)创建一个单位稀疏矩阵,2)并访问以下下标A(1,1),A(1,3),3)将矩阵A旋转90度。,应用举例:,例:1)创建一个单位稀疏矩阵,2)并访问以下下标A(1,1),A(1,3),3)将矩阵A旋转90度。,在Matlab命令窗口中输入代码:A=speye(3)结果显示为:A=(1,1)1(2,2)1(3,3)1 A(1,1)ans=1 A(1,3)ans=0,rot90(A)ans=(3,1)1(2,2)1(1,3)1,应用举例:,例:创建100*100正态分布随机稀疏矩阵A,求其非零元、非零元个数、并将其非零元替换为1。A=sprandn(100,100,0.2);whos Name Size Bytes Class A 100 x100 21932 double array(sparse)Grand total is 1794 elements using 21932 bytes Vnz=nonzeros(A);%返回稀疏矩阵A的非零元组成的列向量 whos Name Size Bytes Class A 100 x100 21932 double array(sparse)Vnz 1794x1 14352 double array,应用举例:,nz=nnz(A)%求稀疏矩阵非零元个数nz=1794 B=spones(A);%返回与A具有相同稀疏结构的稀疏矩阵,但是非零元均为1。Vnz=nonzeros(B);%返回稀疏矩阵B的非零元组成的列向量 all(Vnz=1)%检查替换结果ans=1,6.6.4 稀疏矩阵的运算,全矩阵的四则运算对稀疏矩阵都是有效的,但是返回结果有可能是稀疏矩阵或者是全矩阵,这要视具体情况而定,现总结如下:对于单个稀疏矩阵的输入,大部分函数都返回稀疏矩阵,但也有一部分函数返回全矩阵;对于多个矩阵输入,若其中有一个及一个以上的全矩阵,则大部分的函数都将返回全矩阵;对于二元运算,如矩阵的加减、乘、除,只要其中有一个为全矩阵,则结果返回全矩阵;稀疏矩阵与标量的加减运算返回全矩阵;,稀疏矩阵的数乘为稀疏矩阵;稀疏矩阵的幂仍然是稀疏矩阵。,6.6.4 稀疏矩阵的运算,应用举例:,例:创建4阶对角稀疏矩阵A,并求其行列式,逆和秩。,d=2,4,3,8;A=spdiags(d,0,4,4)A=(1,1)2(2,2)4(3,3)3(4,4)8 det(A)ans=192 inv(A)ans=(1,1)0.5000(2,2)0.2500(3,3)0.3333(4,4)0.1250 sprank(A)ans=4,全矩阵求秩rank,应用举例:,B=magic(4);A+B A-B 3*A A/4 A2,稀疏矩阵的数乘为稀疏矩阵;稀疏矩阵的幂仍然是稀疏矩阵。,对于二元运算,如矩阵的加减、乘、除,只要其中有一个为全矩阵,则结果返回全矩阵,习题:,1、求5阶范德蒙矩阵A的行列式。A=1 1 1 1 1 16 8 4 2 1 81 27 9 3 1 256 64 16 4 1 625 125 25 5 1,习题:,2、已知A为3阶Hilbert矩阵,B1;2;3,C1,2,3,分别求线形方程组AXB和XAC的解3、求解线形方程组:4、使用spdiags(B,d,m,n)命令创建4阶稀疏矩阵A,其中矩阵B1;2;3;4,d=1,并将A转换为全矩阵C。,1)V=(1:5);A=vander(V)A=1 1 1 1 1 16 8 4 2 1 81 27 9 3 1 256 64 16 4 1 625 125 25 5 1 det(A)ans=288,范得蒙(Vandermonde)矩阵最后一列全为1,倒数第二列为一个指定的向量,其他各列是其后列与倒数第二列的点乘积。,2)A=hilb(3)A=1.0000 0.5000 0.3333 0.5000 0.3333 0.2500 0.3333 0.2500 0.2000 B=1;2;3;C=1,2,3C=1 2 3 X=ABX=27.0000-192.0000 210.0000 X=C/AX=27.0000-192.0000 210.0000,3)建立系数矩阵和常数矩阵 A=2 1-5 1;1-3 0-6;0 2-1 2;1 4-7 6 B=8 9-5 0 X=AB,B=1;2;3;4;A=spdiags(B,1,4,4)A=(1,2)2(2,3)3(3,4)4 C=full(A)C=0 2 0 0 0 0 3 0 0 0 0 4 0 0 0 0,6.7 小结,矩阵是MATLAB数值计算的基本单元,矩阵分析是工程应用的重要工具,通过本章的学习,应该熟练掌握以下内容。矩阵基本运算矩阵特征量矩阵分解矩阵函数稀疏矩阵,