《线性代数中的数值计算.ppt》由会员分享,可在线阅读,更多相关《线性代数中的数值计算.ppt(46页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第4章章线性代数中的数值计算线性代数中的数值计算 黑龙江大学黑龙江大学电子工程学院电子工程学院【本章学习目标】【本章学习目标】n掌握生成特殊矩阵的方法。掌握生成特殊矩阵的方法。n掌握矩阵分析的方法。掌握矩阵分析的方法。n掌握求解线性方程组的各种方法。掌握求解线性方程组的各种方法。n了解矩阵的稀疏存储方式。了解矩阵的稀疏存储方式。目录目录n4.1特殊矩阵的生成特殊矩阵的生成n4.2矩阵分析矩阵分析n4.3线性方程组求解线性方程组求解n4.4矩矩阵阵分分解解n4.5超越函数运算超越函数运算n4.6稀疏矩阵的处理稀疏矩阵的处理4.1 特殊矩阵的生成特殊矩阵的生成n4.1.1通用的特殊矩阵通用的特殊
2、矩阵qzeros函数:产生全函数:产生全0矩阵,即零矩阵。矩阵,即零矩阵。qones函数:产生全函数:产生全1矩阵,即幺矩阵。矩阵,即幺矩阵。qeye函函数数:产产生生单单位位矩矩阵阵,即即对对角角线线上上的的元元素素为为1、其其余余元元素素为为0的的矩阵。矩阵。qrand函数:产生函数:产生01均匀分布的随机矩阵。均匀分布的随机矩阵。qrandn函数:产生均值为函数:产生均值为0、方差为、方差为1的标准正态分布随机矩阵。的标准正态分布随机矩阵。n这这几几个个函函数数的的调调用用格格式式相相似似,如如果果这这个个函函数数的的参参数数只只是是一一个个,那那么么MATLAB将将会会创创建建一一个个
3、方方阵阵,行行数数和和列列数数均均为为这这个个参参数数;如如果果这这个个函函数数的的参参数数有有两两个个,那那么么第第一一个个参参数数代代表表行行数数,第第二二个个参参数数代代表表列列数数。下面以产生零矩阵的下面以产生零矩阵的zeros函数为例进行说明。函数为例进行说明。qzeros函数的调用格式如下。函数的调用格式如下。nzeros(m):产生:产生mm零矩阵。零矩阵。nzeros(m,n):产生:产生mn零矩阵。当零矩阵。当m=n时,等同于时,等同于zeros(m)。nzeros(size(A):产生与矩阵:产生与矩阵A同样大小的零矩阵。同样大小的零矩阵。n【例例4.1】分分别别建建立立3
4、3、32和和与与矩矩阵阵A同同样样大大小小的的零矩阵。零矩阵。q(1)建立一个)建立一个33的零矩阵。的零矩阵。nzeros(3)nans=n000n000n000q(2)建立一个)建立一个32的零矩阵。的零矩阵。nzeros(3,2)q(3)设设A为为23矩矩阵阵,则则可可以以用用zeros(size(A)建建立立一一个个与与矩矩阵阵A同样大小的零矩阵。同样大小的零矩阵。nA=123;456;%产生一个产生一个23阶矩阵阶矩阵Anzeros(size(A)%产生一个与矩阵产生一个与矩阵A同样大小的零矩阵同样大小的零矩阵n【例【例4.2】建立随机矩阵:】建立随机矩阵:q(1)在区间)在区间10
5、,30内均匀分布的内均匀分布的4阶随机矩阵。阶随机矩阵。q(2)均值为)均值为0.6、方差为、方差为0.1的的4阶正态分布随机矩阵。阶正态分布随机矩阵。n产产生生(0,1)区区间间均均匀匀分分布布随随机机矩矩阵阵使使用用rand函函数数,假假设设得得到到了了一一组组满满足足(0,1)区区间间均均匀匀分分布布的的随随机机数数xi,则则若若想想得得到到在在任任意意a,b区区间间上上均均匀匀分分布布的的随随机机数数,只只需需用用yi=a+(ba)xi计计算算即可。即可。n产产生生均均值值为为0、方方差差为为1的的标标准准正正态态分分布布随随机机矩矩阵阵使使用用randn函函数数,假假设设已已经经得得
6、到到了了一一组组标标准准正正态态分分布布随随机机数数xi,如如果果想想更更一一般般地地得得到到均均值值为为、方方差差为为2的的随随机机数数,可可用用yi=+xi计计算算出出来来。针针对本例,命令如下:对本例,命令如下:qa=10;qb=30;qx=a+(b-a)*rand(4)qy=0.6+sqrt(0.1)*randn(4)n4.1.2面向特定应用的特殊矩阵面向特定应用的特殊矩阵q1魔方矩阵魔方矩阵n魔魔方方矩矩阵阵有有一一个个有有趣趣的的性性质质,其其每每行行、每每列列及及两两条条对对角角线线上上的的元元素素和和都都相相等等。对对于于n阶阶魔魔方方阵阵,其其元元素素由由1,2,3,n2共共
7、n2个个整整数数组组成成。MATLAB提提供供了了求求魔魔方方矩矩阵阵的的函函数数magic(n),其其功功能能是是生生成成一一个个n阶阶魔魔方阵。方阵。q【例例4.3】将将101125等等25个个数数填填入入一一个个5行行5列列的的表表格格中中,使使其其每每行、每列及对角线的和均为行、每列及对角线的和均为565。n一一个个5阶阶魔魔方方矩矩阵阵的的每每行行、每每列列及及对对角角线线的的和和均均为为65,对对其其每每个个元元素素都都加加100后这些和变为后这些和变为565。完成其功能的命令如下:。完成其功能的命令如下:qM=100+magic(5)qM=q117124101108115q123
8、105107114116q104106113120122q110112119121103q111118125102109n2范得蒙矩阵范得蒙矩阵q范范得得蒙蒙(Vandermonde)矩矩阵阵的的最最后后一一列列全全为为1,倒倒数数第第二二列列为为一一个个指指定定的的向向量量,其其他他各各列列是是其其后后列列与与倒倒数数第第二二列列的的点点乘乘积积。可可以以用用一一个个指指定定向向量量生生成成一一个个范范得得蒙蒙矩矩阵阵。在在MATLAB中中,函函数数vander(V)生生成成以以向向量量V为为基基础础向向量量的的范范得得蒙矩阵。蒙矩阵。nA=vander(1:4)nA=n1111n8421n
9、27931n641641n3希尔伯特矩阵希尔伯特矩阵q希希尔尔伯伯特特(Hilbert)矩矩阵阵是是一一种种数数学学变变换换矩矩阵阵,它它的的每每个个元元素素hij=1/(i+j1)。在在MATLAB中中,生生成成希希尔尔伯伯特特矩矩阵阵的的函函数是数是hilb(n)。q专门求希尔伯特矩阵的逆的函数专门求希尔伯特矩阵的逆的函数invhilb(n)nformatrat%以有理形式输出以有理形式输出nH=hilb(4)nH=n11/21/31/4n1/21/31/41/5n1/31/41/51/6n1/41/51/61/7nH=invhilb(4)nformatshort%恢复默认输出格式恢复默认
10、输出格式n4托普利兹矩阵托普利兹矩阵q托托普普利利兹兹(Toeplitz)矩矩阵阵除除第第一一行行第第一一列列外外,其其他他每每个个元元素素都都与与左左上上角角的的元元素素相相同同。生生成成托托普普利利兹兹矩矩阵阵的的函函数数是是toeplitz(x,y),它它生生成成一一个个以以x为为第第一一列列、y为为第第一一行行的的托托普普利利兹兹矩矩阵阵。这这里里x、y均均为为向向量量,两两者者不不必必等等长长。toeplitz(x)用用向向量量x生成一个对称的托普利兹矩阵。生成一个对称的托普利兹矩阵。nT2=toeplitz(1:4)nT2=n1234n2123n3212n4321n5伴随矩阵伴随矩
11、阵q生生成成伴伴随随矩矩阵阵的的函函数数是是compan(p),其其中中p是是一一个个多多项项式式的的系系数数向向量量,高高次次幂幂系系数数排排在在前前,低低次次幂幂排排在在后后。例例如如,为为了了求求多项式的多项式的x37x+6的伴随矩阵,可使用如下命令:的伴随矩阵,可使用如下命令:np=1,0,-7,6;ncompan(p)nans=n07-6n100n010n6帕斯卡矩阵帕斯卡矩阵q我我们们知知道道,二二次次项项(x+y)n展展开开后后的的系系数数随随n的的增增大大组组成成一一个个三三角角形形表表,称称为为杨杨辉辉三三角角形形。由由杨杨辉辉三三角角形形表表组组成成的的矩矩阵阵称称为为帕帕
12、斯斯卡卡(Pascal)矩矩阵阵,它它的的元元素素p1j=1,p i1=1,p ij=p i1,j1+p i1,j(i1,j1)。函数)。函数pascal(n)生成一个生成一个n阶帕斯卡矩阵。阶帕斯卡矩阵。q【例【例4.5】求】求(x+y)4的展开式。的展开式。n在在MATLAB命令窗口,输入命令:命令窗口,输入命令:qpascal(5)qans=q11111q12345q1361015q14102035q15153570n矩矩阵阵次次对对角角线线上上的的元元素素1,4,6,4,1即即为为展展开开式式的的系系数数,即即(x+y)4=x4+4x3y+6x2y2+4xy3+y44.2 矩阵分析矩阵
13、分析n4.2.1矩阵结构变换矩阵结构变换q1对角阵对角阵n只只有有对对角角线线上上有有非非0元元素素的的矩矩阵阵称称为为对对角角矩矩阵阵,对对角角线线上上的的元元素素都都为为1的对角矩阵称为单位矩阵。的对角矩阵称为单位矩阵。q(1)提取矩阵的对角线元素)提取矩阵的对角线元素n设设A为为mn矩矩阵阵,函函数数diag(A)用用于于提提取取矩矩阵阵A主主对对角角线线元元素素,产产生生一一个具有个具有min(m,n)个元素的列向量。例如:个元素的列向量。例如:qA=1,2,3;4,5,6qA=q123q456qD=diag(A)qD=q1q5ndiag(A,k)提提取取第第k条条对对角角线线的的元元
14、素素。主主对对角角线线为为第第0条条对对角角线线;与与主主对对角角线线平平行行,往往上上为为第第1条条,第第2条条,第第n条条对对角角线线,往往下下为为第第1条条,第第2条,条,第,第n条对角线。条对角线。n(2)构造对角矩阵)构造对角矩阵q设设V为为具具有有m个个元元素素的的向向量量,diag(V,k)的的功功能能是是产产生生一一个个nn(n=m+|k|)对对角角阵阵,其其第第k条条对对角角线线的的元元素素即即为为向向量量V的元素。的元素。n例如:例如:ndiag(1:3,-1)nans=n0000n1000n0200n0030q省略省略k时,相当于时,相当于k为为0,其主对角线元素即为向量
15、,其主对角线元素即为向量V的元素。的元素。n【例例4.6】先先建建立立55矩矩阵阵A,然然后后将将A的的第第一一行行元元素素乘以乘以1,第二行乘以,第二行乘以2,第五行乘以,第五行乘以5。q用用一一个个对对角角矩矩阵阵左左乘乘一一个个矩矩阵阵时时,相相当当于于用用对对角角阵阵的的第第一一个个元元素素乘乘以以该该矩矩阵阵的的第第一一行行,用用对对角角阵阵的的第第二二个个元元素素乘乘以以该该矩矩阵阵的的第第二二行行依依此此类类推推,因因此此,只只需需按按要要求求构构造造一一个个对对角角矩阵矩阵D,并用,并用D左乘左乘A即可。命令如下:即可。命令如下:nA=1:5;2:6;3:7;4:8;5:9nD
16、=diag(1:5);nD*A%用用D左乘左乘A,对对A的每行乘以一个指定常数的每行乘以一个指定常数n2三角阵三角阵q三三角角阵阵又又进进一一步步分分为为上上三三角角阵阵和和下下三三角角阵阵。所所谓谓上上三三角角阵阵,即即矩矩阵阵的的对对角角线线以以下下的的元元素素全全为为0的的一一种种矩矩阵阵,而而下下三三角角阵阵则是对角线以上的元素全为则是对角线以上的元素全为0的一种矩阵。的一种矩阵。q与与矩矩阵阵A对对应应的的上上三三角角阵阵B是是与与A具具有有相相同同的的行行数数和和列列数数的的一一个个矩矩阵阵,并并且且B的的对对角角线线以以上上(含含对对角角线线)的的元元素素和和A对对应应相相等等,
17、而而对对角角线线以以下下的的元元素素等等于于0。求求矩矩阵阵A的的上上三三角角阵阵的的MATLAB函数是函数是triu(A)。ntriu(A,k),其功能是求矩阵,其功能是求矩阵A的第的第k条对角线以上的元素。条对角线以上的元素。n在在MATLAB中中,提提取取矩矩阵阵A的的下下三三角角矩矩阵阵的的函函数数是是tril(A)和和tril(A,k)n3矩阵的转置矩阵的转置q所所谓谓转转置置,即即把把源源矩矩阵阵的的第第一一行行变变成成目目标标矩矩阵阵第第一一列列,第第二二行行变变成成第第二二列列依依此此类类推推。显显然然,一一个个m行行n列列的的矩矩阵阵经经过过转转置置运运算算后后,变变成成一一
18、个个n行行m列列的的矩矩阵阵。MATLAB中中,转转置置运算符是单撇号运算符是单撇号()。nA=1:3;1:3;1:3nB=An4矩阵的旋转矩阵的旋转q在在MATLAB中中,可可以以很很方方便便地地以以90为为单单位位对对矩矩阵阵A按按逆逆时时针针方方向向进进行行旋旋转转。利利用用函函数数rot90(A,k)将将矩矩阵阵A旋旋转转90的的k倍倍,当当k为为负负整整数数时时,对对矩矩阵阵A按按顺顺时时针针方方向向进进行行旋旋转转;当当k为为1时时可可省省略略。例例如如,将将A按逆时针方向旋转按逆时针方向旋转90,命令如下:,命令如下:nA=9,37,38;-2,31,8;0,84,5;nB=ro
19、t90(A)nB=n3885n373184n9-20nrot90(A,4)nans=n93738n-2318n0845n5矩阵的翻转矩阵的翻转q矩矩阵阵的的翻翻转转分分左左右右翻翻转转和和上上下下翻翻转转。对对矩矩阵阵实实施施左左右右翻翻转转是是将将原原矩矩阵阵的的第第一一列列和和最最后后一一列列调调换换,第第二二列列和和倒倒数数第第二二列列调调换换依此类推。依此类推。n对矩阵对矩阵A实施左右翻转的函数是实施左右翻转的函数是fliplr(A)。n对矩阵对矩阵A实施上下翻转的函数是实施上下翻转的函数是flipud(A)。n4.2.2矩阵求值矩阵求值q1方阵的行列式值方阵的行列式值n把把一一个个方
20、方阵阵看看作作一一个个行行列列式式,并并对对其其按按行行列列式式的的规规则则求求值值,这这个个值值就就称称为为矩矩阵阵所所对对应应的的行行列列式式的的值值。在在MATLAB中中,求求方方阵阵A所对应的行列式的值的函数是所对应的行列式的值的函数是det(A)。例如:。例如:qA=1:3;2:-1:0;12,5,9qA=q123q210q1259qB=det(A)qB=q-33n2矩阵的秩与迹矩阵的秩与迹q(1)矩阵的秩)矩阵的秩n矩阵线性无关的行数和列数称为矩阵的秩。矩阵线性无关的行数和列数称为矩阵的秩。nrank(A)qA=1,2,3;2,5,6;3,2,5;qr=rank(A)qr=q3q(
21、2)矩阵的迹)矩阵的迹n矩阵的迹即矩阵的对角线元素之和。矩阵的迹即矩阵的对角线元素之和。ntrace(A)。n3向量和矩阵的范数向量和矩阵的范数p函数函数norm用于计算矩阵或向量的范数,用于计算矩阵或向量的范数,norm函数的格式如下。函数的格式如下。norm(X,1):求向量或矩阵:求向量或矩阵X的的1范数。范数。norm(X)、norm(X,2):求向量或矩阵:求向量或矩阵X的的2范数。范数。norm(X,inf):求向量或矩阵:求向量或矩阵X的的范数。范数。n4矩阵的条件数矩阵的条件数q矩矩阵阵A的的条条件件数数等等于于A的的范范数数与与A的的逆逆矩矩阵阵的的范范数数的的乘乘积积,即即
22、。这这样样定定义义的的条条件件数数总总是是大大于于1的的。条条件件数数越越接接近近于于1,矩矩阵阵的的性能越好,反之,矩阵的性能越差。性能越好,反之,矩阵的性能越差。qA有有3种种范范数数,相相应应地地可可定定义义3种种条条件件数数。在在MATLAB中中,计计算算A的的3种条件数的函数如下。种条件数的函数如下。ncond(A,1):计算:计算A的的1范数下的条件数。范数下的条件数。ncond(A)或或cond(A,2):计算:计算A的的2范数数下的条件数。范数数下的条件数。ncond(A,inf):计算:计算A的的范数下的条件数。范数下的条件数。n4.2.3矩阵的特征值与特征向量矩阵的特征值与
23、特征向量q对对于于n阶阶方方阵阵A,求求数数和和向向量量,使使得得等等式式A=成成立立,满满足足等式的数等式的数称为称为A的的特征值特征值,而向量,而向量称为称为A的的特征向量特征向量。q在在MATLAB中中,计计算算矩矩阵阵A的的特特征征值值和和特特征征向向量量的的函函数数是是eig(A),常用的调用格式有如下,常用的调用格式有如下3种。种。nE=eig(A):求矩阵:求矩阵A的全部特征值,构成向量的全部特征值,构成向量E。nV,D=eig(A):求求矩矩阵阵A的的全全部部特特征征值值,构构成成对对角角阵阵D,并并求求A的特征向量构成的特征向量构成V的列向量。的列向量。nV,D=eig(A,
24、nobalance):与与第第2种种格格式式类类似似,但但第第2种种格格式式中中先先对对A作作相相似似变变换换后后求求矩矩阵阵A的的特特征征值值和和特特征征向向量量,而而格格式式3直接求矩阵直接求矩阵A的特征值和特征向量。的特征值和特征向量。q一一个个矩矩阵阵的的特特征征向向量量有有无无穷穷多多个个,eig函函数数只只找找出出其其中中的的n个个,A的的其他特征向量,均可由这其他特征向量,均可由这n个特征向量的线性组合表示。个特征向量的线性组合表示。n例如:例如:nA=1,1,0.5;1,1,0.25;0.5,0.25,2;nV,D=eig(A)nV=n0.72120.44430.5315n-0
25、.68630.56210.4615n-0.0937-0.69760.7103nD=n-0.016600n01.48010n002.53654.3 线性方程组求解线性方程组求解n4.3.1矩阵求逆及线性代数方程组求解矩阵求逆及线性代数方程组求解q1矩阵求逆矩阵求逆n若若方方阵阵A、B满满足足等等式式:A B=B A=I(I为为单单位位阵阵),称称A为为B的逆矩的逆矩阵阵n函数函数inv(A)用于计算方阵的逆矩阵。用于计算方阵的逆矩阵。qA=1-11;5-43;211;qB=inv(A)qB=q-1.40000.40000.2000q0.2000-0.20000.4000q2.6000-0.600
26、00.2000qA*Bqans=q1.000000q-0.00001.00000q-0.000001.0000q2利用矩阵求逆方法解线性方程组利用矩阵求逆方法解线性方程组n线性方程组的矩阵表示形式为线性方程组的矩阵表示形式为qAx=bn在方程组两边各左乘在方程组两边各左乘A-1,有,有qA-1 Ax=A-1 bn得到得到qx=A-1 bn【例【例4.9】利用矩阵求逆方法解线性方程组】利用矩阵求逆方法解线性方程组qA=1,-2,3;3,-1,5;2,1,5;qb=1;2;3;qx=inv(A)*bqx=q-0.3333q0.3333q0.6667n4.3.2利用左除运算符求解线性方程组利用左除运
27、算符求解线性方程组q对于线性方程组对于线性方程组Ax=b,可以利用,可以利用左除运算符左除运算符“”求解:求解:nx=Abn【例例4.10】用用左左除除运运算算符符求求解解下下列列相相同同系系数数矩矩阵阵的的两两个线性代数方程组的解。个线性代数方程组的解。解法解法1:分别解线性方程组。:分别解线性方程组。A=1,-1,1;5,-4,3;2,1,1;b1=2;-3;1;b2=3;4;-5;x=Ab1y=Ab2解法解法2:将两个线性方程组连在一起求解。:将两个线性方程组连在一起求解。A=1,-1,1;5,-4,3;2,1,1;b=2,3;-3,4;1,-5;xy=Ab4.4 矩矩 阵阵 分分 解解
28、q矩矩阵阵分分解解是是指指根根据据一一定定的的原原理理用用某某种种算算法法将将一一个个矩矩阵阵分分解解成成若若干干个个矩矩阵阵的的乘乘积积。常常见见的的矩矩阵阵分分解解有有LU分分解解、QR分分解解、Cholesky分分解解以及奇异分解等。以及奇异分解等。n4.4.1矩阵的矩阵的LU分解分解q矩矩阵阵的的LU分分解解又又称称Gauss消消去去分分解解或或三三角角分分解解,就就是是将将一一个个方方阵阵表表示为一个示为一个行交换下三角矩阵行交换下三角矩阵和一个和一个上三角矩阵上三角矩阵的乘积形式。的乘积形式。qMATLAB提供的提供的lu函数函数用于对矩阵进行用于对矩阵进行LU分解,其调用格式如下
29、。分解,其调用格式如下。nL,U=lu(X):产产生生一一个个上上三三角角阵阵U和和一一个个变变换换形形式式的的下下三三角角阵阵L(行交换行交换),使之满足,使之满足X=LU。注意,这里的矩阵。注意,这里的矩阵X必须是方阵。必须是方阵。nL,U,P=lu(X):产产生生一一个个上上三三角角阵阵U和和一一个个下下三三角角阵阵L以以及及一一个个置换矩阵置换矩阵P,使之满足,使之满足PX=LU。当然矩阵。当然矩阵X同样必须是方阵。同样必须是方阵。n当当使使用用第第1种种格格式式时时,矩矩阵阵L往往往往不不是是一一个个下下三三角角矩矩阵阵,但但可可以以通通过过行行交换成为一个下三角阵。交换成为一个下三
30、角阵。q利用第利用第2种格式对矩阵种格式对矩阵A进行进行LU分解:分解:qL,U,P=lu(A)nclearnA=2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4;nb=13,-9,6,0;nticnx2=Ab;%用左除运算求解用左除运算求解ntocnticnx1=inv(A)*b;%用求逆运算求解用求逆运算求解ntocnticnL,U=lu(A);%LU分解分解nx3=U(Lb);%用用LU分解求解分解求解ntocnx1=x1nx2=x2nx3=x3其其中中tic和和toc两两个个函函数数配配合合使使用用用用于于计计算算程程序序的的执执行行时时间间,tic记记录录当当
31、前前时时间间,toc记记录录或或显显示示使使用用tic函函数数以以来来所所花花费费的的时时间间。运运行行结结果果说说明明,x1、x2、x3的的值值相相同同,通通过过LU分解求值所化运行时间最少。分解求值所化运行时间最少。n4.4.2矩阵的矩阵的QR分解分解q对对矩矩阵阵X进进行行QR分分解解,就就是是把把X分分解解为为一一个个正正交交矩矩阵阵Q和和一一个上三角矩阵个上三角矩阵R的乘积形式。的乘积形式。qqr函数函数可用于对矩阵进行可用于对矩阵进行QR分解,其调用格式如下:分解,其调用格式如下:nQ,R=qr(X):产产生生一一个个一一个个正正交交矩矩阵阵Q和和一一个个上上三三角角矩矩阵阵R,使
32、之满足,使之满足X=QR。nQ,R,E=qr(X):产产生生一一个个一一个个正正交交矩矩阵阵Q、一一个个上上三三角角矩矩阵阵R以及一个置换矩阵以及一个置换矩阵E,使之满足,使之满足XE=QR。n设设n对矩阵对矩阵A进行进行QR分解。分解。qA=2,1,1,4;1,2,-1,2;1,-1,3,3;qQ,R=qr(A)qQ=q-0.81650-0.5774q-0.4082-0.70710.5774q-0.40820.70710.5774qR=q-2.4495-1.2247-1.6330-5.3072q0-2.12132.82840.7071q000.57740.5774n为验证结果是否正确,输入命
33、令为验证结果是否正确,输入命令qQR=Q*Rn4.4.3矩阵的矩阵的Cholesky分解分解q如如果果矩矩阵阵X是是对对称称正正定定的的,则则Cholesky分分解解将将矩矩阵阵X分分解解成成一一个个下下三三角角矩矩阵阵和和上上三三角角矩矩阵阵的的乘乘积积。设设上上三三角角矩矩阵阵为为R,则则下下三三角角矩矩阵阵为为其其转转置置,即即X=RR。MATLAB函函数数chol(X)用用于对矩阵于对矩阵X进行进行Cholesky分解,其调用格式如下。分解,其调用格式如下。nR=chol(X):产产生生一一个个上上三三角角阵阵R,使使RR=X。若若X为为非非对对称称正定,则输出一个出错信息。正定,则输
34、出一个出错信息。nR,p=chol(X):这这个个命命令令格格式式将将不不输输出出出出错错信信息息。当当X为为对对称称正正定定的的,则则p=0,R与与上上述述格格式式得得到到的的结结果果相相同同;否否则则p为为一一个个正正整整数数。如如果果X为为满满秩秩矩矩阵阵,则则R为为一一个个阶阶数数为为q=p1的的上三角阵,且满足上三角阵,且满足RR=X(1:q,1:q)。n设设n对矩阵对矩阵A进行进行Cholesky分解。分解。qA=2,1,1;1,2,-1;1,-1,3;qR=chol(A)qR=q1.41420.70710.7071q01.2247-1.2247q001.0000q为验证结果是否正
35、确,输入命令为验证结果是否正确,输入命令qR*Rqans=q2.00001.00001.0000q1.00002.0000-1.0000q1.0000-1.00003.00004.5 超越函数运算超越函数运算n1超越函数超越函数qMATLAB还还提提供供了了一一些些直直接接作作用用于于矩矩阵阵的的超超越越函函数数,如如矩矩阵阵平平方方根根函函数数sqrtm、矩矩阵阵指指数数函函数数expm、矩矩阵阵对对数数函函数数logm等等,这这些些函函数数名名都都在在上上述述内内部部函函数数名名之之后后缀缀以以m,并并规规定定输输入参数入参数A必须是方阵。例如:必须是方阵。例如:nA=4,2;3,6;nB
36、=sqrtm(A)nB=n1.91710.4652n0.69782.3823n2通用矩阵函数通用矩阵函数funmqfunm(A,fun)对对方方阵阵A计计算算由由fun定定义义的的函函数数的的矩矩阵阵函函数数值值。例例如如,当当fun取取exp时时,funm(A,exp)可可以以计计算算矩矩阵阵A的的指指数数,与与expm(A)的计算结果一样。的计算结果一样。n例子例子qA=2,-1;1,0;qfunm(A,exp)qans=q5.4366-2.7183q2.71830.0000qexpm(A)qans=q5.4366-2.7183q2.7183-0.0000n注注意意:funm函函数数可可以
37、以用用于于exp函函数数和和log函函数数,但但求求矩矩阵的平方根只能用阵的平方根只能用sqrtm。4.6 稀疏矩阵的处理稀疏矩阵的处理q稀疏矩阵中具有大量的零元素,而仅含极少量的非零元素。稀疏矩阵中具有大量的零元素,而仅含极少量的非零元素。n4.6.1矩阵存储方式矩阵存储方式q1完完全全存存储储方方式式:矩矩阵阵的的全全部部元元素素按按列列存存储储。以以前前讲讲到到的的矩矩阵阵的的存存储储方方式式都都是是按按这这个个方方式式存存储储的的,此此存存储储方方式式对对稀稀疏疏矩矩阵阵也也适适用用。例例如如,不不论论是是mn阶阶普普通通的的还还是是稀稀疏疏的的实实矩矩阵阵均均需需要要mn个个存存储储
38、单单元元,而而复复矩矩阵阵还还要要翻翻倍倍。在在这这种种方方式式下下,矩阵中的全部零元素也必须输入。矩阵中的全部零元素也必须输入。q2稀稀疏疏存存储储方方式式:仅仅存存储储矩矩阵阵所所有有的的非非零零元元素素的的值值及及其其位位置置,即行号和列号。即行号和列号。n4.6.2矩阵的稀疏存储方式矩阵的稀疏存储方式q1将完全存储方式转化为稀疏存储方式将完全存储方式转化为稀疏存储方式n函函数数A=sparse(S)将将矩矩阵阵S转转化化为为稀稀疏疏存存储储方方式式的的矩矩阵阵A。当当矩矩阵阵S是是稀稀疏存储方式时,则函数调用相当于疏存储方式时,则函数调用相当于A=S。X=2,0,0,0,0;0,0,0
39、,0,0;0,0,0,5,0;0,1,0,0,-1;0,0,0,0,-5;A=sparse(X)A=(1,1)2(4,2)1(3,4)5(4,5)-1(5,5)-5nsparse函数还有其他一些调用格式。函数还有其他一些调用格式。nsparse(m,n):生成一个:生成一个mn的所有元素都是的所有元素都是0的稀疏矩阵。的稀疏矩阵。nsparse(u,v,S):u、v、S是是3个个等等长长的的向向量量。S是是要要建建立立的的稀稀疏疏矩矩阵阵的的非非0元元素素,u(i)、v(i)分分别别是是S(i)的的行行和和列列下下标标,该该函函数数建建立立一个一个max(u)行、行、max(v)列并以列并以S
40、为稀疏元素的稀疏矩阵。为稀疏元素的稀疏矩阵。q和稀疏矩阵操作有关的函数。和稀疏矩阵操作有关的函数。nu,v,S=find(A):返返回回矩矩阵阵A中中非非0元元素素的的下下标标和和元元素素。这这里产生的里产生的u、v、S可作为可作为sparse(u,v,S)的参数。的参数。nfull(A):返回和稀疏存储矩阵:返回和稀疏存储矩阵A对应的完全存储方式矩阵。对应的完全存储方式矩阵。n2产生稀疏存储矩阵产生稀疏存储矩阵nB=spconvert(A)q其其中中A为为一一个个m3或或m4的的矩矩阵阵,其其每每行行表表示示一一个个非非0元元素素,m是非是非0元素的个数,元素的个数,A中每个元素的意义是:中
41、每个元素的意义是:n(i,1)第第i个非个非0元素所在的行;元素所在的行;n(i,2)第第i个非个非0元素所在的列;元素所在的列;n(i,3)第第i个非个非0元素值的实部;元素值的实部;n(i,4)第第i个个非非0元元素素值值的的虚虚部部,若若矩矩阵阵的的全全部部元元素素都都是是实实数数,则则无须第无须第4列。列。q该函数将该函数将A所描述的一个稀疏矩阵转化为一个稀疏存储矩阵。所描述的一个稀疏矩阵转化为一个稀疏存储矩阵。n设设n命令如下命令如下qA=2,2,1;3,1,-1;4,3,3;5,3,8;6,6,12;qB=spconvert(A)qB=q(3,1)-1q(2,2)1q(4,3)3q
42、(5,3)8q(6,6)12n3带状稀疏存储矩阵带状稀疏存储矩阵将带状对角线之值构成下列矩阵将带状对角线之值构成下列矩阵B,将带状的位置构成向量,将带状的位置构成向量d:然后利用然后利用spdiags函数产生一个稀疏存储矩阵。函数产生一个稀疏存储矩阵。B=0,0,0,41,51;11,21,31,42,52;12,22,32,0,0;d=-3,0,3;A=spdiags(B,d,5,6)%产生一个稀疏存储矩阵产生一个稀疏存储矩阵AnA=spdiags(B,d,m,n)q其其中中,m、n为为原原带带状状矩矩阵阵的的行行数数与与列列数数。B为为rp阶阶矩矩阵阵,这这里里r=min(m,n),p为为
43、原原带带状状矩矩阵阵所所有有非非零零对对角角线线的的条条数数,矩矩阵阵B的的第第i列列即即为为原带状矩阵的第原带状矩阵的第i条非零对角线。条非零对角线。q取值方法是:取值方法是:n若非零对角线上元素个数等于若非零对角线上元素个数等于r,则取全部元素;,则取全部元素;n若非零对角线上元素个数小于若非零对角线上元素个数小于r,则应该用零补足到,则应该用零补足到r个元素。个元素。q补零的原则:补零的原则:n当当mn,应从该对角线的第,应从该对角线的第1行开始补零或向后补零至末行;行开始补零或向后补零至末行;n当当mn,则应从该对角线的第,则应从该对角线的第1列开始补零或向后补零至末列。列开始补零或向
44、后补零至末列。qd为为具具有有p个个元元素素的的列列向向量量,它它的的第第i个个元元素素为为该该带带状状矩矩阵阵的的第第i条条对对角角线线的的位置位置k。nk的的取取法法:若若是是主主对对角角线线,取取k=0,若若位位于于主主对对角角线线的的下下方方第第s条条对对角角线线,取取k=s,若位于主对角线的上方第,若位于主对角线的上方第s条对角线,则取条对角线,则取k=s。n4单位矩阵的稀疏存储单位矩阵的稀疏存储q单单位位矩矩阵阵只只有有对对角角线线元元素素为为1,其其他他元元素素都都为为0,是是一一种种具具有有稀稀疏疏特特征征的的矩矩阵阵。函函数数eye产产生生一一个个完完全全存存储储方方式式的的
45、单单位位矩矩阵阵。MATLAB还还有有一一个个产产生生稀稀疏疏存存储储方方式式的的单单位位矩矩阵阵的的函函数数,这这就就是是speye。函函数数speye(m,n)返返回回一一个个mn的的稀稀疏疏存存储储单单位位矩矩阵。阵。q例如:例如:ns=speye(3,5)ns=n(1,1)1n(2,2)1n(3,3)1n4.6.3稀疏矩阵应用举例稀疏矩阵应用举例q稀稀疏疏存存储储矩矩阵阵只只是是矩矩阵阵的的存存储储方方式式不不同同,它它的的运运算算规规则则与与普普通通矩矩阵阵是是一一样样的的。当当参参与与运运算算的的对对象象不不全全是是稀稀疏疏存存储储矩矩阵阵时时,所得结果一般是完全存储形式。例如:所得结果一般是完全存储形式。例如:nA=0,0,3;0,5,0;0,0,9;nB=sparse(A);nB*B%两个稀疏矩阵相乘,结果仍为稀疏矩阵两个稀疏矩阵相乘,结果仍为稀疏矩阵nans=n(2,2)25n(1,3)27n(3,3)81nrand(3)*B%普通矩阵与随机矩阵相乘,结果为完全存储矩阵普通矩阵与随机矩阵相乘,结果为完全存储矩阵nans=n01.76432.4808n04.06584.5058n00.04931.9622