数值计算功能课件_第1页
数值计算功能课件_第2页
数值计算功能课件_第3页
数值计算功能课件_第4页
数值计算功能课件_第5页
已阅读5页,还剩125页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MATLAB应用相当广泛的一个领域是解决数值计算问题。这是由于MATLAB对处理数组具有非凡的能力,使其成为许多科学与工程应用中的一个有力的工具。本章主要介绍矩阵的创建、运算以及如何运用MATLAB解决线性代数中的相关问题。【学习目标】能够创建矩阵,并熟练掌握矩阵的各种运算法则掌握稀疏矩阵的基本操作。学会运用MATLAB解决线性代数的相关问题。掌握如何运用MATLAB实现数据的插值、曲线的拟合和零极点的求解。MATLAB应用相当广泛的一个领域是解决数值计算问题。这是2.1矩阵及其运算MATLAB最基本、最重要的功能就是进行矩阵运算。所有的数值功能都是以矩阵为基本单位实现的。2.1矩阵及其运算MATLAB最基本、最重要的功能就是进行2.1.1矩阵生成1.直接生成矩阵的生成可以通过在方括号[]中输入元素实现,不同行之间要用分号隔开,不同列用空格分开。【例2-1】生成一个2×3矩阵。>>a=[123;456]a=123456可以用冒号快速建立矩阵,步长在默认的情况下为1,也可以自定义步长。>>a=[1:3;4:6]a=1234562.1.1矩阵生成1.直接生成2.函数生成MATLAB中提供了特殊函数可以生成特殊矩阵。【例2-2】生成一个2×3全零矩阵,一个3×3单位矩阵。>>a=zeros(2,3)%生成2×3全零阵a=000000>>a=eye(3,3)%生成3×3单位阵a=100010001

2.函数生成常用的特殊矩阵列在表2.1当中。表2.1常用的特殊矩阵函数功能函数命令zeros生成全0矩阵compan生成多项式的友矩阵eye生成单位矩阵hadamard生成哈达玛矩阵(由1和-1构成的正交矩阵)ones生成全1阵vander生成范德蒙矩阵rand生成均匀分布随机矩阵hilbHilbert矩阵(沿主对角线对称)randn生成正态分布随机矩阵invhilb逆Hilbert矩阵triltriu生成上三角或下三角矩阵magicMagic矩阵diag生成对角矩阵pascalPascal矩阵wilkinson生成威尔金森矩阵toeplitz托普利兹矩阵常用的特殊矩阵列在表2.1当中。函数功能函数命令zero2.1.2矩阵连接矩阵连接,是联合一个或多个矩阵形成一个新矩阵。方括号[]就可以作为矩阵连接操作符。表达式A=[BC]就是水平连接矩阵B和C;A=[B;C]就是垂直连接矩阵B和C连接矩阵也可以用函数形成一个新矩阵,如cat函数。cat函数调用格式:1)C=cat(dim,A,B)Dim指链接方向。Dim的可选值:1,垂直方向;2,水平方向;3,生成三维数组。2)C=cat(dim,A1,A2,…)可以实现连接多个矩阵。2.1.2矩阵连接矩阵连接,是联合一个或多个矩阵形成一【例2-3】把矩阵A,B分别在垂直方向,水平方向连接,A=[123],B=[456]。>>C1=cat(1,A,B)%垂直方向连接C1=123456>>C2=cat(2,A,B)%水平方向连接C2=123456【例2-3】把矩阵A,B分别在垂直方向,水平方向连接,A=[表2.2列出了常用的连接矩阵函数。表2.2连接矩阵函数函数功能函数功能cat连接矩阵remat复制一个矩阵到另一个矩阵horzcat水平连接多个矩阵blkdiag对角连接多个矩阵vertcat垂直连接多个矩阵表2.2列出了常用的连接矩阵函数。函数功能函数功能cat连接2.1.3矩阵元素的下标引用及操作1.矩阵下标在MATLAB中,矩阵元素的引用可以通过下标表示,通常有如下规则:1)用两个下标来表示:在矩阵A中,第i行j列的元素用A(i,j)来表示。2)用一个下标来表示:对于矩阵,由于MATLAB的基本运算都是对列操作的,矩阵认为是按列优先排列的一个长的列向量,从而可用单下标引用。2.1.3矩阵元素的下标引用及操作1.矩阵下标【例2-4】提取矩阵的元素。>>A=[123;456;789]A=123456789可以用A(m,n)选出第m行n列的元素。>>A(2,3)ans=6也可以用一个下标选出元素。>>A(8)ans=6【例2-4】提取矩阵的元素。2.矩阵的抽取用下标可以从大矩阵里面抽取某些元素组成小的矩阵,并使用()运算符。【例2-5】提取矩阵A的前2行为一个新矩阵B。>>B=A(1:2,:)%B=A([12],:)

B=1234562.矩阵的抽取3.删除矩阵的行和列我们把空的中括号[]称为空矩阵,即矩阵大小为0×0。可以通过把矩阵的行或列赋值为空矩阵来删除某行或某列。【例2-6】删除上例中A的第1,2列。

>>A(:,[12])=[]A=369

