1、用matlab实现矩阵的对角 对角阵在实际上的应用特别广泛,对角阵解决现实问题上很方便,通过对角矩阵可以最简单地处理物力问题,也可以解出线性方程组的解;最普遍的是可以直接知道相似矩阵的行列式值,秩,特征值等,所以可以说研究对角化问题是特别重要。对角化的最快,最方便的方法是利用matlab软件。 1 2 3 形式的矩阵为对角矩阵 一般 n (空白处为零)。 在相似变换下,方阵A的许多重要性质(如 行列式,秩,特征值等)保持不便,因
2、此我们可以通过相似变换将矩阵A化简,并利用化简后的矩阵来研究与矩阵有关的问题。 我们讨论的主要问题是:对于n阶方阵A,是否存在可逆方阵P,使P-1AP为对角矩阵。这就是矩阵的对角化问题。 2 0 0 -1 1 0 通过相似变换下简化为对角矩阵B= 0 1 0 -4 3 0 A= 矩阵 1 0 0 1 0 2 通过矩阵B可以直接知道矩阵的行列式,秩,特征值,对应方程组的解等重要性质。 但任何矩阵不一定可以对角化。一个矩阵是否可以对角化有如下的判断方法: 1)判断A是否
3、实对称矩阵,茹是一定可对角化,因为A是实对称矩阵,则有(1)A的全部特征值是实数。(2)A的不同特征值对应的特征向量正交。(3)A一定相似于对角矩阵,且存在正交矩阵T,使得T-1AT=TTAT=。的对角元素是A的特征值。 1 -1 2 -1 实对称矩阵A= -1 1 3 -2 是否可对角化?茹是将矩阵A对角 2 3 1 0 -1 -2 0 1 化。 运
4、用matlab程序来实现这个问题: 程序如下: A=[1 -1 2 -1;-1 1 3 -2;2 3 1 0;-1 -2 0 1]; [V,D]=eig(A) 运行结果: V= 0.4412 -0.2042 -0.8328 0.2647 0.6012 0.1266 0.4853 0.6221 -0.5683 0.4886 -0.2227 0.6234 0.3477 0.8388 -0.1462 -0.3927
5、 D= -3.7266 0 0 0 0 0.9416 0 0 0 0 1.9420 0 0 0 0 4.8430 程序说明: D 对角线上的元素为A的特征值,V为相对应的特征向量所构成的矩阵。可以看出特征值都是实数,每个特征值对应于一个特征向量,对应的特征向量是正交的,特征向量所构成的矩阵是正交阵。如果不用matlab软件的话实现这种(3阶以上的矩阵)问题是特别复杂及麻烦。 2)求A的特征值,若n个特征值互异,则A一定可对角化
6、 0 1 0 - 1 0 A= 0 0 1 因为 |A-E|= 0 - 1 = -(1+) -6 0 -6 -6 -11 -6- (2+)(3+)=0。所以特征值分别为1=-1,2=-2,3=-3; 用Matlab程序来实现: A=[0 1 0;0 0 1;-6 -11 -6]; [D]=eig(A) 运行结果: D=-1,-2,-3;
7、 结果一样,A有3个互不相同的特征值,故可对角化;这两种方法相互比较,用Matlab程序好计算这种问题。 3)求A的特征向量,若有n个线性无关的特征向量,则A可以对角化,否则不可以对角化。 0 1 1 -1 -1 A= 1 0 1 因为 |I-A| = -1 -1 =(-2)(+1)2 1 1 0 -1 -1 于是A的特征值为:1=2,2=-1 (二重),每个特征值
8、对应的特征向量为X1=(1 ,1,1)T, X2=(-1, 1,0)T, X3=(-1,0,1)T,这三个向量相互线性无关,故矩阵A可对角化。 程序如下: A=[0 1 1;1 0 1;1 1 0]; [V,D]=eig(A) V= 1.0000 -1.0000 -1.0000 1.0000 1.0000 0.0000 1.0000 0.0000 1.0000 D= 2.0000 0 0 0 -1.0000
9、 0 0 0 -1.0000 4)方阵A可对角化的充要条件:A的每个重特征值对应的线性无关的特征向量的个数等于该特征值的重数。 3 2 -1 x-3 -2 1 A= -2 -2 2 的特征多项式是 2 x+2 -2 = x3-12x 3 6 -1 -3 -6 x+1 +16=(x-2)2(x+4)=0。特征根是2,2,
10、4。 特征根-4对应的特征向量为(1/3,-2/3,1)。 特征根2对应的特征向量为{(-2,1,0)(1,0,1)}。 可以看出特征向量的个数等于该特征值的重数。 程序如下: A=[3 -2 -1;-2 -2 2;3 6 -1]; [V,D]=eig(A) V= 0.8890 0.2673 0.1654 -0.2540 -0.5345 0.3737 0.3810 0.8018 0.9127 D= 2
11、 0 0 0 -4 0 0 0 2 从上面可以看出这两种方法来解得的结果一样,很容易知道用Matlab程序来处理即方便又速度快。 下面讲将矩阵对角化的方法: 1) 令A是数域F上的一个n阶矩阵,如果A的特征多项式fA(x)在F内有n个单根,那么存在一个n阶可逆矩阵T,使 1 2 。 T-1AT= 3 n 3 2 -1 x-3 -2 1 设A= -2 -2 2 的特征多项式
12、是 2 x+2 -2 = 3 6 -1 -3 -6 x+1 X3-12x+16=(x-2)2(x+4);特征根是2,2,-4;对于特征根-4,求出齐次线性方程组 -7 -2 1 x1 0 2 -2 -2 x2 = 0 的一个基础解系(1/3,-2/3,1)。 -3 -6 -3 x3 0 对于特征根2,求出一个基础解系{(-2,1,0)(1,0,1)}。 由于基础解系所含解向量的个数
13、都等于对应的特征根的重数,所以A可以对角化,取 1/3 -2 1 -4 0 0 T= -2/3 1 0 那么T-1AT= 0 2 0 。 1 0 1 0 0 2 Matlab程序如下: A=[3 2 -1;-2 -2 2;3 6 -1]; [V,D]=eig(A) V= 0.8890 0.2673 0.165
14、4 -0.2540 -0.5345 0.3737 0.3810 0.8018 0.9127 D= 2 0 0 0 -4 0 0 0 2 T=inv(V)*A*V T= 2.0000 0 0 0.0000
15、4.0000 0.0000 -0.0000 -0.0000 2.0000 可以看出解向量的个数等于特征跟的重数。 2) 设A是一个n阶实对称矩阵,那么存在一个n阶正交矩阵U,使得UTAU是对角形。 0 1 1 -1 设A= 1 0 -1 1 ,求正交矩阵Q,使QTAQ是对角矩阵。 1 -1 0 1 -1 1 1 0 解:①求A的特征值。 -1 -1 1 解特征值
16、方程 |E-A| = -1 1 -1 =(+3)(-1)3 = 0 。 -1 1 -1 1 -1 -1 得到A的特征值是1=-3。2=3=4=1。 ②求A的特征向量。 当1=-3时,特征向量方程为(1E-A)x=0,对特征矩阵(1E-A)作初等行变换: -3 -1 -1 1 1 1 1 1 -1
17、 -3 1 -1 0 -2 2 0 1E-A= -1 1 -3 -1 0 2 -2 0 1 -1 -1 -3 0 -2 0 -2 1 1 1 1 1 0 0 -1 0 1 -1 0 0 1 0 1 0 0 0 0 0 0 0
18、 0 ,得出特征向量 0 0 -2 -2 0 0 1 1 x1=(1,-1,-1,1)T ,对其单位化: 1=X1=(1/2,-1/2,-1/2,1/2)T 当2=3=4=1时,特征向量方程为(2E-A)x=0。对特征矩阵(2E-A)作初等行变换: 1 -1 -1 1 1 -1 -1 1 2E-A= -1 1 1 -1 0 0 0 0 , 得出基础
19、 -1 1 1 -1 0 0 0 0 1 -1 -1 1 0 0 0 0 解系(线性无关的特征向量组)。 X2=(1,1,0,0)T,X3=(1,0,1,0)T,X4=(-1,0,0,1)T 此时X2,X3,X4线性无关,但并不正交,下面采用施迷特正交化过程,计算出与X2,X3,X4等价的正交向量组y2,y3,y4,令y2=x2=(1,1,0,0)T ,y3=x3-y2=(1,0,1,0)T (1,1,0,0,)T=(,1,0)T; y4=x4=
20、1,0,0,1)T(1,1,0,0)T(1/2,-1/2,1,0)T=(-1/3,1/3,1/3,1)T。 将正交向量组y2,y3,y4单位化,令 2==(,,0,0)T, 3=3=(,), 4=T ③以单位化的正交特征向量组为列,得到正交矩阵Q=(),即 -3 1 Q= 0 ;Q-1AQ=QTAQ== 1
21、 0 0 1 程序如下: A=[0 1 1 -1;1 0 -1 1;1 -1 0 1;-1 1 1 0]; Q=orth(A) Q= 0.5000 0 0.8660 -0.0000 -0.5000 -0.0000 0.2887 0.8165 -0.5000 0.7071
22、 0.2887 -0.4082 0.5000 0.7071 -0.2887 0.4082 Q‘ 0.5000 -0.5000 -0.5000 0.5000 0 -0.0000 0.7071 0.7071 0.8660 0.2887 0.2887 -0.2887 -0.0000 0.8165 -0.4082 0.4082 =Q‘*A*Q=
23、 -3.0000 0 0.0000 0.0000 0 1.0000 0 -0.0000 -0.0000 0 1.0000 -0.0000 0.0000 -0.0000 -0.0000 1.0000 以上问题的两种解法相互比较很明显的可以看出用Matlab软件即节时又更快。 讨论的问题若果是3阶及3阶以下的矩阵
24、问题不用Matlab软件也可以好处理,但最重要的是高阶矩阵处理中Matlab是最好用的软件。 -3 3 2 -1 -1 1 5 -2 例题1:利用Matlab判断方阵A= -6 3 6 0 是否可对角化,若可对角化 8 7 4 1 ,求出可逆阵P,使P-1AP为对角阵。 方法:利用n阶方阵A可以相似对角化的充分必要条件是A有n个线性无关的特征向量。 程序设计: A=[-3 3 2 -
25、1;-1 1 5 -2;-6 3 6 0;8 7 4 1]; [V,D]=eig(A) V = -0.5042 0.0462 + 0.2234i 0.0462 - 0.2234i 0.0887 0.5841 -0.0110 + 0.3621i -0.0110 - 0.3621i 0.1855 -0.4912 0.0034 + 0.0582i 0.0034 - 0.0582i
26、 0.5332 0.4041 0.9018 0.9018 0.8206 D = -3.7255 0 0 0 0 1.3399 + 5.0508i 0 0 0 0
27、1.3399 - 5.0508i 0 0 0 0 6.0457 RA=rank(V) RA = 4 程序说明:v的秩为4,所A可以对角化,V-1AV=D,可逆阵P=V。 1 0 0 0 例题2:判断B= 0 -1 0 0 是否可对角化。 2 2 0 -1 2
28、 0 1 2 我们利用trigle函数来判定。 输入命令 程序说明:由于返回的值是0,所以矩阵B不可以对角化。 4 2 1 0 2 3 2 -1 例题3:将实对称矩阵A= 1 2 6 1 对角化。 0 -1 1 2 利用Matlab程序来处理这个问题: 输入命令: A=[4 2 1 0;2 3 2 -1;
29、1 2 6 1;0 -1 1 2]; [P,D]=eig(A) P = -0.2936 -0.5914 -0.6090 -0.4395 0.6802 0.4068 -0.3775 -0.4789 -0.2969 0.1286 0.5657 -0.7585 0.6024 -0.6843 0.4082 -0.0474 D = 0.3780 0 0
30、 0 0 2.4067 0 0 0 0 4.3107 0 0 0 0 7.9046 程序说明: 所求得的矩阵D即为A对角化后的对角阵,D和A相似。 例题4: 4 -1 -1 1 -1 4 1 -1 设 A= -1 1 4 -1 , 求正交矩阵T,使得T-1AT为对角矩阵。
31、 1 -1 -1 4 -4 1 1 -1 解:方法1:|I-A|= 1 -4 -1 1 =(-3)3(-7),A的特征 1 -1 -4 1 -1 1 1 -4 值为3(三重),7; 对于特征值3,求得(3I-A)x=0的一个基础解系; 1 1 1 = 1 ,= 0
32、 ,= 0 ,把,,正交化,令=, 0 1 0 0 0 1 1 1 == 0 1 = 。 1 0 1 0 0 0
33、 1 1 0 1 == 0 0 1 = 。 -1 0 0 -1 把分别单位化,得, 1= , 2= ,3= 对于特征值7,求得(7I-A)x=0 0
34、 0 0 1 -1 的一个基础解系,= -1, 把单位化, 得4= ,令 1 T=(1,2,3,4)则T是正交矩阵且T-1AT=diag{3,3,3,7}。 方法2:通过
35、程序来实现这个问题。 程序如下: A=[4 -1 -1 1;-1 4 1 -1;-1 1 4 -1;1 -1 -1 4]; B=orth(A) B = 0.5000 -0.0000 0.8660 0.0000 -0.5000 0.7303 0.2887 0.3651 -0.5000 -0.6814 0.2887 0.4499 0.5000 0.0489 -0.2887 0.8150 D=inv(B)*A*B D =
36、 7.0000 0.0000 -0.0000 0 -0.0000 3.0000 0.0000 0.0000 0.0000 0.0000 3.0000 0.0000 0 -0.0000 -0.0000 3.0000 ② A=[4 -1 -1 1;-1 4 1 -1;-1 1 4 -1;1 -1 -1 4]; [D,C]=eig(A) D = 0.1341 -0.1964 0.8327 0.50
37、00 -0.5221 0.4795 0.4974 -0.5000 0.8252 0.1635 0.2059 -0.5000 0.1689 0.8395 -0.1294 0.5000 C = 3.0000 0 0 0 0 3.0000 0 0 0 0 3.0000 0 0 0
38、 0 7.0000 inv(D)*A*D ans = 3.0000 -0.0000 -0.0000 0.0000 0 3.0000 0.0000 -0.0000 0.0000 0.0000 3.0000 -0.0000 -0.0000 -0.0000 0.0000 7.0000 总结:从上面的计算可以推出的结论是解出系数矩阵为多位矩阵的线性方程组或者处理多位矩阵的物理问题,或者其他相似的复杂的问题时,运用Matlab软件是最方便,最节时的方法。所以说研究这方面会给我们带来好多个方便。






