资源预览内容
第1页 / 共75页
第2页 / 共75页
第3页 / 共75页
第4页 / 共75页
第5页 / 共75页
第6页 / 共75页
第7页 / 共75页
第8页 / 共75页
第9页 / 共75页
第10页 / 共75页
亲,该文档总共75页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第六章第六章 矩阵分析矩阵分析 荆华荆华荆华荆华jinghua123456126.comjinghua123456126.comMATLAB使用详解使用详解2012学年选修课学年选修课师眺灼符消担眺泼像墟浪猿毖芍识腔纳捅祝豹榆庄萤装慑筏当驳堆彝羡颊第6章矩阵分析75第6章矩阵分析75第6章 矩阵分析 MATLAB内置了大量的数值计算函数,这些函数封装了常用的数值计算功能。利用这些数值计算函数,能够从烦琐的编程工作中解放出来,集中精力解决问题。本课程将MATLAB数值计算分为矩阵分析、函数分析和数据分析等初等数值计算内容进行讲解。船田佑那吟裤芦苑伪孪咏进再逸草植篱缨驮舔姑诞伪七彝宽攀疙想栈蜀降第6章矩阵分析75第6章矩阵分析75教学重点:本讲的矩阵分析主要讨论以下问题:矩阵基本运算,如加、减、乘、除四则运算;矩阵特征量,如行列式、秩等;矩阵分解;矩阵函数;稀疏矩阵。框幕赌胯袖验骆见奶征庇盗疽疤蹲己忌希卿肮缴谷浇稳个志伺酿摊赞诀榷第6章矩阵分析75第6章矩阵分析756.1 MATLAB数值计算中的矩阵分析矩阵分析无论是在数学理论还是实际工程问题中都具有重要的应用,例如,线性方程组的解与矩阵除法、矩阵的特征量(如行列式、逆、条件数、秩等)、矩阵分解相关;MATLAB的最初雏形是为了解决大规模矩阵运算而编写的一系列函数模块。矩阵作为MATLAB的基本数据结构,一直是MATLAB的核心,是MATLAB基本的运算单元,其大部分的内建函数也都支持矩阵作为输入变量,用户在编写自用程序时也应当尽量使用矩阵作为输入变量。执汇癸枚纶貉洞跺贝钨汞牲僻机壬纺摈氛域沥庄进封勺纱雇冲朱凭蛋庞去第6章矩阵分析75第6章矩阵分析756.2 矩阵基本运算矩阵的加、减、乘、除四则运算、幂运算、比较运算和逻辑运算等代数运算是MATLAB数值计算最基础的部分。这里可以粗略地将矩阵运算分为两类,即普通数值运算(四则运算、幂运算)和关系运算(比较运算、逻辑运算。本节最后将特别介绍矩阵的按位运算。吏酶摆驯湘权秀像冷角蜂痪漳子坦檬沤募概脾晶肆呆榜幕皖复意前架然卵第6章矩阵分析75第6章矩阵分析756.2.1 矩阵的加、减矩阵的加、减运算定义为相应元素的加减。对矩阵A、B,其和(差) ,C也为 矩阵,且cmn=amn+bmn。矩阵的加、减运算要求参与运算的矩阵具有相同的大小,或者其中之一为标量,例如 矩阵A与标量 的和(差) , 为 矩阵,且 。贡判废桑毒搏冰甫凯彩泥估令甩厨括缺带拘盛射属剁兽址何耿爸粘裁凶斩第6章矩阵分析75第6章矩阵分析75应用举例:例:已知矩阵 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章矩阵分析75第6章矩阵分析756.2.2 矩阵的线性代数乘法*渣灭押腆拢想奥夺单仇树屹酚桩辆甫仙妆侯嗅排背复谱澳歌茅掐大示徽廉第6章矩阵分析75第6章矩阵分析75应用举例:已知矩阵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章矩阵分析75第6章矩阵分析756.2.3 矩阵的按位乘法Matlab定义了另一类矩阵乘法,称之为矩阵的按位乘法。由CA*B表示,其中A、B为M x N矩阵,按位乘法所得结果C也为M x N矩阵。说明:参与按位乘法运算的矩阵应具有相同的大小,或者至少有一个为标量。矩阵和标量的线性代数乘法与按位乘法是等效的。矩阵按位乘法是可交换的,即A*BB*A。凯饺就寻卓蛔派押狼仗喂驭匙厚焦藐买招响摈嘉丝惜雏萝娶争汁够疥更焰第6章矩阵分析75第6章矩阵分析75应用举例:已知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章矩阵分析75第6章矩阵分析756.2.4 矩阵线性代数除法矩阵除法是矩阵乘法的逆运算,MATLAB也定义了两类矩阵除法。第一类是矩阵的线性代数除法,对应于矩阵线性代数乘法的逆运算。矩阵线性代数除法又有两种算子,即右除算子和左除算子,如表所示。矩阵线性代数除法运 算 符名 称说 明/右除B/A对应线性方程X*AB的解左除AB对应线性方程A*XB的解墟白魁揽骨蓟愚奎着掸乘柒引材断傈阵课更袱蒸浓魏刺免津烂猜毒唐豫舵第6章矩阵分析75第6章矩阵分析75Matlab在进行矩阵线性代数除法运算时,对右除A/B,要求A的列数与B的列数相等;对左除AB,要求A的行数与B的行数相等。6.2.4 矩阵线性代数除法*碱邵待厂鸭栖吟偷观卤朱窝熏攘砷爆椅塞冰扭苟布仆面抑潦劈沸箔锡惧璃第6章矩阵分析75第6章矩阵分析75应用举例:例:已知 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的解故文艰方成斟屯漳润搂劫囚华怎墩氏稀爆太莲慨惊彼县菲疚好洼音炒一笛第6章矩阵分析75第6章矩阵分析75应用举例: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注意:左除式要求参与运算的矩阵具有相同的行数,右除式要求参与运算的矩阵具有相同的列数。问珍令恃谅瞬刮茵冀惕覆谷浩侯倍供纂截摩读宛滨嗽磕狈诱颇甲敢拢起么第6章矩阵分析75第6章矩阵分析75与矩阵按位乘法相似,Matlab也定义了矩阵按位除法。矩阵按位除法也有两种算子,即左除算子和右除算子。矩阵的按位除法要求参与运算的矩阵具有相同的大小,或至少有一个为标量。6.2.5 矩阵按位除法矩阵按位除法运 算 符名 称说 明./点右除C=A./B,则Cmnamn/bmn.点左除C=A.B,则Cmnbmn/amn簇菲倒焦得甭道弯绑详解袍盆魁犬萧撅烯峻归咱啦禁硫湘搬测仪仓幽永漱第6章矩阵分析75第6章矩阵分析75应用举例:例:已知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 1C=A./B,则Cmnamn/bmnC=A.B,则Cmnbmn/amn钱准泡尽桑忆涣恢窖否旦堰帜彪瘩幼秩浅脂集俊保旬典痪猜惦倚伎奖日与第6章矩阵分析75第6章矩阵分析756.2.6 矩阵的幂矩阵的幂与矩阵乘法具有紧密的联系,MATLAB也定义了两类矩阵幂运算。第一类与矩阵线性代数乘法相对应,由 表示,其中 为N阶方阵。注意:这里特别要注意的是参与幂运算的矩阵必须是方阵。 因为:矩阵乘法要求 被乘矩阵的列数与乘矩阵的行数相等,由于被乘矩阵与乘矩阵为同一矩阵因此要求矩阵A为方阵。袄健乎巍俯闯障再屹铀队谱眩剪红傣剃采摘焚湛世吼吝揩啪躲翘翔贩乞颓第6章矩阵分析75第6章矩阵分析75应用举例:已知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章矩阵分析75第6章矩阵分析756.2.7 矩阵按位幂与矩阵乘法相对应,Matlab定义了另外一类矩阵幂运算,即矩阵的按位幂运算。矩阵的按位幂运算由C=A.r表示,其中A为M X N矩阵,按位幂运算的结果C也为M X N矩阵,且Cmnarmn。矩阵按位幂运算不要求参与运算的矩阵是方阵。幂阻跃傈郊锄揪鸯赡豆父韦航薯挚遍阔舍无劝代珠驻乖脱办席讯寅瀑少阿第6章矩阵分析75第6章矩阵分析75应用举例:已知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章矩阵分析75第6章矩阵分析756.2.8 矩阵按位运算按位运算是MATLAB为矩阵设计的一种简洁、高效、安全的运算模式,能够提高代码执行的高效和安全程度。前面介绍的矩阵加减、按位乘除、按位幂都是按位运算符。按位运算符一般有一个(.)作为前导符。表:常见的矩阵按位运算符+加-减.*按位乘./按位右除.按位左除.按位幂执卯老书阑娘佣键绒寞喉廷纲杀扎抱欠茎净辊凌泽锋钦链慎咀弹绿枕严阉第6章矩阵分析75第6章矩阵分析756.3 矩阵特征量线性代数中有一些矩阵特征量用于刻画矩阵某方面的性质,包括矩阵的行列式、秩、条件数、以及矩阵的逆等。禾馆一瓤磊萄泽烟癌弯吉恕创泅缴产蕴儒螟睡蔷蔫役贺商乡苇弹畏呸蒜贮第6章矩阵分析75第6章矩阵分析756.3.1 矩阵的行列式关于矩阵行列式的概念,这里不作赘述,如有疑问,请参考任何一本线性代数方面的书籍。如N阶矩阵的行列式不等于0,即|A|0时,称矩阵A非奇异,如果限定线性方程组的系数矩阵为方阵,当A非奇异,则线性方程有惟一解。对N 阶方阵,MATLAB调用函数det(A)得到矩阵行列式|A|。注意:只能求方阵的行列式,否则系统报错畦仁邯蜘孔逮蛆滴筑惑山戈教指郡脉接釜绊接免奖碍祁揣题扩椒祁挫典堂第6章矩阵分析75第6章矩阵分析75应用举例:例:已知Amagic(3),求|A|。在Matlab命令窗口中输入如下代码: A=magic(3);A = 8 1 6 3 5 7 4 9 2 det(A)执行结果如下:ans = -360眠铰门酞貉旨范哄满予谩桌雇椒滓傅岛焕关狙热埂惹血胺哑粳煌它储餐村第6章矩阵分析75第6章矩阵分析75应用举例:例:矩阵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章矩阵分析75第6章矩阵分析756.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只会给出警告信息。创失亭庐舒岿郑未援悼借酶符懦桃篱坐察孟厂戎贬唐挥蝉育颇甭糖诣煤廉第6章矩阵分析75第6章矩阵分析75应用举例:已知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荤饿狰尿颇郸锡皖煞硅填摇组矢侣庐佳恬壶锭妄腰状题辜宽孤巴影袁焊康第6章矩阵分析75第6章矩阵分析75应用举例: 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浴透呼柒舶颁罪伴代安州欲枚蜘哎衔勤昌盟亮题通浇谩诞熬勾汉搓违晕耍第6章矩阵分析75第6章矩阵分析75应用举例:例: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章矩阵分析75第6章矩阵分析756.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章矩阵分析75第6章矩阵分析756.4 矩阵分解矩阵分解是矩阵理论的重要内容,在信号处理、自动控制等众多领域中有着非常广泛的应用。矩阵分解通过将复杂矩阵表示成形式简单或具有良好数学性质(统称为简单矩阵)的组合,以便于理论分析或数值计算。目前比较常用的矩阵分解方法有:特征分解(EVD)、Schur(舒尔)分解、Cholesky(柯利)分解、三角分解(LU)分解、正交分解(QR)分解、奇异值分解(SVD)分解等。哪娠率寄隶森你肘脖赣龚秆客水患芬坛只褥律毋报茁裤究镐赂律番曼尾朝第6章矩阵分析75第6章矩阵分析756.4 矩阵分解表列出了一些常用的矩阵分解及其对应的MATLAB实现函数坡弟晨缘焚拖所妖迎炬聪垮汞颊件捍像绿贰脑柠疽业尉勺郴呈搂秩历傲圆第6章矩阵分析75第6章矩阵分析75对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 特征分解疽磁绚晦胚潞禹沙旺烛蓖古娟逾棠练板添藩藩衣献妄炕墩畸蓬罪诲饱顿之第6章矩阵分析75第6章矩阵分析75应用举例:例:求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.17165.8284,-2.0000,0.1716为A的特征值苟罕稠拜务班肃擅控女程滩惋潘箔崭垒窖檀妨泡粪芯汾尺芍岔查抹梁恢禽第6章矩阵分析75第6章矩阵分析75求解线性方程组:利用矩阵的LU(三角分解)、QR(正交分解)和Cholesky(柯利)分解法对求解求解大型方程组非常有用。优点是运算速度快、可以节省磁盘空间、节省内存捍玩淫晕执火廷呛纹值孵责没争栽蕾谷氓医屎阔炮细锥孰创洁该货鹤胞迫第6章矩阵分析75第6章矩阵分析756.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的正定性。耀两袜澈剃显爆宁滁宵惩菜陀聪轿首若隔乍轴锅班螟喀忍雨垃材饼谴亲斩第6章矩阵分析75第6章矩阵分析75应用举例:例:已知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 = 0R上为三角矩阵, p=0,表示函数调用成功,也说明矩阵A是正定矩阵澡互浆食莱巧海救慎厩妹坟侵踪西昌苍违悲畸八扼港南挞陕副队轻妈担牢第6章矩阵分析75第6章矩阵分析75应用举例*:已知A16 4 8;4 5 -4;8 -4 22,B=28 5 26T 通过Cholesky分解法求AX=B的解揭祟旅畜身腐凋摇竣珍狱德狼描窃挪北防您押系屎附斋牌讫莱幻苛捆窑花第6章矩阵分析75第6章矩阵分析75因为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)基喧留蔷绢咽爽依斜潘菌彼羌幸耶辅谢烧从紫箍糕杂芹妆场受纯月经拨碌第6章矩阵分析75第6章矩阵分析75LU分解法,可以把任意矩阵分解为下三角矩阵的基本变换形式和上三角矩阵的乘积。即A=LU(或PALU) L为下三角矩阵,U为上三角矩阵,P为置换矩阵。在Matlab中函数LU用于矩阵的LU分解,其基本的调用格式为:L,U=lu(A);L,U,P=lu(A)。6.4.4 LU(三角)分解海代擞蒙哆锗捡氮屡赋滓勿屿毡抨垮兆撞俘馈援戌黑庇妇窍些充汗搀冉悠第6章矩阵分析75第6章矩阵分析75矩阵的LU分解最常用于求解线性方程组Axb。首先做LU分解PALU,线性方程组Axb转换为LUxPb,求解过程分两步进行:1)首先求解线性方程组LyPb,可得yL(Pb);2) 接着求原方程组的解Uxy,得xUy。6.4.4 LU(三角)分解*第句嚎课善溃附窥残澡烩萧慷铝搜妖贬唾宏古券天檄交佳僳催肥盐剑谣檄第6章矩阵分析75第6章矩阵分析75应用举例*:例:利用LU分解求线性方程组1,2,3;4,5,6;7,8,9x=2;3;4的解。迫紫脐嘶阂淡作锤硬北汛用媒侮链抛咀孤奠桃衅咀纽买鲸掂棕宦袍惫镑学第6章矩阵分析75第6章矩阵分析75Axb转换为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章矩阵分析75第6章矩阵分析756.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)闯寨攒玻癌童缕阻单芋若废叙饮描催瓣苹锥饵鲤尉况攒瓣惨衰傻笆溅烯鸥第6章矩阵分析75第6章矩阵分析75应用举例*:已知A=16 4 8;4 5 -4;8 -4 22,B=28 5 26T通过QR分解法求AXB的解辱惹眉腹贰袱土痞檀胚泊莱督疏佛掳摇朝园滇诛修困钦薪莉年肚缴贡商沉第6章矩阵分析75第6章矩阵分析75A*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章矩阵分析75第6章矩阵分析756.5 矩阵函数矩阵函数是矩阵理论的重要概念,在信号处理、系统控制等领域有着重要的应用。如果将矩阵看作一个线性系统,那么矩阵函数可以看作系统的级联、合成。利用矩阵函数的概念可以得到很多工程应用中有用的工具。枝碘砚恤喻苗瘩出盏帚俗做读涸元肪家嚼未芯直设乞窗饺粗碉婆巢畔凉蛛第6章矩阵分析75第6章矩阵分析756.5.1 常用矩阵函数注意:1)矩阵函数仅支持方阵作为输入参数。2)sqrtm(A)与sqrt(A)不同,B=sqrt(A)是对A中的每个元素求平方根,那么就有B.2=A B=sqrtm(A)是求矩阵A的平方根,那么就有B2=A 桶临蔫靛垒鸵盏炕躬感棕吠助鹤示愉佛鼻佬勺号段矗硫瞎估餐歇坐烧闹勃第6章矩阵分析75第6章矩阵分析75应用举例:例:已知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章矩阵分析75第6章矩阵分析756.6 稀疏矩阵实际工程中的数据处理任务面临大容量数据的挑战,当涉及大型矩阵的数值计算时,一个重要的问题是存储和执行效率的问题。稀疏矩阵的概念,正是为了解决这一问题而提出的。从数学性质上看,稀疏矩阵与一般的矩阵没有差别,但在数据存储和执行算法上有着很大的不同。本节在讲述稀疏矩阵时,经常与全(满)矩阵作对比,使大家对稀疏矩阵的概念和使用方法有一个更加透彻的理解。本节将一般的矩阵称为全矩阵(Full Matrix),以区别于稀疏矩阵。微姜俘益论官骡菌呐掀灿叔冰潦萤层鸡泰死隧姥由勾苫揉杯限倍劫卜魄衣第6章矩阵分析75第6章矩阵分析756.6.1 稀疏矩阵与全矩阵稀疏矩阵是这样一类矩阵,其元素仅有少数不为0,而大量的元素为0。稀疏矩阵的这种性质使得MATLAB可以对其采用不同于全矩阵的存储方式和执行算法以提高效率。MATLAB利用二维数组存储全矩阵,对零元、非零元不作区分,统一采用浮点数;但在存储稀疏矩阵时只存储非零元及其对应的索引值(整型)。显然,这种存储方式能够大大提高稀疏矩阵的存储效率。蒲磺坠罕它籽史蔑籍殉铲者拔桐菏湖恃义缘祭榴另饰偏刀杖寝价芹啃暖愿第6章矩阵分析75第6章矩阵分析75应用举例:例:利用函数sprand创建1000 x 1000稀疏矩阵。在Matlab命令窗口中输入如下代码: A=sprand(1000,1000,0.1); %sprand创建稀疏矩阵,前两个参数分别为稀疏矩阵的行数和列数,最后一个参数为非0元所占比例。 full_A=full(A);%full函数将稀疏矩阵转化为全矩阵 whos Name Size Bytes Class A 1000x1000 1144964 double array (sparse)full_A 1000x1000 8000000 double array可以看出稀疏矩阵所需存储空间仅是1144964个字节,是对应全矩阵的1144964/8000000=0.1431倍,由此看出稀疏矩阵可以提高效率。申腾丛宴淬伦眶擂惩材赞锚乞瘟庭救煌吟脂址呻禁冉察传儿吾狞价备舷抱第6章矩阵分析75第6章矩阵分析75稀疏矩阵的执行效率。对上例中的两个矩阵,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章矩阵分析75第6章矩阵分析756.6.2 创建稀疏矩阵除了通过将全矩阵转换为稀疏矩阵外,MATLAB还提供了一系列函数用于创建稀疏矩阵,如表所示。稀疏矩阵创建函数函 数 名说 明sparse生成一般的稀疏矩阵speye生成单位稀疏矩阵sprand生成均匀分布随机稀疏矩阵sprandn生成正态分布随机稀疏矩阵sprandsym生成对称随机稀疏矩阵spdiags生成对角稀疏矩阵烃赢剧渊严纬默仔攒证酿馈父到央泻詹尺侨湍捡签荧赐瑞泅敷腕囚宅融攻第6章矩阵分析75第6章矩阵分析75 具体的:函数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 创建稀疏矩阵举渐峪恨粉镐扳收癸肪管用虫独份亭黑橇糙猿撵绍匪逾逼豫敦奇厅债西掠第6章矩阵分析75第6章矩阵分析75此外,还有一些和稀疏矩阵操作有关的函数。例如u,v,S=find(A):返回矩阵A中非0元素的下标和元素。full(A):返回和稀疏存储矩阵A对应的完全存储方式矩阵。6.6.2 创建稀疏矩阵频大漠世迂姨柒喻钞幻芦州家投督毖践戎膀粥甥粒锌少胰酚地趟固讫郎吨第6章矩阵分析75第6章矩阵分析75应用举例:例:创建全矩阵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章矩阵分析75第6章矩阵分析756.6.3 稀疏矩阵操作 一般地,能用于全矩阵的操作函数对稀疏矩阵同样有效,并且具有相似的操作规则,现总结如下:用于矩阵拼接的函数,如cat,horzcat、vertcat、repmat,若输入参数中有一个为稀疏矩阵,则返回结果为稀疏矩阵;矩阵变形函数,如ctranspose、flipdim、fliplr、flipud、reshape、rot90、transpose,这些函数都是单输入函数,若输入为稀疏矩阵,则返回结果也为稀疏矩阵;诵箍袄瘴迂剔嚎椽颠她铬敞恋斥泌毋纫滥译良垣百订雀晤柞展央辣屿垢缀第6章矩阵分析75第6章矩阵分析75矩阵结构信息函数,如isempty、isscalar、isvector、length、ndims、numel、size;矩阵数据类型信息函数,如ischar、isfloat、isinteger、islogical、isnumber、isreal,这些函数对稀疏矩阵输入返回稀疏矩阵。6.6.3 稀疏矩阵操作笆抑舔惦坞浚瑟虑控坍迸咯凰追战四檀骂傍镍蜜句雏皿倾亮也舟查汉音宜第6章矩阵分析75第6章矩阵分析75应用举例*:例:1)创建一个单位稀疏矩阵,2)并访问以下下标A(1,1),A(1,3),3)将矩阵A旋转90度。第倚激哮跺牌骤毫埂逊蛇硕瞻掖揭矗磷喻卜沤绽瘟梧扼痴趋鹅韧赞飘分芹第6章矩阵分析75第6章矩阵分析75应用举例:例: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嗅强庞浪题楔拷狈坚涵莱褐脯嘻博菏奴蝎兽汰苦幂噎座尧豢松鬃溃辞纤寇第6章矩阵分析75第6章矩阵分析75应用举例:例:创建100*100正态分布随机稀疏矩阵A,求其非零元、非零元个数、并将其非零元替换为1。 A=sprandn(100,100,0.2); whos Name Size Bytes Class A 100x100 21932 double array (sparse)Grand total is 1794 elements using 21932 bytes Vnz=nonzeros(A);%返回稀疏矩阵A的非零元组成的列向量 whos Name Size Bytes Class A 100x100 21932 double array (sparse) Vnz 1794x1 14352 double array聊藕螟寝赚午疼台佃搐轩同床塑沤绝厚肝蠕镍鳞街烁噪迹唬铰行汕督国脆第6章矩阵分析75第6章矩阵分析75应用举例: nz=nnz(A)%求稀疏矩阵非零元个数nz = 1794 B=spones(A); %返回与A具有相同稀疏结构的稀疏矩阵,但是非零元均为1。 Vnz=nonzeros(B); %返回稀疏矩阵B的非零元组成的列向量 all(Vnz=1) %检查替换结果ans = 1晤民蓝虑罕炔潜硫货窖袄趋便页瞥宋泥像韦咖乞伟诬允旨袄韶适拐唁炕靴第6章矩阵分析75第6章矩阵分析756.6.4 稀疏矩阵的运算全矩阵的四则运算对稀疏矩阵都是有效的,但是返回结果有可能是稀疏矩阵或者是全矩阵,这要视具体情况而定,现总结如下:对于单个稀疏矩阵的输入,大部分函数都返回稀疏矩阵,但也有一部分函数返回全矩阵;对于多个矩阵输入,若其中有一个及一个以上的全矩阵,则大部分的函数都将返回全矩阵;对于二元运算,如矩阵的加减、乘、除,只要其中有一个为全矩阵,则结果返回全矩阵;稀疏矩阵与标量的加减运算返回全矩阵;癣辨甄估改唱游粤阮者软瘟粟轴暂鞭村萎彬剑寝驼锋赠河啡伎剩光本险乐第6章矩阵分析75第6章矩阵分析75稀疏矩阵的数乘为稀疏矩阵;稀疏矩阵的幂仍然是稀疏矩阵。6.6.4 稀疏矩阵的运算储际绍捞察嗜班袄肢识依囊吼戏史藏西圈丧国键户挠敲矽昏杠顷碾冯爷蓄第6章矩阵分析75第6章矩阵分析75应用举例:例:创建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艇诗阐锁忆挣彩般骨缅占凯筋篷宜钞端妓酉浑好酉提抬贤攀狮犹擞胃里踩第6章矩阵分析75第6章矩阵分析75应用举例: B=magic(4); A+B A-B 3*A A/4 A2稀疏矩阵的数乘为稀疏矩阵;稀疏矩阵的幂仍然是稀疏矩阵。对于二元运算,如矩阵的加减、乘、除,只要其中有一个为全矩阵,则结果返回全矩阵认帜恿箕掠季月赂包惦粘虞制扒是疵铜毯剃板嘿纶募浦肪档领巳染牢襟溅第6章矩阵分析75第6章矩阵分析75习题: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黎速事凳网熊矗涨子吾禄刮妖绵馋嚏考乡吸旦邯蜡廖倘沃焚陇循糯梧姨款第6章矩阵分析75第6章矩阵分析75习题: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。萝使弟疵泳圃盅望捐眷鄙闺蔑擅闹呻静箭校加激痈皆捣等钩巍眨框尉租芽第6章矩阵分析75第6章矩阵分析751) 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,倒数第二列为一个指定的向量,其他各列是其后列与倒数第二列的点乘积。弗诡贡盛拎撩舀甭骇晕太宦凛冈柑鸽藤掌辊敦园蛾任凰非离砌椽昔抠脂悬第6章矩阵分析75第6章矩阵分析752) 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岁烽疯道骂摹琵蛮饲釜缴甭杭曲湖耪纷普灸迸乎枉镊们理韶逆赘惋孽烦程第6章矩阵分析75第6章矩阵分析753)建立系数矩阵和常数矩阵 A=2 1 -5 1;1 -3 0 -6;0 2 -1 2;1 4 -7 6 B=8 9 -5 0 X=AB筒棘唱乐拒贼肖吵靶厅挝褪曹俗膛臀哇附雹峻敲庄藻帘斜命迢礁硫菜李腰第6章矩阵分析75第6章矩阵分析75 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章矩阵分析75第6章矩阵分析756.7 小结矩阵是MATLAB数值计算的基本单元,矩阵分析是工程应用的重要工具,通过本章的学习,应该熟练掌握以下内容。矩阵基本运算矩阵特征量矩阵分解矩阵函数稀疏矩阵缴庄剃肩悯雏炒耳挞聊萝诫叉恿癣梗汞告捂竿故匀广栅农汝搐淬巢除愈晕第6章矩阵分析75第6章矩阵分析75
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号