在MATLAB里不能用双下标来删除矩阵的某个元素,例如X(1,2)=[]将给出错误信息。但可以用单下标来删除矩阵的某个或某些元素,MATLAB删除这些元素后,将剩下的元素按列编成一个长的行向量。3.删除矩阵的行和列4.reshape函数实现改变矩阵大小reshape函数可以实现矩阵行列大小的变化,但变化前矩阵行列值的乘积和变化后的行列值的乘积不变。reshape(A,M,N)命令将矩阵A的所有元素分配到一个M×N的新的矩阵,当矩阵A的元素个数不是M×N时,将返回一个错误。reshape(A,M,N,P,…)命令返回由矩阵A的元素组成的M×N×P….多维的矩阵,如果M×N×P….与A的元素个数不一样时将返回错误。reshape(A,[M,N,P,…])命令与reshape(A,M,N,P,…)命令的作用一样。4.reshape函数实现改变矩阵大小【例2-7】把2行3列矩阵A变成变成1行6列的矩阵B。>>B=reshape(A,1,6)B=142536【例2-7】把2行3列矩阵A变成变成1行6列的矩阵B。2.1.4矩阵运算1.矩阵的加、减矩阵的加减运算使用+、-运算符,能够相加减的矩阵需满足以下两个条件之一:1)类型相同,即行数相等,且列数相等。2)其中一个为标量,此时的加减运算结果等于矩阵中每一个元素都和标量做加减运算。【例2-8】求矩阵A与B的和,A=[123],B=[236]。>>A+Bans=3592.1.4矩阵运算1.矩阵的加、减2.矩阵的乘积矩阵的乘积运算使用*运算符,而且相乘的矩阵必须满足维数条件。如果A是一个m×p矩阵,而B是p×n矩阵,它们可以相乘产生m×n矩阵。【例2-9】求例2-8中矩阵A与B的转置矩阵的乘积。>>A*B'ans=26在MATLAB里,单引号表示复共轭转置,一个点加单引号“.′”表示普通转置,即沿主对角线左上与右下相对元素对调。>>B'ans=2362.矩阵的乘积3、矩阵的除法MATLAB定义了矩阵的左除及右除。“\”运算符号表示两个矩阵的左除,“/”表示两个矩阵的右除。A\B即由Gauss消去法来获得线性方程AX=B的解X,即X=A-1B。矩阵的右除:MATLAB用“/”表示两个矩阵的右除。X*A=B的解是X=B/A,对于非奇异方阵A,B/A等效为BA-1。【例2-10】求矩阵a与b的左除和右除。>>c=a\b%矩阵左除,相当于inv(a)*bc=0.33330.6000-0.2000-0.6667-0.40000.80001.00000.40000.2000>>d=a/b%矩阵右除,相当于a*inv(b)d=1.33331.3333-1.00000-0.50001.50001.66670.1667-0.50003、矩阵的除法【例2-10】求矩阵a与b的左除和右除。表2.3给出了可以获得有关矩阵的形状与大小信息的函数。表2.3取得矩阵相关信息的函数函数说明函数说明length返回矩阵最长的那维长度numel返回矩阵的元素数ndims返回矩阵的维数(如二维、三维)size返回矩阵每一维的长度(2×3,3×3

)表2.3给出了可以获得有关矩阵的形状与大小信息的函数。函数说4.矩阵的乘方运算和开方运算MATLAB中矩阵的乘方可以由符号“^”实现,而矩阵的开方则由sqrtm函数实现。【例2-11】求如下矩阵A的3次方。>>A^3ans=4685766841062130515481656203424124.矩阵的乘方运算和开方运算如果想实现矩阵中每个元素都进行3次方,则可用“.^”实现,在运算符前面加“.”后就表示是对矩阵的元素操作。>>A.^3ans=182764125216343512729【例2-12】求例2-11中矩阵A的开方。>>sqrtm(A)%sqrtm(A)相当于A^0.5ans=0.4498+0.7623i0.5526+0.2068i0.6555-0.3487i1.0185+0.0842i1.2515+0.0228i1.4844-0.0385i1.5873-0.5940i1.9503-0.1611i2.3134+0.2717i其实矩阵的开方运算和乘方运算互为逆运算。如果想实现矩阵中每个元素都进行3次方,则可用“.^”实现,在5.矩阵的指数和对数运算指数函数和对数函数是非常重要的两个函数,所以MATLAB提供了两个专门的函数expm和logm来实现矩阵的指数运算和对数运算。【例2-13】求矩阵的指数运算和对数运算>>A=rand(3)A=0.95010.48600.45650.23110.89130.01850.60680.76210.82145.矩阵的指数和对数运算>>expm(A)%对A矩阵的每个元素求以e为底的指数ans=3.12501.74531.19930.63602.63580.17961.80102.29812.6663>>logm(A)%对A矩阵的每个元素求以e为底的对数ans=-0.29770.33990.60440.2874-0.1588-0.06040.66960.8173-0.3901>>expm(A)%对A矩阵的每个元素求以e为底的指数6.矩阵的数组运算运算中,往往需要在矩阵之间进行对应元素的运算,这就是矩阵的数组运算。矩阵的数组运算与前面运算区别主要放映在乘和除两种运算中。1.乘法矩阵的数组运算A.*B(称为数乘)2.除法矩阵的数组运算A./B(称为数除)练习已知A=[135;246;789];B=[121;232;343]比较A*B和A.*B以及A/B和A./B的区别6.矩阵的数组运算2.2稀疏型矩阵如果在矩阵中,多数的元素并没有值,称此矩阵为稀疏矩阵(SparseMatrix),由于矩阵在方程中常使用二维阵列表示,二维阵列的大小与使用的内存空间成正比,如果多数的元素没有值,则会造成内存空间的浪费,为此,必须设计稀疏矩阵的阵列储存方式,利用较少的内存空间储存完整的矩阵信息。2.2稀疏型矩阵如果在矩阵中,多数的元素并没有值,称此矩2.2.1稀疏型矩阵生成在MATLAB中,用sparse函数来创建一个稀疏矩阵。sparse(A)由非零元素和下标建立稀疏矩阵A。如果A已是一个稀疏矩阵,则返回A本身。sparse(m,n)生成一个m×n的所有元素都是0的稀疏矩阵。【例2-14】把3阶的单位矩阵转换成稀疏矩阵。>>as=sparse(eye(3))%生成主对角线为1的稀疏矩阵。as=(1,1)1%第1行第1列的元素为1(2,2)1%第2行第2列的元素为1(3,3)1%第3行第3列的元素为12.2.1稀疏型矩阵生成在MATLAB中,用sparse2.2.2转换成满矩阵full(S)函数可以将稀疏矩阵S转换成一个满矩阵。【例2-15】将例2-14中的结果再转换成满矩阵。>>full(as)ans=1000100012.2.2转换成满矩阵2.2.3对非零元素进行操作nnz(A)函数可以求矩阵A中非零元素的个数,它既可求满矩阵也可求稀疏矩阵。spy(A)函数可以画出稀疏矩阵A中非零元素的分布。也可用在满矩阵中,在这种情况下,只给出非零元素的分布。spy(A,cstr,size)函数可以用指定的颜色cstr在size规定的范围内画出稀疏矩阵A中非零元素的分布。nonzeros(A)函数可以按照列的顺序找出矩阵A中非零的元素。2.2.3对非零元素进行操作nnz(A)函数可以求矩spones(A)函数可以把矩阵A中的非零元素全换为1。nzmax(A)函数可以给出为矩阵A中非零元素分配的内存数.不一定和nnz(A)得到的数相同。issparse(A)函数在矩阵A是稀疏矩阵的情况下返回1;否则返回0。spfun(fcn,A)函数可以用A中所有非零元素对函数fcn求值,如果函数不是对稀疏矩阵定义的,同样也可以求值。sprank(A)函数可以求稀疏矩阵A的结构秩。对于所有的矩阵来说,都有sprank(A)≥rank(A)。spones(A)函数可以把矩阵A中的非零元素全换为1。【例2-16】求3阶单位矩阵的非零元素的个数,并画出非零元素的分布。>>nnz(eye(3))ans=3>>spy(eye(3))结果如图2.1所示。图2.1矩阵A的稀疏表示【例2-16】求3阶单位矩阵的非零元素的个数,并画出非零元素2.2.4稀疏矩阵的特例MATLAB中有四个基本稀疏矩阵,它们是单位矩阵,随机矩阵,对称随机矩阵和对角矩阵。下面介绍各自的生成函数。speye(n)函数可以生成n×n的单位稀疏矩阵。speye(m,n)函数可以生成m×n的单位稀疏矩阵。sprand(A)函数可以生成与A有相同结构的随机稀疏矩阵,且元素服从均匀分布。sprand(m,n,dens)函数可以生成一个m×n的服从均匀分布的随机稀疏矩阵,有dens×m×n个非零元素,0≤dens≤1.参数dens是非零元素的分布密度。sprandn(A)函数可以生成与A有相同结构的随机稀疏矩阵,且元素服从正态分布。2.2.4稀疏矩阵的特例MATLAB中有四个基本稀疏矩阵sprandsym(S)函数可以生成一个随机对称稀疏矩阵。它的下三角及主对角线部分与S的结构相同,矩阵元素服从正态分布。sprandsym(n,dens)函数可以生成一个n×n的随机对称稀疏矩阵.矩阵元素服从正态分布,分布密度为dens。[B,d]=spdiags(A)函数可以求出A中所有的对角元,对角元保存在矩阵B中,它们的下标保存在向量d中。spdiags(A,d)函数可以生成一个矩阵,这个矩阵包含有矩阵A中向量d规定的对角元。spdiags(B,d,A)函数可以生成矩阵A,用矩阵B中的列替换d定义的对角元。A=spdiags(B,d,m,n)用保存在由d定义的B中的对角元创建稀疏矩阵A。sprandsym(S)函数可以生成一个随机对称稀疏矩阵2.3MATLAB与线性代数2.3.1矩阵的特征参数1.求矩阵的行列式行列式对于查明一个方程组是否有解很有用。行列式是一个特殊的方形阵列,并且还可以简化为一个数。用户使用竖条来表示一个行列式,而使用方括号来代表矩阵。将一个2×2的行列式简化为一个数的规则如下所示:数学上通过人笔算来得出行列式的值,现在可以通过MATLAB利用det函数轻松算出行列式的值。2.3MATLAB与线性代数2.3.1矩阵的特征参【例2-17】计算如下的行列式:>>D=[345;123;369];>>det(D)ans=0【例2-17】计算如下的行列式:2.矩阵的秩矩阵的秩是矩阵行或列的数值线性独立的度量。如果一个向量线性独立于另外一些向量组,那意味着这一个向量不能写成它们的线性组合。rank函数可以实现求矩阵的秩。对于带有n个未知量的m个线性系统方程:Ax=b把b连结A上构成了增广矩阵:[Ab]当且仅当rank(A)=rank(Ab)时系统有解。如果秩等于n,那么系统有唯一解,但如果秩小于n,那么系统有无数解。如果秩条件吻合并且秩与未知数个数相等,解就可以用左除计算得到。下面举例具体说明以下。2.矩阵的秩【例2-18】求下列方程的解。>>A=[1-21;345;-217];b=[12;20;11];>>C=[Ab]%创建增广矩阵C=1-211234520-21711【例2-18】求下列方程的解。现在我们检查一下A的秩:>>rank(A)ans=3增广矩阵的秩为:>>rank(C)ans=3由于秩相同,因此解存在。这里有三个未知量,我们也注意到秩r满足r=n。这意味着解唯一。我们用左除求得解:>>x=A\bx=4.3958-2.22923.1458现在我们检查一下A的秩:3.矩阵的特征值和特征向量矩阵特征值与特征向量的定义:设A是n阶矩阵,如果存在数λ和n维非零向量x使关系式Ax=λx成立,那么,这样的数λ称为方阵A的特征值,非零向量x称为A的对应特征值λ的特征向量。eig函数可求得特征值和特征向量。格式为:[V,D]=eig(A)其中V为特征向量,D为特征值。3.矩阵的特征值和特征向量【例2-19】求下列矩阵的特征值和特征向量。>>A=[3-1;-13];>>[V,D]=eig(A)V=-0.7071-0.7071-0.70710.7071D=2004【例2-19】求下列矩阵的特征值和特征向量。4.矩阵的逆逆矩阵的定义:对于n阶矩阵A,如果有一个n阶矩阵B,使AB=BA=E,则说矩阵A是可逆的,并把矩阵B称为A的逆矩阵,E为单位矩阵。inv函数可以求矩阵的逆。【例2-20】求下列矩阵的逆。>>A=[104;783;238];>>inv(A)ans=0.73330.1600-0.4267-0.6667-0.00000.33330.0667-0.04000.10674.矩阵的逆【例2-21】利用矩阵的逆求解方程:2x+9y=53x–

