第八章线性代数基础1.矩阵的重要运算1.1方阵的行列式方阵的行列式的值由det函数计算得出;【例1】计算矩阵A=[122;235;457]的行列式的值。A=[122;235;457];det(A)ans=4【例2】计算矩阵A=[ab;cd]的行列式的值。symsabcd;A=[ab;cd],det(A)A=[a,b][c,d]ans=a*d-b*c1.2矩阵的秩矩阵的秩由rank函数来计算。【例3】计算矩阵A=[122;235;457]的秩。rank(A)ans=31.3矩阵的维数和长度size()%求矩阵的维数(columns&rows)。length()%求矩阵的长度,矩阵的长度用向量(或columns)数定义。表示的是矩阵的列数和行数中的最大数。【例4】a=[10,20,42;34,20,4;198,34,6;102030];size(a)ans=43length(a)ans=4注意size(a)与length(a)两者之间的区别。1.4矩阵的迹矩阵的迹定义为该矩阵对角线上的各元素之和,也等于该矩阵的特征值之和。Matlab调用格式为:trace();【例5】求矩阵A=[1230;2203;3211]的迹A=[1230;2203;3211];trace(A)ans=321.5转置运算在MATLAB中,矩阵转置运算的表达式和线性代数一样,即对于矩阵A,其转置矩阵的MATLAB表达式为A’或transpose(A)。但应该注意,在MATLAB中,有几种类似于转置运算的矩阵元素变换运算是线性代数中没有的,他们是:fliplr(A)将A左右翻转;flipud(A)将A上下翻转;rot90(A)将A逆时针方向旋转90。【例6】求矩阵A=[1230;2203;3211]的转置矩阵A=[1230;2203;3211],B=A'A=123022033211B=123220230311transpose(A)ans=123220230311rot90(A)ans=3031122021231.6逆矩阵运算矩阵的逆运算是矩阵运算中很重要的一种运算。它在线性代数及计算方法中都有很多的论述,而在MATLAB中,众多的复杂理论只变成了一个简单的命令inv()。【例7】求矩阵A=[12;34]的逆矩阵。A=[12;34],invA=inv(A),A*invAA=1234invA=-2.00001.00001.5000-0.5000ans=1.000000.00001.0000从ans变量的结果可以看出,A的逆矩阵没有求错。在线性代数教材中,通常采用初等行变换的方式来求解矩阵的逆。这样的方法可以用以下方法可以实现:A=[12;34],n=size(A);A1=[A,eye(n)];A2=rref(A1);invA=A2(:,1+n(1):end)A=1234invA=-2.00001.00001.5000-0.5000【例8】求矩阵A=[ab;cd]的逆矩阵。symsabcd;A=[ab;cd];invA=inv(A)invA=[d/(a*d-b*c),-b/(a*d-b*c)][-c/(a*d-b*c),a/(a*d-b*c)]1.7广义逆矩阵由线代知识知道,如果矩阵奇异,则逆矩阵不存在,另外,长方形的矩阵有时也会涉及到求逆的问题,这样就需要定义一种新的“逆矩阵”。对于矩阵A,如果存在一个矩阵N,满足ANA=A,则N矩阵称为A的广义逆矩阵,记作AN,如果A是一个n×m的长方形矩阵,则N为m×n阶的矩阵。满足这样的广义逆矩阵有无穷多个。可以证明,对于一个给定的矩阵A,存在一个唯一的矩阵M使得下面的3个条件同时成立:1)AMA=A2)MAM=M3)AM与MA均为对称矩阵这样的矩阵M称为矩阵A的Moore-Penrose广义逆矩阵,记作AM。MATLAB提供了求取矩阵Moore-Penrose广义逆矩阵的函数pinv(),其格式为:M=pinv(A)%按默认精度求取Moore-Penrose广义逆矩阵M=pinv(A,e)%按指定精度e求取Moore-Penrose广义逆矩阵其中,e为判0用误差限,如果省略此参数,则判0用误差限选用机器的精度eps.如果A是非奇异方阵,则该函数得出的结果就是矩阵的逆矩阵,但这样求解的速度将明显慢于函数inv().【例9】求奇异矩阵A=[12;36]的广义逆矩阵pinv(A);M=pinv(A),A*M*A,M*A*M,A*M,M*AM=0.02000.06000.04000.1200ans=1.00002.00003.00006.0000ans=0.02000.06000.04000.1200ans=0.10000.30000.30000.9000ans=0.20000.40000.40000.8000从结果可以看出,所求的广义逆矩阵满足以上的三个条件。【例10】求矩阵A=[12;34]的广义逆矩阵。A=[12;34];invA=pinv(A)invA=-2.00001.00001.5000-0.50001.8伴随矩阵Matlab中没有直接求矩阵的伴随矩阵的函数,引入伴随矩阵的概念,实际上是为了求逆阵,一般数学软件都有求逆阵的函数。如果A可逆,则A*=|A|A^(-1),伴随矩阵是容易求得的;【例11】求矩阵A=[101;212;046]的伴随矩阵。A=[101;212;046],bsjz=det(A)*inv(A)A=101212046bsjz=-24-1-12608-41下面是自编的函数bansui(),可以直接求得伴随矩阵,但注意一定要将该函数保存在搜索路径之下。functionB=bansui(A)ce=poly(eig(A));cesize=max(size(ce));p=[0ce(1:(cesize-1))];s=(-1)^(max(size(A))+1);B=s*polyvalm(p,A);【例12】求矩阵A=[101;212;046]的伴随矩阵A=[101;212;046];bsjz=bansui(A)bsjz=-2.00004.0000-1.0000-12.00006.000008.0000-4.00001.0000det(A)ans=6A*bsjzans=6.000000.00000.00006.00000.000000.00006.0000从上面结果可以看出,A*bsjz=det(A)*E【例13】求奇异矩阵A=[12;36]的伴随矩阵A=[12;36];bsjz=bansui(A)bsjz=6-2-312.线性方程组求解我们将线性方程的求解分为两类:一类是方程组求唯一解或求特解,另一类是方程组求无穷解即通解。可以通过系数矩阵的秩来判断:若系数矩阵的秩和增广矩阵的秩相等且等于n(n为方程组中未知变量的个数),则有唯一解;若系数矩阵的秩和增广矩阵的秩相等且rn,则有无穷解;线性方程组的无穷解=对应齐次方程组的通解+非齐次方程组的一个特解;其特解的求法属于解的第一类问题,通解部分属第二类问题。2.1求线性方程组的唯一解或特解(第一类问题)利用矩阵除法求线性方程组的特解(或一个解)方程:AX=b解法1:X=A\b【例14】求方程组的解1x5x0x6x5x0x6x5x0x6x5x1x6x55454343232121解:A=[5600015600015600015600015];B=[10001]';R_A=rank(A)%求秩X=A\B%求解或X=inv(A)*B运行后结果如下R_A=5X=2.2662-1.72181.0571-0.59400.3188这就是方程组的解。解法2.用函数rref求解:C=[A,B]%由系数矩阵和常数列构成增广矩阵CR=rref(C)%将C化成行最简行R=1.000000002.266201.0000000-1.7218001.0000001.05710001.00000-0.594000001.00000.3188则R的最后一列元素就是所求之解。【例15】求方程组0x8x9x5x4x4x3xx31xx3xx432143214321的一个特解。解:A=[11-3-1;3-1-34;15-9-8];B=[140]';X=A\B%由于系数矩阵不满秩,该解法可能存在误差。X=[00-0.53330.6000]’(一个特解近似值)。此时,不能采用如下命令:x=inv(A)*B,因为inv要求矩阵为方阵。而用命令:x=pinv(A)*Bx=[0.3504-0.0916-0.38810.4232],可用A*x验算注:如果矩阵A不是一个方阵,或者A是一个非满秩的方阵时,A没有逆矩阵,但可以找到一个与A的转置同型的矩阵B,使得A*B*A=A,B*A*B=B,此时称B为A的伪逆,也称广义逆矩阵。使用:pinv(A)若用rref求解,则比较精确:A=[11-3-1;3-1-34;15-9-8];B=[140]';C=[A,B];%构成增广矩阵R=rref(C)R=1.00000-1.50000.75001.250001.0000-1.5000-1.7500-0.250000000由此得解向量X=[1.2500–0.250000]’(一个特解)。2.2求线性齐次方程组的通解在Matlab中,函数null[nʌl]用来求解零空间,即满足A·X=0的解空间,实际上是求出解空间的一组基(基础解系)。对齐次线性方程组Ax=0;格式z=null(A)%z的列向量为方程组的正交规范基,满足IZZ。z=null(A,’r’)%z的列向量是方程AX=0的有理基如果A为数值矩阵,调用null(A,’r’);或调用null(A)如果A为符号矩阵,只能调用null(A)【例16】求解方程组的通解:03030432143214321xxxxxxxxxxxx解:A=[111-1;1-11-3;1311];formatrat%指定有理式格式输出B=null(A,'r')%求解空间的有理基运行后显示结果如下:B=-120-11001即方程组的通解为:TTkk)1,0,1,2()0,1,0,1(21若调用:c=null(A),则应:formatshortc=null(A)得:c=-0.50000.7071-0.1667-0.47140.83330.23570.16670.4714或通过行最简型得到基:B=rref(A)B=101-2010100002.3求非齐次线性方程组的通解非齐次线性方程组需要先判断方程组是否有解,若有解,再去求通解。因此,步骤为:第一步:判断AX=b是否有解,若有解则进行第二步第二步:求AX=b的一个特解第三步:求AX=0的通解第四步:AX=b的通解=AX=0的通解+AX=b的一个特解。【例17】求方程组的解0674822314321432432431xxxxxxxxxxxxx解:A=[101-1;0113;0211;14-76];B=[1-2-80]';R_A=rank(A)%求秩X=A\B%求解或X=inv(A)*B回车可得:R_A=4X=3.0000-4.0000-1.00001.0000或采用简化行阶梯形方法:C=[A,B];R=rref(C)R=100030100-40010-100011则R的最后一列元素就是所求之解。【例18】求解方程组的通解:0x8x9x5x4x4x3xx31xx3xx432143214321解法一:在Matlab编辑器中建立M文件如下:A=[11-3-1;3-1-34;15-9-8];b=[140]';B=[Ab];n=4;R_A=rank(A)R_B=rank(B)formatratifR_A==R_B&R_