用Matlab学习线性代数__行列式实验目的理解行列式的概念、行列式的性质与计算Matlab函数det实验内容前面的四个练习使用整数矩阵,并演示一些本章讨论的行列式的性质。
最后两个练习演示我们使用浮点运算计算行列式时出现的不同。
理论上将,行列式的值应告诉我们矩阵是否是奇异的。
然而,如果矩阵是奇异的,且计算其行列式采用有限位精度运算,那么由于舍入误差,计算出的行列式的值也许不是零。
一个计算得到的行列式的值很接近零,并不能说明矩阵是奇异的甚至是接近奇异的。
此外,一个接近奇异的矩阵,它的行列式值也可能不接近零。
1.用如下方法随机生成整数元素的5阶方阵:A=round(10*rand(5)) 和B=round(20*rand(5))-10用Matlab计算下列每对数。
在每种情况下比较第一个是否等于第二个。
(1)det(A) ==det(A T) (2)det(A+B) ;det(A)+det(B)(3)det(AB)==det(A)det(B) (4)det(A T B T) ==det(A T)det(B T)(5)det(A-1)==1/det(A) (6)det(AB-1)==det(A)/det(B)> A=round(10*rand(5));>> B=round(20*rand(5))-10;>> det(A)ans =5972>> det(A')ans5972>> det(A+B)ans =36495>> det(A)+det(B)ans =26384>> det(A*B)ans =4>> det(A)*det(B)ans =4>> det(A'*B')ans =4>> det(A')*det(B')ans =4>> det(inv(A))ans =0.00016745>> 1/det(A)ans =0.00016745>> det(A*inv(B))ans =0.29257>> det(A)/det(B)ans =0.29257>>2.n阶的幻方阵是否奇异?用Matlab计算n=3、4、5、…、10时的det(magic(n))。
看起来发生了什么?验证当n=24和25时,结论是否仍然成立。
【当n为奇数时,det(magic(n))不为0;当n为偶数时,det(magic(n))为0;】>> det(magic(3))ans =-360>> det(magic(4))ans =>> det(magic(5))ans =5070000>> det(magic(6))ans =>> det(magic(7))ans =-3.4805e+011>> det(magic(8))ans =>> det(magic(9))ans =7.5036e+016>> det(magic(10))ans =>> det(magic(24))ans =>> det(magic(25))ans =3.9506e+069>>3.令A=round(10*rand(6))。
下列每种情形下,用Matlab计算给出的另一个矩阵。
说明第二个矩阵和矩阵A之间的关系,并计算两个矩阵的行列式。
这些行列式之间有什么关联?(1)B=A;B(2,:)=A(1,:);B(1,:)=A(2,:); 【A与B行换了一次】(2)C=A;C(3,:)=4*A(3,:); 【B的第三行为A的四倍】(3)D=A;D(5,:)=A(5,:)+2*A(4,:) 【B的第五行等于A的第五行加上A的第四行的二倍】>> A=round(10*rand(6));>> B=A;B(2,:)=A(1,:);B(1,:)=A(2,:);>> det(A)ans =4636>> det(B)ans =-4636>> C=A;C(3,:)=4*A(3,:);>> det(C)ans =18544>> D=A;D(5,:)=A(5,:)+2*A(4,:);>> det(D)ans =4636>>4.我们可以通过如下方法随机生成一个全部元素为0和1的6阶方阵A:A=round(rand(6)(1)这些0-1矩阵奇异的百分比是多少?【61%】可以用Matlab命令估计这个百分比:y=zeros(1,100);然后生成100个测试矩阵,并且若第j个矩阵是奇异的,令y(j)=1,否则为0。
这可以通过Matlab中的for循环容易地实现。
循环如下:for j=1:100A=round(rand(6));y(j)=(det(A)==0);end为了确定生成了多少奇异矩阵,使用Matlab命令sum(y)。
生成的矩阵中,奇异矩阵的百分比是多少?>> A=round(rand(6));>> y=zeros(1,100);>> for j=1:100A=round(rand(6));y(j)=(det(A)==0);end>> yy =Columns 1 through 180 1 1 1 0 0 1 0 1 1 1 1 0 0 1 1 1 1Columns 19 through 360 1 1 1 0 0 1 0 0 0 0 1 0 0 1 1 1 1Columns 37 through 541 0 0 0 1 1 1 1 0 0 0 1 0 1 1 0 1 1Columns 55 through 721 1 1 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1Columns 73 through 901 1 0 0 1 1 1 1 0 1 1 1 0 0 0 0 0 0Columns 91 through 1001 1 0 1 1 0 1 1 0 0>> sum(y)ans =61>>(2)对任意正整数n,可以通过下面命令随机生成元素为从0—n的整数的矩阵A:A=floor((n+1)*rand(6))若n=3,采用这种方法生成的矩阵中奇异矩阵的百分比是多少?n=6呢?n=10呢?我们可以采用Matlab对这些问题进行估计。
对每种情况,生成100个矩阵,并确定其汇总多少矩阵是奇异的。
(n=3)>> A=floor(4*rand(6));>> y=zeros(1,100);>> for j=1:100 A=round(rand(6)); y(j)=(det(A)==0);end>> sum(y)ans =59(n=6)>> A=floor(7*rand(6));>> y=zeros(1,100);>> for j=1:100 A=round(rand(6)); y(j)=(det(A)==0);end>> sum(y)ans =55(n=10)>> A=floor(11*rand(6));>> y=zeros(1,100);>> for j=1:100 A=round(rand(6)); y(j)=(det(A)==0);end>> sum(y)ans =57>>5.若一个矩阵对舍入误差敏感,则计算得到的行列式将会与真实值有极大的不同。
作为这个问题的例子,令U=round(100*rand(10));U=triu(U,1)+0.1*eye(10)理论上,det(U)=det(U T)=10-10且det(UU T)=det(U)*det(U T)=10-20用Matlab计算det(U)、det(U’)和det(U*U’)。
计算结果和理论值是否相同?【不相同】>> U=round(100*rand(10));>> U=triu(U,1)+0.1*eye(10);>> det(U)ans =1e-010>> det(U')ans =1.8222e-006>> det(U*U')ans =1.0245e+0116.用Matlab构造矩阵A:A=vander(1:6);【>> A=vander(1:6)A =1 1 1 1 1 132 16 8 4 2 1243 81 27 9 3 11024 256 64 16 4 13125 625 125 25 5 17776 1296 216 36 6 1】A=A-diag(sum(A’))(1)由构造,A的每一行所有元素的和均为零。
为检测结论,令x=ones(6,1),并用Matlab计算乘积Ax。
矩阵A应为奇异的。
为什么?【diag(sum(A’)表示的是A 的每一行的元素的和值组成的对角阵】试说明理由。
用Matlab 函数det 和inv 计算det(A)和A -1。
哪一个Matlab 函数作为奇异的指示器更合理? >> A=vander(1:6);>> x=ones(6,1);>> A=A-diag(sum(A'));>> det(A)ans =10>> A*xans =>> inv(A')Warning: Matrix is close to singular or badly scaled.Results may be inaccurate. RCOND = 5.223485e-021.ans =9.8091e+015 9.8091e+015 9.8091e+015 9.8091e+015 9.8091e+015 9.8091e+0153.9591e+014 3.9591e+014 3.9591e+014 3.9591e+014 3.9591e+014 3.9591e+0144.1906e+013 4.1906e+013 4.1906e+013 4.1906e+013 4.1906e+013 4.1906e+0138.8054e+012 8.8054e+012 8.8054e+012 8.8054e+012 8.8054e+012 8.8054e+0122.7604e+012 2.7604e+012 2.7604e+012 2.7604e+012 2.7604e+012 2.7604e+012 1.0995e+012 1.0995e+012 1.0995e+012 1.0995e+012 1.0995e+012 1.0995e+012比较上述,inv(A')更合理(逆矩阵太大,相应近似||*A A 中的|A|趋近于0)>>(2)用Matlab 计算det(A T )。