4y=7>>A=[29;3-4];>>b=[5;7];>>x=inv(A)*bx=2.37140.0286通过手算矩阵逆是非常繁重的任务,使用MATLAB则变得非常容易。表2.4给出了可以获得矩阵特征参数的常用函数。【例2-21】利用矩阵的逆求解方程:表2.4矩阵特征参数函数函数说明函数说明det求矩阵的行列式norm求矩阵和向量范数eig求矩阵的特征值和特征向量rank求矩阵的秩inv求矩阵的逆trace求矩阵的迹(即矩阵主对角线上所有元素的和)函数说明函数说明det求矩阵的行列式norm求矩阵和向量范数2.3.2利用矩阵的分解求解线性方程组

矩阵分解是指根据一定的原理用某种算法将一个矩阵分解成若干个矩阵的乘积。常见的矩阵分解有LU分解、QR分解、Cholesky分解,以及Schur分解、Hessenberg分解、奇异分解等。2.3.2利用矩阵的分解求解线性方程组矩阵分解是指根1.LU分解矩阵的LU分解就是将一个矩阵表示为一个交换下三角矩阵和一个上三角矩阵的乘积形式。线性代数中已经证明,只要方阵A是非奇异的,LU分解总是可以进行的。MATLAB提供的lu函数用于对矩阵进行LU分解,其调用格式为:[L,U]=lu(X)产生一个上三角阵U和一个变换形式的下三角阵L(行交换),使之满足X=LU。注意,这里的矩阵X必须是方阵。[L,U,P]=lu(X)产生一个上三角阵U和一个下三角阵L以及一个置换矩阵P,使之满足PX=LU。当然矩阵X同样必须是方阵。实现LU分解后,线性方程组Ax=b的解x=U\(L\b)或x=U\(L\Pb),这样可以大大提高运算速度。1.LU分解【例2-22】用LU分解求解下列线性方程组。>>A=[3,1,-4,1;1,-3,0,2;0,2,1,-1;1,6,-1,-3];>>b=[12,-6,4,0]';>>[L,U]=lu(A);>>x=U\(L\b)x=-16.444420.6667-1.111136.2222【例2-22】用LU分解求解下列线性方程组。或采用LU分解的第2种格式,命令如下:>>[L,U,P]=lu(A);>>x=U\(L\P*b)x=-16.444420.6667-1.111136.2222或采用LU分解的第2种格式,命令如下:2.QR分解对矩阵X进行QR分解,就是把X分解为一个正交矩阵Q和一个上三角矩阵R的乘积形式。QR分解只能对方阵进行。MATLAB的函数qr可用于对矩阵进行QR分解,其调用格式为:[Q,R]=qr(X):产生一个一个正交矩阵Q和一个上三角矩阵R,使之满足X=QR。[Q,R,E]=qr(X):产生一个一个正交矩阵Q、一个上三角矩阵R以及一个置换矩阵E,使之满足XE=QR。实现QR分解后,线性方程组Ax=b的解x=R\(Q\b)或x=E(R\(Q\b))。2.QR分解【例2-23】用QR分解求解例2-22线性方程组。>>A=[3,1,-4,1;1,-3,0,2;0,2,1,-1;1,6,-1,-3];>>b=[12,-6,4,0]';>>[Q,R]=qr(A);x=R\(Q\b)x=-16.444420.6667-1.111136.2222或采用QR分解的第2种格式,命令如下:>>[Q,R,E]=qr(A);>>x=E*(R\(Q\b))x=-16.444420.6667-1.111136.2222【例2-23】用QR分解求解例2-22线性方程组。3.Cholesky分解如果矩阵X是对称正定的,则Cholesky分解将矩阵X分解成一个下三角矩阵和上三角矩阵的乘积。设上三角矩阵为R,则下三角矩阵为其转置,即X=R'R。MATLAB函数chol(X)用于对矩阵X进行Cholesky分解,其调用格式为:R=chol(X):产生一个上三角阵R,使R'R=X。若X为非对称正定,则输出一个出错信息。[R,p]=chol(X):这个命令格式将不输出出错信息。当X为对称正定的,则p=0,R与上述格式得到的结果相同;否则p为一个正整数。如果X为满秩矩阵,则R为一个阶数为q=p-1的上三角阵,且满足R'R=X(1:q,1:q)。实现Cholesky分解后,线性方程组Ax=b变成R‘Rx=b,所以x=R\(R’\b)。3.Cholesky分解【例2-24】用Cholesky分解求解例2-22线性方程组。>>A=[3,1,-4,1;1,-3,0,2;0,2,1,-1;1,6,-1,-3];>>b=[12,-6,4,0]';>>R=chol(A)???Errorusing==>cholMatrixmustbepositivedefinite命令执行时,出现错误信息,说明A为非正定矩阵。【例2-24】用Cholesky分解求解例2-22线性方程组2.3.3非线性方程数值求解1.单变量非线性方程求解在MATLAB中提供了一个fzero函数,可以用来求单变量非线性方程的根。该函数的调用格式为:z=fzero('fname',x0,tol,trace)其中fname是待求根的函数文件名,x0为搜索的起点.一个函数可能有多个根,但fzero函数只给出离x0最近的那个根。tol控制结果的相对精度,缺省时取tol=eps,trace指定迭代信息是否在运算中显示,为1时显示,为0时不显示,缺省时取trace=0。2.3.3非线性方程数值求解1.单变量非线性方程求解【例2-25】求f(x)=x-10x+2=0在x0=0.5附近的根。步骤如下:(1)建立一元函数fx

