matlab数值计算第二次.ppt
第二章 MATLAB数值计算(第二讲),本章学习目标 掌握生成特殊矩阵的方法。掌握矩阵分析的方法。掌握求解线性方程组的各种方法。了解矩阵的稀疏存储方式。掌握数据统计和分析的方法。掌握多项式常用运算。,2.3 线性方程组求解,2.3.1 矩阵求逆及线性代数方程组求解1矩阵求逆 inv(A)函数用于计算方阵的逆矩阵。【例.8】求方阵A的逆矩阵并赋值给B,且验证与是互逆的。A=1-1 1;5-4 3;2 1 1;B=inv(A)B=-1.4000 0.4000 0.2000 0.2000-0.2000 0.4000 2.6000-0.6000 0.2000,2.3 线性方程组求解,A*Bans=1.0000 0.0000 0.0000-0.0000 1.0000 0.0000-0.0000 0.0000 1.0000 B*Aans=1.0000 0.0000-0.0000-0.0000 1.0000 0.0000 0.0000-0.0000 1.0000,2.3 线性方程组求解,2利用矩阵求逆方法解线性方程组【例.】利用矩阵求逆方法解线性方程组A=1,-2,3;3,-1,5;2,1,5;b=1;2;3;x=inv(A)*bx=-0.3333 0.3333 0.6667,2.3 线性方程组求解,利用左除运算符求解线性方程组 对于线性方程组Ax=b,可以利用左除运算符“”求解:x=Ab【例2.10】用左除运算符求解下列相同系数矩阵的两个线性代数方程组的解。,2.3 线性方程组求解,解法1:分别解线性方程组。A=1,-1,1;5,-4,3;2,1,1;b1=2;-3;1;b2=3;4;-5;x=Ab1x=-3.8000 1.4000 7.2000y=Ab2y=-3.6000-2.2000 4.4000,解法2:将两个线性方程组连在一起求解。A=1,-1,1;5,4,3;2,1,1;b=2,3;-3,4;1,-5;xy=Abxy=-3.8000-3.6000 1.4000-2.2000 7.2000 4.4000,2.4 矩阵分解,矩阵分解是指根据一定的原理用某种算法将一个矩阵分解成若干个矩阵的乘积。常见的矩阵分解有LU分解、QR分解、Cholesky分解以及Schur分解、Hessenberg分解、奇异分解等。2.4.1 矩阵的LU分解 矩阵的LU分解又称Gauss消去分解或三角分解,就是将一个方阵表示为一个行交换下三角矩阵和一个上三角矩阵的乘积形式。方阵A是非奇异的,LU分解总是可以进行的。LU分解主要用于简化一个大矩阵的行列式值的计算过程、求反矩阵和求解联立方程组。,2.4 矩阵分解,MATLAB提供的lu函数用于对矩阵进行LU分解,其调用格式如下。L,U=lu(X):产生一个上三角阵U和一个变换形式的下三角阵L(行交换),使之满足X=LU。注意,这里的矩阵X必须是方阵。L,U,P=lu(X):产生一个上三角阵U和一个下三角阵L以及一个置换矩阵P,使之满足PX=LU。当然矩阵X同样必须是方阵。当使用第1种格式时,矩阵L往往不是一个下三角矩阵,但可以通过行交换成为一个下三角阵。,2.4 矩阵分解,【例2.11】设,对矩阵进行分解。a=1-1 1;5-4 3;2 1 1;L,U=lu(a)L=0.2000-0.0769 1.0000 1.0000 0 0 0.4000 1.0000 0,2.矩阵分解,U=5.0000-4.0000 3.0000 0 2.6000-0.2000 0 0 0.3846 lu=L*Ulu=1-1 1 5-4 3 2 1 1,2.矩阵分解,L U P=lu(a)L=1.0000 0 0 0.4000 1.0000 0 0.2000-0.0769 1.0000U=5.0000-4.0000 3.0000 0 2.6000-0.2000 0 0 0.3846P=0 1 0 0 0 1 1 0 0,2.矩阵分解,lu=L*Ulu=5-4 3 2 1 1 1-1 1 inv(p)*L*u?Undefined function or variable p.inv(P)*L*Uans=1-1 1 5-4 3 2 1 1,2.矩阵分解,2.矩阵分解,clearA=2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4;b=13,-9,6,0;ticx2=Ab;%用左除运算求解tocticx1=inv(A)*b;%用求逆运算求解tocticL,U=lu(A);%LU分解x3=U(Lb);%用LU分解求解tocx1=x1x2=x2x3=x3,其中tic和toc两个函数配合使用用于计算程序的执行时间,tic记录当前时间,toc记录或显示使用tic函数以来所花费的时间。运行结果说明,x1、x2、x3的值相同,通过LU分解求值所花运行时间最少。,2.矩阵分解,.4.2 矩阵的QR分解对矩阵X进行QR分解,就是把X分解为一个正交矩阵Q和一个上三角矩阵R的乘积形式。MATLAB的函数qr可用于对矩阵进行QR分解,其调用格式如下。Q,R=qr(X):产生一个一个正交矩阵Q和一个上三角矩阵R,使之满足X=QR。Q,R,E=qr(X):产生一个一个正交矩阵Q、一个上三角矩阵R以及一个置换矩阵E,使之满足XE=QR。,2.矩阵分解,【.】设对矩阵进行分解。A=2,1,1,4;1,2,-1,2;1,-1,3,3;Q,R=qr(A),2.矩阵分解,Q=-0.8165 0-0.5774-0.4082-0.7071 0.5774-0.4082 0.7071 0.5774R=-2.4495-1.2247-1.6330-5.3072 0-2.1213 2.8284 0.7071 0 0 0.5774 0.5774 QR=Q*RQR=2.0000 1.0000 1.0000 4.0000 1.0000 2.0000-1.0000 2.0000 1.0000-1.0000 3.0000 3.0000,2.矩阵分解,Q,R,E=qr(A)Q=-0.7428-0.1980-0.6396-0.3714-0.6730 0.6396-0.5571 0.7126 0.4264R=-5.3852-2.0426-0.9285-2.4140 0 2.6130-2.2567-0.356 0 0 0.2132-0.2132E=0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0,2.矩阵分解,Q*R/E%验证A=Q*R*inv(E)ans=2.0000 1.0000 1.0000 4.0000 1.0000 2.0000-1.0000 2.0000 1.0000-1.0000 3.0000 3.0000实现分解后,线性方程组的解()或()。,2.矩阵分解,.4.3 矩阵的Cholesky分解如果矩阵X是对称正定的,则Cholesky分解将矩阵X分解成一个下三角矩阵和上三角矩阵的乘积。设上三角矩阵为R,则下三角矩阵为其转置,即X=RR。MATLAB函数chol(X)用于对矩阵X进行Cholesky分解,其调用格式如下。R=chol(X):产生一个上三角阵R,使RR=X。若X为非对称正定,则输出一个出错信息。R,p=chol(X):这个命令格式将不输出出错信息。当X为对称正定的,则p=0,R与上述格式得到的结果相同;否则p为一个正整数。如果X为满秩矩阵,则R为一个阶数为q=p1的上三角阵,且满足RR=X(1:q,1:q)。,2.矩阵分解,【例2.14】对矩阵进行分解。A=2,1,1;1,2,-1;1,-1,3;R=chol(A)R*R利用第2种格式对矩阵A进行Cholesky分解:R,p=chol(A),2.矩阵分解,A=2,1,1;1,2,-1;1,-1,3;R=chol(A)R=1.4142 0.7071 0.7071 0 1.2247-1.2247 0 0 1.0000 R*Rans=2.0000 1.0000 1.0000 1.0000 2.0000-1.0000 1.0000-1.0000 3.0000 R,p=chol(A)R=1.4142 0.7071 0.7071 0 1.2247-1.2247 0 0 1.0000p=0,2.4 矩阵的分解,【例2.15】b=3-2-0.9 2*eps;-2 4-1-eps;-eps/4 eps/2-1 0;-0.5-.5.1 1;b,p=chol(b)b=1.7321-1.1547 0 1.6330p=3,2.4 矩阵的分解,b=3-2-0.9 2*eps;-2 4-1-eps;-eps/4 eps/2-1 0;-0.5-.5.1 1;x=chol(b)?Error using=cholMatrix must be positive definite.,2.矩阵分解,2.4.4 矩阵的QZ分解 在MATLAB中,QZ分解可由函数qz来实现。qz函数常用的调用格式:AA,BB,Q,Z,V=qz(A,B):要求矩阵A,B是方阵。产生的矩阵AA,BB是上三角矩阵,Q,Z是正交矩阵,矩阵V是特征矢量矩阵。其中,满足Q*A*Z=与Q*B*ZBBAA,BB,Q,Z,V=qz(A,B,flag):对于方阵A,B的QZ分解取决于参数flag。参数flag可以取complex与real其中,complex表示复分解产生三角矩阵AA,real 表示实分解产生三角矩阵AA。,2.4 矩阵分解,【例2.15】a=1 2 0;2 5-1;4 10-1;x=1 3 4;2 6 5;3 2 4;b,c,e,z,v=qz(a,x)b=-0.1783-0.0000i-1.4551+0.4813i-3.0105+0.2715i 0 5.6957-1.6531i 10.1589-1.1010i 0 0 0.9081+0.2636ic=2.7199-7.4009+0.2393i-2.2295+1.2686i 0 6.9587 0.4560-1.1530i 0 0 1.1095 e=-0.5730-0.0018i-0.7935-0.0026i 0.2051+0.0007i 0.0758-0.0217i 0.1978+0.0143i 0.9769-0.0053i-0.8158+0.0013i 0.5753+0.0057i-0.0531+0.0255iz=0.8670-0.0028i 0.4652-0.0196i 0.1583-0.0804i-0.3824+0.0012i 0.4177-0.1304i 0.8099-0.0801i-0.3196+0.0010i 0.7624+0.1027i-0.5396-0.1223iv=0.9968-0.0032i 0.9510-0.0490i 0.0519-0.9481i-0.4397+0.0014i-0.1409-0.0406i 0.0400+0.1407i-0.3674+0.0012i 0.0671+0.0607i-0.0603-0.0671i,2.4 矩阵分解,2.4.5 矩阵的奇异值分解 在matlab中矩阵的奇异值分解由函数svd来实现,其调用格式为:b,c,d=svd(A)。例如:a=1 2 0;2 5-1;4 10-1;b c d=svd(a)b=-0.1799 0.5217-0.8340-0.4434-0.7998-0.4047-0.8781 0.2970 0.3752c=12.3171 0 0 0 0.5149 0 0 0 0.1577d=-0.3718 0.2136-0.9034-0.9221 0.0275 0.3860 0.1073 0.9765 0.1868,2.4 矩阵分解,2.4.6 矩阵的Schur分解 在matlab中,矩阵的Schur分解由函数schur函数来实现,其调用格式:b,c=schur(A),其中c为Schur矩阵。例如:a=1 2 0;2 5-1;4 10-1;b,c=schur(a)b=-0.2440-0.8797-0.4082-0.3333 0.4714-0.8165-0.9107 0.0632 0.4082c=3.7321-1.2247 11.5618 0 0.2679-1.3509 0 0 1.0000,本 堂 小 结,线性方程组求解(1)矩阵求逆(inv)及利用矩阵求逆方法解线性方程组;(2)利用左除运算符求解线性方程组矩阵分解(1)LU分解;(2)QR分解;(3)Cholesky分解;(4)Schur分解(5)矩阵的奇异值分解;(6)矩阵的QZ分解等,