用Matlab学习线性代数线性方程组与矩阵代数实验目的:熟悉线性方程组的解法和矩阵的基本运算及性质验证。
Matlab命令:本练习中用到的Matlab命令有:inv,floor,rand,tic,toc,rref,abs,max,round,sum,eye,triu,ones,zeros。
本练习引入的运算有:+,-,*,’,,\。
其中+和-表示通常标量及矩阵的加法和减法运算;*表示标量或矩阵的乘法;对所有元素为实数的矩阵,’运算对应于转置运算。
若A为一个n n⨯非奇异矩阵(det!=0)且B为一个n r⨯矩阵,则运算\A B等价于1-。
A B实验内容:1.用Matlab随机生成44⨯的矩阵A和B。
求下列指定的,,,C D G H,并确定那些矩阵是相等的。
你可以利用Matlab计算两个矩阵的差来测试两个矩阵是否相等。
(1)C=A*B,D=B*A,G=(A’*B’)’,H=(B’*A’)’C=H;D=G;(2)C=A’*B’,D=(A*B)’,G=B’*A’,H=(B*A)’C=H;D=G;(3)C=inv(A*B),D=inv(A)*inv(B),G=inv(B*A),H=inv(B)*inv(A)(4)C=inv((A*B)’),D=inv(A’*B’),G=inv(A’)*inv(B’),H=(inv(A)*inv(B))’(3)(4)中无相等的2.令n=200,并使用命令A=floor(10*rand(n));b=sum(A ’)’z=ones(n,1); 注释:(n 行一列全为1的矩阵)生成一个n n ⨯矩阵和两个n R 中的向量,它们的元素均为整数。
(因为矩阵和向量都很大,我们添加分号来控制输出。
(1) 方程组 Ax b =的真解应为z 。
为什么? 【A 中的每一行的元素之和正好等于对应b 的每一列,故z 为其一解,又det 不等于0,RA=RAb=n ,故z 为其解】试说明,可在Matlab 中利用”\”运算或计算1A -,然后用计算1A b -来求解。
比较这两种计算方法的速度和精度。
我们将使用Matlab 命令tic 和toc 来测量每一个计算过程消耗的时间。
只需要用下面的命令:tic,x=A\b ;toctic,y=inv(A)*b; toc哪一种方法更快? tic,x=A\b ;更快!为了比较这两种方法的精度,可以测量求得的解x 和y 与真解z 接近的程度。
利用下面的命令:max(abs(x-z))max(abs(y-z))哪种方法的到的解更精确?>> max(abs(x-z))= 4.0168e-013 更精确!>> max(abs(y-z)) = 6.1107e-013(2) 用n=500和n=1000替换(1)中的n 。
如(1)结果一样!3.令A=floor(10*rand(6))。
根据构造,矩阵A将有整数元。
将矩阵A的第六列更改,使得矩阵A为奇异的。
令B=A’,A(:,6)=-sum(B(1:5,:))’(1)设x=ones(6,1),并利用Matlab计算Ax。
为什么我们知道A必为奇异的?【因化简列,————>列成比例】试说明。
通过化为行最简形来判断A是奇异的。
(2)令B=x*[1:6],乘积AB应为零矩阵。
为什么?【因A的每一行的前五个元素之和等于第六个元素的相反数,且在A上的每一行的元素同乘以相同的数,则仍等于0】试说明。
用Matlab的*运算计算AB进行验证。
(3)令C=floor(10*rand(6))和D=B+C,尽管C D,但乘积AC和AD是相等的。
为什么?试说明。
计算A*C和A*D,并验证它们确实相等。
【此处B为令B=x*[1:6];A为A(:,6)=-sum(B(1:5,:))’】由于A*B=0;故AC=AD;A(B+C)=AB+AC;4.采用如下方式构造一个矩阵。
令B=eye(10)-triu(ones(10),1),参见最后附表二:为什么我们知道B必为非奇异的?【上三角矩阵的行列式的值等于对角线上的元素相乘】令C=inv(B)且x=C(:,10),现在用B(10,1)=-1/256将B进行微小改变。
利用Matlab计算乘积Bx。
由这个计算结果,你可以得出关于新矩阵B的什么结论?【化简此时B,得行最简式,RB=9<10,可以得出B的第10列(从1—9行)与x互为相反数,且都是2的指数幂数,且第十行为0,】它是否为奇异的?【是】试说明。
用Matlab计算它的行最简形。
5.生成一个矩阵A:A=floor(20*rand(6))并生成一个向量b:B=floor(20*rand(6,1))-10(1)因为A是随机生成的,我们可以认为它是非奇异的。
那么方程组Ax b=应有唯一解。
用运算“\”求解。
用Matlab计算[A b]的行最简形U。
比较U的最后一列和解x,结果是什么?【相等】在精确算术运算时,它们应当是相等的。
为什么?【行最简式中可写出对应元素的实际含义,对应处的未知元就等于最后的数】试说明。
为比较他们两个,计算差U(:,7)-x或用format long考虑它们。
(2)现在改变A,试它成为奇异的。
令A(:,3)=A(:,1:2)*[4 3]’【第一列乘以4加上第二列乘以3替换到第三列上】,利用Matlab计算rref([A b])。
方程组Ax b=有多少组解?【无解】试说明。
【RA<R[AB]】(3)令y=floor(20*rand(6,1))-10 且c=A*y,为什么我们知道方程组Ax=c必为相容?的?【x此时必有一解y,故为相容的】试说明。
计算[A c]的行最简形U。
方程组Ax b=有多少组解?【无穷多解】试说明。
【RA=RA c<6】(4) 由行最简形确定的自由变量应为3x 。
通过考察矩阵U 对应的方程组,可以求得30x =时所对应的解。
将这个解作为列向量w 输入Matlab 中。
为检验Aw c =,计算剩余向量c Aw -。
(5) 令(:,7)(6,1)U zeros =。
矩阵U 应对应于[]|0A 的行最简形。
用U 求自变量31x =时齐次线性方程组的解(手工计算),并将你的结果输入为向量Z 。
用A*Z 检验你的结论。
(6) 令3*v w z =+。
向量v 应为方程组Ax c =的解。
为什么?试说明。
用Matlab 计算剩余向量来验证v 为方程组的解。
在这个解中,自由变量3x 的取值是什么? 【3x =3】 如何使用向量w 和z 来求所有可能的方程组的解?【v=w+n*z,其中n 为任意实数】试说明。
6. 考虑下图:(1) 确定图的邻接矩阵A ,将其输入Matlab ;(2) 计算A 2并确定长度为2的路的条数【72】,其起止点分别为:【A^2+A中的数值之和,数字表示有几种路径,具体看程序】(3) 计算A 4、A 6、A 8并回答(2)中各种情况长度为4、【368】6、【2362】8、【15800】的路的条数。
试推测什么时候从顶点V i 到V j 没有长度为偶数 【即为0】 的路。
【i=1,j=6; i=2,j=5; i=3,j=6或8; i=4,j=7; i=5,j=8;i=6,j=1或3; i=7,j=4; i=8,j=3或6;】(4) 计算A 3、A 5、A 7并回答(2)中各情况长度为3、【154】5、【922】7【6098】的路的条数。
你由(3)得到的推测对长度为奇数的路是否成立?【不成立】,试说明【见程序】。
推测根据i+j+k 的奇偶性,是否存在长度为k 的路。
【若i+j+k 为偶数,不存在;相反,则存在】【路径见程序】(5) 如果我们在图中增加边{V3,V6},{V5,V8},新图的邻接矩阵B 可首先令B=A ,然后令B(3,6)=1, B(6,3)=1, B(5,8)=1, B(8,5)=1,对k=2,3,4,5计算B k 。
(4)中的推测在新的图形中是否还是成立的?【不成立】见程序】(6) 在图中增加{V 6,V 8},并构造得到的图的邻接矩阵C ,计算C 的幂次,并验证你在(4)中的推测对这个新图是否仍然成立。
【不成立】【见程序】V V 437.令A=magic(8),然后计算其行最简形。
使得首1对应于前三个变量123,,x x x ,且其余的五个变量均为自由的。
(1)令c=[1:8]’,通过计算矩阵[A c]的行最简形确定方程组Ax=c 是否相容。
方程组是相容的吗? 【不相容】 试说明。
【RA<RAc 】(2)令 b=[8 -8 -8 8 8 -8 -8 8]’;并考虑方程组Ax=b 。
该方程组应为相容的。
通过U=rref([A b])验证。
对五个自由变量的任一组取值,我们都应可以得到一组解。
事实上,令x 2=floor(10*rand(5,1)),若x 2表示方程组解的最后5个坐标,则我们由x 2求得x 1=(x1,x2,x3)’。
要这样做,只需要令U=rref([A b])。
U 的非零行对应于分块形式的线性方程组[]12x E U c x ⎡⎤=⎢⎥⎣⎦为解此方程组,令V=U(1:3,4:8),c=U(1:3,9)并利用Matlab ,根据x 2,c 和V 计算x 1。
令x=[x 1;x 2],验证x 是方程组的解。
8.令 B=[-1,-1;1,1]和A=[zeros(2),eye(2);eye(2),B] 验证B 2=0。
(1)用Matlab 计算A 2,A 4,A 6,A 8。
猜想用子矩阵E ,O 和B 如何表示分块形式的A 2k 。
用数学归纳法证明你的猜想对任何正整数k 都是成立的。
(2)用Matlab 计算A 3,A 5,A 7和A 9。
猜想用子矩阵E ,O 和B 如何表示分块形式的A 2k-1。
用数学归纳法证明你的猜想对任何正整数k 都是成立的。
9.(1) Matlab 命令A=floor(10*rand(6)),B=A ’*A将得到元素为整数的对称矩阵。
为什么?试说明。
【第i 行第j 列的数等于第i 列的数分别乘以第j 列的数之和;第j 行第i 列的数等于第j 列的数分别乘以第i 列的数之和,故为对称矩阵】用这种方法计算B 来验证结论,然后将B 划分成四个3x3的子矩阵。
在Matlab 中求子矩阵,令B11=B(1:3,1:3),B12=B(1:3,4:6)并用B 的第四行到第6行类似定义B21和B22。
(2)令 C=inv(B11)。
应有C T =C 和B21T =B12。
为什么?【对称阵的逆矩阵与该逆矩阵的转置是相等的,B12的第i 行的数等于B21的第i 列的数】 试说明。
用Matlab 运算符’计算转置,并验证结论。
然后,令G=B21*C 和 H=B22-B21*C*B21’利用Matlab 函数eye 和zeros 构造0110,0E B L D G E H ⎡⎤⎡⎤==⎢⎥⎢⎥⎣⎦⎣⎦ 计算W=L*D*L ’,并通过计算W-B 与B 进行比较。