>>fx=@(x)x-10.^x+2(2)调用fzero函数求根.

>>

z=fzero(fx,0.5)

z=0.3758【例2-25】求f(x)=x-10x+2=0在x0=0.5附2.非线性方程组的求解对于非线性方程组F(X)=0,用fsolve函数求其数值解。fsolve函数的调用格式为:X=fsolve(fun,X0,option)其中X为返回的解,fun是待求解的非线性方程组的函数文件名,X0是求根过程的初值,option为最优化工具箱的选项设定。最优化工具箱提供了20多个选项,用户可以使用optimset命令将它们显示出来。如果想改变其中某个选项,则可以调用optimset()函数来完成。例如,Display选项决定函数调用时中间结果的显示方式,其中'off''为不显示,'iter'表示每步都显示,'final'只显示最终结果.option=optimset(‘Display’,‘off’)将设定Display选项为'off''。2.非线性方程组的求解2.3.4函数极值

MATLAB提供了基于单纯形算法求解函数极值的函数fminbnd和fminsearch,它们分别用于单变量函数和多变量函数的极小值,其调用格式为:x=fminbnd(fname,x1,x2)x=fminsearch(fname,x1,x2)其中fminbnd函数用于求单变量函数的极小值点;fname是目标函数名;x1和x2限定自变量的取值范围;fminsearch函数用于求多变量函数的极小值点,x1和x2限定自变量的取值范围;2.3.4函数极值MATLAB提供了基于单纯形算法求【例2-26】求f(x)=x3-2x-5在[0,5]内的极小值点。>>fx=@(x)x.^3-2*x-5>>x=fminbnd(fx,0,5)%回车键x=0.8165【例2-26】求f(x)=x3-2x-5在[0,5]内的极小2.4数据插值与曲线的拟合在解决实际问题的生产(或工程)实践和科学实验过程中,通常需要通过研究某些变量之间的函数关系来帮助我们认识事物的内在规律和本质属性,而这些变量之间的未知函数关系又常常隐含在从试验、观测得到的一组数据之中。因此,能否根据一组试验观测数据找到变量之间相对准确的函数关系就成为解决实际问题的关键。此类数据处理方法有函数插值和数据拟合。2.4数据插值与曲线的拟合在解决实际问题的生产(或工程)2.4.1函数插值1、一维插值一维插值问题的数学描述为:已知某一函数g(x)(g(x)的解析表达式可能十分复杂,也可以是未知的)在区间[a,b]上n个互异点xj处的函数值yj,j=0,1,…,n,还知道g(x)在[a,b]上有若干阶导数,如何求出g(x)在[a,b]上任一点x的近似值。y=interp1(x0,y0,x,'method')其中method指定插值的方法,默认为线性插值。其值可为:'nearest'最近项插值、'linear'线性插值、'spline'立方样条插值,'cubic'立方插值.所有的插值方法要求x0是单调的。当x0为等距时可以用快速插值法,使用快速插值法的格式为'*nearest'、'*linear'、'*spline'、'*cubic'。2.4.1函数插值1、一维插值【例2-27】实现一维插值。>>x=0:10;>>y=sin(x);>>xi=0:.25:10;%xi为插值点>>yi=interp1(x,y,xi);>>plot(x,y,'o',xi,yi)MATLAB显示结果如图2.2所示。【例2-27】实现一维插值。2.二维插值二维插值问题的数学描述为:已知二元函数g(x,y)在某矩形区域R[a,b]×[c,d]上互异节点(xi,yj)的函数值zij,如何求出在R上任一点(x,y)处的函数值g(x,y)的近似值。z=interp2(x0,y0,z0,x,y,'method')其中x0,y0分别为m维和n维向量,表示节点,z0为n×m维矩阵,表示节点值,x,y为一维数组,表示插值点,x与y应是方向不同的向量,即一个是行向量,另一个是列向量,z为矩阵,表示得到的插值,'method'的用法同上面的一维插值。2.二维插值2.4.2曲线拟合曲线拟合问题的数学描述是,已知一组(二维)数据(xi,yi),i=1,2,…,n(即平面上的n个点(xi,yi),i=1,2,…,n),

xi互不相同。寻求一个函数(曲线)y=f(x),使f(x)在某种准则下与所有数据点最为接近,即曲线拟合得最好。表3.5给出常用曲线拟合和插值函数。在MATLAB中,函数polyfit求解最小二乘曲线拟合问题。polyfit(x0,y0,m)其中输入参数x0,y0为要拟合的数据,m为拟合多项式的次数,输出参数a为拟合多项式y=amxm+…+a1x+a0系数a=[am,…,a1,a0]。多项式在x处的值y可用polyval函数计算。2.4.2曲线拟合曲线拟合问题的数学描述是,已知一组(二维【例2-28】某乡镇企业1990-1996年的生产利润如下表:年份1990199119921993199419951996利润(万元)70122144152174196202试预测1997年和1998年的利润。作已知数据的的散点图,>>x0=[1990199119921993199419951996];>>y0=[70122144152174196202];>>plot(x0,y0,'*')【例2-28】某乡镇企业1990-1996年的生产利润如下表确定拟合函数发现该乡镇企业的年生产利润几乎直线上升。因此,我们可以用y=ax+b作为拟合函数来预测该乡镇企业未来的年利润。编写程序如下:>>x0=[1990199119921993199419951996];>>y0=[70122144152174196202];>>a=polyfit(x0,y0,1)>>y97=polyval(a,1997)>>y98=polyval(a,1998)求得a=20,b=-40705,1997年的生产利润y97=233.4286,1998年的生产利润y98=253.9286。确定拟合函数表2.5常用曲线拟合和插值函数曲线拟合和插值函数polyfit(x,y,n)对描述n阶多项式y=f(x)的数据进行最小二乘曲线拟合interp1(x,y,xo)1维线性插值interp1(x,y,xo,'spline')1维3次样条插值interp1(x,y,xo,'cubic)1维3次插值interp2(x,y,Z,xi,yi)2维线性插值interp2(x,y,Z,xi,yi,'cubic')2维3次插值interp2(x,y,Z,xi,yi,'nearest')2维最近邻插值表2.5常用曲线拟合和插值函数曲线拟合和插值知识补充MATLAB标量、向量、矩阵与数组标量、向量、矩阵和数组是MATLAB运算中涉及的一组基本运算量。它们各自的特点及相互间的关系可以描述如下:(1)数组:一维数组:数组元素按一维线性方式组织在一起。其数学原型是向量。二维数组:数组元素分行、列排成一个二维平面表格。其数学原型是矩阵。三维数组:数组元素在排成二维数组的基础上,再将多个行、列数分别相同的二维数组叠成一本立体表格。四维数组:可视为以三维数组为数据元素的向量。依此类推下去,便有了多维数组的概念。在MATLAB中,数组的用法与一般高级语言不同,它不借助于循环,而是直接采用运算符,有自己独立的运算符和运算法则。知识补充MATLAB标量、向量、矩阵与数组(2)矩阵是一个数学概念,一般高级语言并未引入将其作为基本的运算量,但MATLAB是个例外。一般高级语言要完成矩阵的四则运算必须借助于循环结构。而MATLAB将矩阵引入作为基本运算量后,不仅实现了矩阵的简单加减乘除运算,而且许多与矩阵相关的其他运算也因此大大简化了。(3)向量是一个数学量,一般高级语言中也未引入,它可视为矩阵的特例。从MATLAB的工作空间窗口可以查看到:一个n维的行向量是一个1×n阶的矩阵,而列向量则当成n×1阶的矩阵。(4)标量的提法也是一个数学概念,可将其视为一般高级语言的简单变量来处理,又可把它当成1×1阶的矩阵,这一看法与矩阵作为MATLAB的基本运算量是一致的。(5)在MATLAB中,二维数组和矩阵其实是数据结构形式相同的两种运算量。二维数组和矩阵的表示、建立、存储根本没有区别,区别只在它们的运算符和运算法则不同。(6)数组的维和向量的维是两个完全不同的概念。数组的维是从数组元素排列后所形成的空间结构去定义的:线性结构是一维,平面结构是二维,立体结构是三维,当然还有四维以至多维。向量的维相当于一维数组中的元素个数。(2)矩阵是一个数学概念,一般高级语言并未引入将其作为基本习题1.设A=[12;34],B=[56;78],求A*B,A.*B,A/B,A./B及A.\B2.求矩阵A=[123;045;001]的稀疏矩阵表示。3.求下列方程组的解(只列出输入的语句)。2x1+x2-5x3+x4=8x1-3x3-6x4=92x1-x3+2x4=-5x1+4x2-7x3+6x4=04.使用LU分解求解方程组(只列出输入的语句)。x+7y-9z=122x-y+4z=16x+y-7z=16习题1.设A=[12;34],B=[56;78],求

MATLAB应用相当广泛的一个领域是解决数值计算问题。这是由于MATLAB对处理数组具有非凡的能力,使其成为许多科学与工程应用中的一个有力的工具。本章主要介绍矩阵的创建、运算以及如何运用MATLAB解决线性代数中的相关问题。【学习目标】能够创建矩阵,并熟练掌握矩阵的各种运算法则掌握稀疏矩阵的基本操作。学会运用MATLAB解决线性代数的相关问题。掌握如何运用MATLAB实现数据的插值、曲线的拟合和零极点的求解。MATLAB应用相当广泛的一个领域是解决数值计算问题。这是2.1矩阵及其运算MATLAB最基本、最重要的功能就是进行矩阵运算。所有的数值功能都是以矩阵为基本单位实现的。2.1矩阵及其运算MATLAB最基本、最重要的功能就是进行2.1.1矩阵生成1.直接生成矩阵的生成可以通过在方括号[]中输入元素实现,不同行之间要用分号隔开,不同列用空格分开。【例2-1】生成一个2×3矩阵。>>a=[123;456]a=123456可以用冒号快速建立矩阵,步长在默认的情况下为1,也可以自定义步长。>>a=[1:3;4:6]a=1234562.1.1矩阵生成1.直接生成2.函数生成MATLAB中提供了特殊函数可以生成特殊矩阵。【例2-2】生成一个2×3全零矩阵,一个3×3单位矩阵。>>a=zeros(2,3)%生成2×3全零阵a=000000>>a=eye(3,3)%生成3×3单位阵a=100010001

2.函数生成常用的特殊矩阵列在表2.1当中。表2.1常用的特殊矩阵函数功能函数命令zeros生成全0矩阵compan生成多项式的友矩阵eye生成单位矩阵hadamard生成哈达玛矩阵(由1和-1构成的正交矩阵)ones生成全1阵vander生成范德蒙矩阵rand生成均匀分布随机矩阵hilbHilbert矩阵(沿主对角线对称)randn生成正态分布随机矩阵invhilb逆Hilbert矩阵triltriu生成上三角或下三角矩阵magicMagic矩阵diag生成对角矩阵pascalPascal矩阵wilkinson生成威尔金森矩阵toeplitz托普利兹矩阵常用的特殊矩阵列在表2.1当中。函数功能函数命令zero2.1.2矩阵连接矩阵连接,是联合一个或多个矩阵形成一个新矩阵。方括号[]就可以作为矩阵连接操作符。表达式A=[BC]就是水平连接矩阵B和C;A=[B;C]就是垂直连接矩阵B和C连接矩阵也可以用函数形成一个新矩阵,如cat函数。cat函数调用格式:1)C=cat(dim,A,B)Dim指链接方向。Dim的可选值:1,垂直方向;2,水平方向;3,生成三维数组。2)C=cat(dim,A1,A2,…)可以实现连接多个矩阵。2.1.2矩阵连接矩阵连接,是联合一个或多个矩阵形成一【例2-3】把矩阵A,B分别在垂直方向,水平方向连接,A=[123],B=[456]。>>C1=cat(1,A,B)%垂直方向连接C1=123456>>C2=cat(2,A,B)%水平方向连接C2=123456【例2-3】把矩阵A,B分别在垂直方向,水平方向连接,A=[表2.2列出了常用的连接矩阵函数。表2.2连接矩阵函数函数功能函数功能cat连接矩阵remat复制一个矩阵到另一个矩阵horzcat水平连接多个矩阵blkdiag对角连接多个矩阵vertcat垂直连接多个矩阵表2.2列出了常用的连接矩阵函数。函数功能函数功能cat连接2.1.3矩阵元素的下标引用及操作1.矩阵下标在MATLAB中,矩阵元素的引用可以通过下标表示,通常有如下规则:1)用两个下标来表示:在矩阵A中,第i行j列的元素用A(i,j)来表示。2)用一个下标来表示:对于矩阵,由于MATLAB的基本运算都是对列操作的,矩阵认为是按列优先排列的一个长的列向量,从而可用单下标引用。2.1.3矩阵元素的下标引用及操作1.矩阵下标【例2-4】提取矩阵的元素。>>A=[123;456;789]A=123456789可以用A(m,n)选出第m行n列的元素。>>A(2,3)ans=6也可以用一个下标选出元素。>>A(8)ans=6【例2-4】提取矩阵的元素。2.矩阵的抽取用下标可以从大矩阵里面抽取某些元素组成小的矩阵,并使用()运算符。【例2-5】提取矩阵A的前2行为一个新矩阵B。>>B=A(1:2,:)%B=A([12],:)

B=1234562.矩阵的抽取3.删除矩阵的行和列我们把空的中括号[]称为空矩阵,即矩阵大小为0×0。可以通过把矩阵的行或列赋值为空矩阵来删除某行或某列。【例2-6】删除上例中A的第1,2列。

>>A(:,[12])=[]A=369

在MATLAB里不能用双下标来删除矩阵的某个元素,例如X(1,2)=[]将给出错误信息。但可以用单下标来删除矩阵的某个或某些元素,MATLAB删除这些元素后,将剩下的元素按列编成一个长的行向量。3.删除矩阵的行和列4.reshape函数实现改变矩阵大小reshape函数可以实现矩阵行列大小的变化,但变化前矩阵行列值的乘积和变化后的行列值的乘积不变。reshape(A,M,N)命令将矩阵A的所有元素分配到一个M×N的新的矩阵,当矩阵A的元素个数不是M×N时,将返回一个错误。reshape(A,M,N,P,…)命令返回由矩阵A的元素组成的M×N×P….多维的矩阵,如果M×N×P….与A的元素个数不一样时将返回错误。reshape(A,[M,N,P,…])命令与reshape(A,M,N,P,…)命令的作用一样。4.reshape函数实现改变矩阵大小【例2-7】把2行3列矩阵A变成变成1行6列的矩阵B。>>B=reshape(A,1,6)B=142536【例2-7】把2行3列矩阵A变成变成1行6列的矩阵B。2.1.4矩阵运算1.矩阵的加、减矩阵的加减运算使用+、-运算符,能够相加减的矩阵需满足以下两个条件之一:1)类型相同,即行数相等,且列数相等。2)其中一个为标量,此时的加减运算结果等于矩阵中每一个元素都和标量做加减运算。【例2-8】求矩阵A与B的和,A=[123],B=[236]。>>A+Bans=3592.1.4矩阵运算1.矩阵的加、减2.矩阵的乘积矩阵的乘积运算使用*运算符,而且相乘的矩阵必须满足维数条件。如果A是一个m×p矩阵,而B是p×n矩阵,它们可以相乘产生m×n矩阵。【例2-9】求例2-8中矩阵A与B的转置矩阵的乘积。>>A*B'ans=26在MATLAB里,单引号表示复共轭转置,一个点加单引号“.′”表示普通转置,即沿主对角线左上与右下相对元素对调。>>B'ans=2362.矩阵的乘积3、矩阵的除法MATLAB定义了矩阵的左除及右除。“\”运算符号表示两个矩阵的左除,“/”表示两个矩阵的右除。A\B即由Gauss消去法来获得线性方程AX=B的解X,即X=A-1B。矩阵的右除:MATLAB用“/”表示两个矩阵的右除。X*A=B的解是X=B/A,对于非奇异方阵A,B/A等效为BA-1。【例2-10】求矩阵a与b的左除和右除。>>c=a\b%矩阵左除,相当于inv(a)*bc=0.33330.6000-0.2000-0.6667-0.40000.80001.00000.40000.2000>>d=a/b%矩阵右除,相当于a*inv(b)d=1.33331.3333-1.00000-0.50001.50001.66670.1667-0.50003、矩阵的除法【例2-10】求矩阵a与b的左除和右除。表2.3给出了可以获得有关矩阵的形状与大小信息的函数。表2.3取得矩阵相关信息的函数函数说明函数说明length返回矩阵最长的那维长度numel返回矩阵的元素数ndims返回矩阵的维数(如二维、三维)size返回矩阵每一维的长度(2×3,3×3

)表2.3给出了可以获得有关矩阵的形状与大小信息的函数。函数说4.矩阵的乘方运算和开方运算MATLAB中矩阵的乘方可以由符号“^”实现,而矩阵的开方则由sqrtm函数实现。【例2-11】求如下矩阵A的3次方。>>A^3ans=4685766841062130515481656203424124.矩阵的乘方运算和开方运算如果想实现矩阵中每个元素都进行3次方,则可用“.^”实现,在运算符前面加“.”后就表示是对矩阵的元素操作。>>A.^3ans=182764125216343512729【例2-12】求例2-11中矩阵A的开方。>>sqrtm(A)%sqrtm(A)相当于A^0.5ans=0.4498+0.7623i0.5526+0.2068i0.6555-0.3487i1.0185+0.0842i1.2515+0.0228i1.4844-0.0385i1.5873-0.5940i1.9503-0.1611i2.3134+0.2717i其实矩阵的开方运算和乘方运算互为逆运算。如果想实现矩阵中每个元素都进行3次方,则可用“.^”实现,在5.矩阵的指数和对数运算指数函数和对数函数是非常重要的两个函数,所以MATLAB提供了两个专门的函数expm和logm来实现矩阵的指数运算和对数运算。【例2-13】求矩阵的指数运算和对数运算>>A=rand(3)A=0.95010.48600.45650.23110.89130.01850.60680.76210.82145.矩阵的指数和对数运算>>expm(A)%对A矩阵的每个元素求以e为底的指数ans=3.12501.74531.19930.63602.63580.17961.80102.29812.6663>>logm(A)%对A矩阵的每个元素求以e为底的对数ans=-0.29770.33990.60440.2874-0.1588-0.06040.66960.8173-0.3901>>expm(A)%对A矩阵的每个元素求以e为底的指数6.矩阵的数组运算运算中,往往需要在矩阵之间进行对应元素的运算,这就是矩阵的数组运算。矩阵的数组运算与前面运算区别主要放映在乘和除两种运算中。1.乘法矩阵的数组运算A.*B(称为数乘)2.除法矩阵的数组运算A./B(称为数除)练习已知A=[135;246;789];B=[121;232;343]比较A*B和A.*B以及A/B和A./B的区别6.矩阵的数组运算2.2稀疏型矩阵如果在矩阵中,多数的元素并没有值,称此矩阵为稀疏矩阵(SparseMatrix),由于矩阵在方程中常使用二维阵列表示,二维阵列的大小与使用的内存空间成正比,如果多数的元素没有值,则会造成内存空间的浪费,为此,必须设计稀疏矩阵的阵列储存方式,利用较少的内存空间储存完整的矩阵信息。2.2稀疏型矩阵如果在矩阵中,多数的元素并没有值,称此矩2.2.1稀疏型矩阵生成在MATLAB中,用sparse函数来创建一个稀疏矩阵。sparse(A)由非零元素和下标建立稀疏矩阵A。如果A已是一个稀疏矩阵,则返回A本身。sparse(m,n)生成一个m×n的所有元素都是0的稀疏矩阵。【例2-14】把3阶的单位矩阵转换成稀疏矩阵。>>as=sparse(eye(3))%生成主对角线为1的稀疏矩阵。as=(1,1)1%第1行第1列的元素为1(2,2)1%第2行第2列的元素为1(3,3)1%第3行第3列的元素为12.2.1稀疏型矩阵生成在MATLAB中,用sparse2.2.2转换成满矩阵full(S)函数可以将稀疏矩阵S转换成一个满矩阵。【例2-15】将例2-14中的结果再转换成满矩阵。>>full(as)ans=1000100012.2.2转换成满矩阵2.2.3对非零元素进行操作nnz(A)函数可以求矩阵A中非零元素的个数,它既可求满矩阵也可求稀疏矩阵。spy(A)函数可以画出稀疏矩阵A中非零元素的分布。也可用在满矩阵中,在这种情况下,只给出非零元素的分布。spy(A,cstr,size)函数可以用指定的颜色cstr在size规定的范围内画出稀疏矩阵A中非零元素的分布。nonzeros(A)函数可以按照列的顺序找出矩阵A中非零的元素。2.2.3对非零元素进行操作nnz(A)函数可以求矩spones(A)函数可以把矩阵A中的非零元素全换为1。nzmax(A)函数可以给出为矩阵A中非零元素分配的内存数.不一定和nnz(A)得到的数相同。issparse(A)函数在矩阵A是稀疏矩阵的情况下返回1;否则返回0。spfun(fcn,A)函数可以用A中所有非零元素对函数fcn求值,如果函数不是对稀疏矩阵定义的,同样也可以求值。sprank(A)函数可以求稀疏矩阵A的结构秩。对于所有的矩阵来说,都有sprank(A)≥rank(A)。spones(A)函数可以把矩阵A中的非零元素全换为1。【例2-16】求3阶单位矩阵的非零元素的个数,并画出非零元素的分布。>>nnz(eye(3))ans=3>>spy(eye(3))结果如图2.1所示。图2.1矩阵A的稀疏表示【例2-16】求3阶单位矩阵的非零元素的个数,并画出非零元素2.2.4稀疏矩阵的特例MATLAB中有四个基本稀疏矩阵,它们是单位矩阵,随机矩阵,对称随机矩阵和对角矩阵。下面介绍各自的生成函数。speye(n)函数可以生成n×n的单位稀疏矩阵。speye(m,n)函数可以生成m×n的单位稀疏矩阵。sprand(A)函数可以生成与A有相同结构的随机稀疏矩阵,且元素服从均匀分布。sprand(m,n,dens)函数可以生成一个m×n的服从均匀分布的随机稀疏矩阵,有dens×m×n个非零元素,0≤dens≤1.参数dens是非零元素的分布密度。sprandn(A)函数可以生成与A有相同结构的随机稀疏矩阵,且元素服从正态分布。2.2.4稀疏矩阵的特例MATLAB中有四个基本稀疏矩阵sprandsym(S)函数可以生成一个随机对称稀疏矩阵。它的下三角及主对角线部分与S的结构相同,矩阵元素服从正态分布。sprandsym(n,dens)函数可以生成一个n×n的随机对称稀疏矩阵.矩阵元素服从正态分布,分布密度为dens。[B,d]=spdiags(A)函数可以求出A中所有的对角元,对角元保存在矩阵B中,它们的下标保存在向量d中。spdiags(A,d)函数可以生成一个矩阵,这个矩阵包含有矩阵A中向量d规定的对角元。spdiags(B,d,A)函数可以生成矩阵A,用矩阵B中的列替换d定义的对角元。A=spdiags(B,d,m,n)用保存在由d定义的B中的对角元创建稀疏矩阵A。sprandsym(S)函数可以生成一个随机对称稀疏矩阵2.3MATLAB与线性代数2.3.1矩阵的特征参数1.求矩阵的行列式行列式对于查明一个方程组是否有解很有用。行列式是一个特殊的方形阵列,并且还可以简化为一个数。用户使用竖条来表示一个行列式,而使用方括号来代表矩阵。将一个2×2的行列式简化为一个数的规则如下所示:数学上通过人笔算来得出行列式的值,现在可以通过MATLAB利用det函数轻松算出行列式的值。2.3MATLAB与线性代数2.3.1矩阵的特征参【例2-17】计算如下的行列式:>>D=[345;123;369];>>det(D)ans=0【例2-17】计算如下的行列式:2.矩阵的秩矩阵的秩是矩阵行或列的数值线性独立的度量。如果一个向量线性独立于另外一些向量组,那意味着这一个向量不能写成它们的线性组合。rank函数可以实现求矩阵的秩。对于带有n个未知量的m个线性系统方程:Ax=b把b连结A上构成了增广矩阵:[Ab]当且仅当rank(A)=rank(Ab)时系统有解。如果秩等于n,那么系统有唯一解,但如果秩小于n,那么系统有无数解。如果秩条件吻合并且秩与未知数个数相等,解就可以用左除计算得到。下面举例具体说明以下。2.矩阵的秩【例2-18】求下列方程的解。>>A=[1-21;345;-217];b=[12;20;11];>>C=[Ab]%创建增广矩阵C=1-211234520-21711【例2-18】求下列方程的解。现在我们检查一下A的秩:>>rank(A)ans=3增广矩阵的秩为:>>rank(C)ans=3由于秩相同,因此解存在。这里有三个未知量,我们也注意到秩r满足r=n。这意味着解唯一。我们用左除求得解:>>x=A\bx=4.3958-2.22923.1458现在我们检查一下A的秩:3.矩阵的特征值和特征向量矩阵特征值与特征向量的定义:设A是n阶矩阵,如果存在数λ和n维非零向量x使关系式Ax=λx成立,那么,这样的数λ称为方阵A的特征值,非零向量x称为A的对应特征值λ的特征向量。eig函数可求得特征值和特征向量。格式为:[V,D]=eig(A)其中V为特征向量,D为特征值。3.矩阵的特征值和特征向量【例2-19】求下列矩阵的特征值和特征向量。>>A=[3-1;-13];>>[V,D]=eig(A)V=-0.7071-0.7071-0.70710.7071D=2004【例2-19】求下列矩阵的特征值和特征向量。4.矩阵的逆逆矩阵的定义:对于n阶矩阵A,如果有一个n阶矩阵B,使AB=BA=E,则说矩阵A是可逆的,并把矩阵B称为A的逆矩阵,E为单位矩阵。inv函数可以求矩阵的逆。【例2-20】求下列矩阵的逆。>>A=[104;783;238];>>inv(A)ans=0.73330.1600-0.4267-0.6667-0.00000.33330.0667-0.04000.10674.矩阵的逆【例2-21】利用矩阵的逆求解方程:2x+9y=53x–

4y=7>>A=[29;3-4];>>b=[5;7];>>x=inv(A)*bx=2.37140.0286通过手算矩阵逆是非常繁重的任务,使用MATLAB则变得非常容易。表2.4给出了可以获得矩阵特征参数的常用函数。【例2-21】利用矩阵的逆求解方程:表2.4矩阵特征参数函数函数说明函数说明det求矩阵的行列式norm求矩阵和向量范数eig求矩阵的特征值和特征向量rank求矩阵的秩inv求矩阵的逆trace求矩阵的迹(即矩阵主对角线上所有元素的和)函数说明函数说明det求矩阵的行列式norm求矩阵和向量范数2.3.2利用矩阵的分解求解线性方程组

矩阵分解是指根据一定的原理用某种算法将一个矩阵分解成若干个矩阵的乘积。常见的矩阵分解有LU分解、QR分解、Cholesky分解,以及Schur分解、Hessenberg分解、奇异分解等。2.3.2利用矩阵的分解求解线性方程组矩阵分解是指根1.LU分解矩阵的LU分解就是将一个矩阵表示为一个交换下三角矩阵和一个上三角矩阵的乘积形式。线性代数中已经证明,只要方阵A是非奇异的,LU分解总是可以进行的。MATLAB提供的lu函数用于对矩阵进行LU分解,其调用格式为:[L,U]=lu(X)产生一个上三角阵U和一个变换形式的下三角阵L(行交换),使之满足X=LU。注意,这里的矩阵X必须是方阵。[L,U,P]=lu(X)产生一个上三角阵U和一个下三角阵L以及一个置换矩阵P,使之满足PX=LU。当然矩阵X同样必须是方阵。实现LU分解后,线性方程组Ax=b的解x=U\(L\b)或x=U\(L\Pb),这样可以大大提高运算速度。1.LU分解【例2-22】用LU分解求解下列线性方程组。>>A=[3,1,-4,1;1,-3,0,2;0,2,1,-1;1,6,-1,-3];>>b=[12,-6,4,0]';>>[L,U]=lu(A);>>x=U\(L\b)x=-16.444420.6667-1.111136.2222【例2-22】用LU分解求解下列线性方程组。或采用LU分解的第2种格式,命令如下:>>[L,U,P]=lu(A);>>x=U\(L\P*b)x=-16.444420.6667-1.111136.2222或采用LU分解的第2种格式,命令如下:2.QR分解对矩阵X进行QR分解,就是把X分解为一个正交矩阵Q和一个上三角矩阵R的乘积形式。QR分解只能对方阵进行。MATLAB的函数qr可用于对矩阵进行QR分解,其调用格式为:[Q,R]=qr(X):产生一个一个正交矩阵Q和一个上三角矩阵R,使之满足X=QR。[Q,R,E]=qr(X):产生一个一个正交矩阵Q、一个上三角矩阵R以及一个置换矩阵E,使之满足XE=QR。实现QR分解后,线性方程组Ax=b的解x=R\(Q\b)或x=E(R\(Q\b))。2.QR分解【例2-23】用QR分解求解例2-22线性方程组。>>A=[3,1,-4,1;1,-3,0,2;0,2,1,-1;1,6,-1,-3];>>b=[12,-6,4,0]';>>[Q,R]=qr(A);x=R\(Q\b)x=-16.444420.6667-1.111136.2222或采用QR分解的第2种格式,命令如下:>>[Q,R,E]=qr(A)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论