<Matlab 科学计算学习笔记>
6、 矩阵的特征值和向量
计算矩阵A的特征值和特征向量的函数是eig(A)和eigs(A):
1、E = eig(A) :求矩阵A的全部特征值,构成向量E。
2、[V,D] = eig(A):求矩阵A的全部特征值,构成对角阵D,并求A的特征向量构成V的列向量。
3、[V,D] = eig(A,‘nobalance’):与第二种相似,但是第2种先对A作相似变换,后求特征值特征向量,本格式直接求。
举例:
>> A = round(5*randn(5))
A =
3 -7 -7 -1 3
9 -2 15 -1 -6
-11 2 4 7 4
4 18 0 7 8
2 14 4 7 2
>>E = eig(A)
E =
5.7121 + 6.6770i
5.7121 - 6.6770i
3.6615 + 0.0000i
-8.1008 + 0.0000i
-3.9849 + 0.0000i
>> [V,D] = eig(A)
V =
-0.1100 - 0.1052i -0.1100 + 0.1052i 0.6517 + 0.0000i -0.3212 + 0.0000i 0.4973 + 0.0000i
-0.0691 + 0.0208i -0.0691 - 0.0208i 0.2243 + 0.0000i 0.6203 + 0.0000i 0.0734 + 0.0000i
0.1427 - 0.2190i 0.1427 + 0.2190i -0.3318 + 0.0000i 0.2185 + 0.0000i -0.5902 + 0.0000i
0.0983 - 0.6405i 0.0983 + 0.6405i -0.5533 + 0.0000i -0.1969 + 0.0000i 0.6309 + 0.0000i
0.6953 + 0.0000i 0.6953 + 0.0000i 0.3297 + 0.0000i 0.6524 + 0.0000i 0.0303 + 0.0000i
D =
5.7121 + 6.6770i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i
0.0000 + 0.0000i 5.7121 - 6.6770i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i
0.0000 + 0.0000i 0.0000 + 0.0000i 3.6615 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i
0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i -8.1008 + 0.0000i 0.0000 + 0.0000i
0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i -3.9849 + 0.0000i
6.1、示例
A是一个矩阵,poly(A)表示生成矩阵A的特征多项式|λI -A|
A = [3,1,4,1;5,9,2,6;5,3,5,8;9,7,9,3] % 矩阵A
p = poly(A) % 求矩阵A多项式系数
y = poly2sym(p) % 把多项式系数转化成手写多项式
R = roots(p) % 求特征多项式的解,就是特征值
matlab 运行结果:
A =
3 1 4 1
5 9 2 6
5 3 5 8
9 7 9 3
p =
1.0000 -20.0000 -16.0000 480.0000 98.0000
y =
x^4 - 20*x^3 - 16*x^2 + 480*x + 98
R =
19.5494
5.3052
-4.6514
-0.2031
上述求解矩阵A的特征值,可以直接使用eig(A)
[E,R] = eig(A)
Matlab 运行结果
E =
-0.1971 0.2690 -0.7834 0.3292
-0.5470 -0.3087 0.2910 -0.8582
-0.5231 -0.6076 0.5487 0.3717
-0.6231 0.6806 0.0237 0.1303
R =
19.5494 0 0 0
0 -4.6514 0 0
0 0 -0.2031 0
0 0 0 5.3052
7、矩阵初等变化及二次型
7.1、求行阶梯矩阵及向量组的基
1)行阶梯矩阵使用初等变换化为行最简形式,从而找到列向量组的一个最大无关组。
2)Maltab 将矩阵化成最简的命令:rref
- R = rref(A):用高斯一约当消元法和行主元法求A的行最简形矩阵R。
- [R,jb] = rref(A):jb 是一个向量,其含义r = length(jb)为A的秩,A(:,jb)为A的列向量基,jb中元素表示基向量所在的列。
例:求下列向量组的一个最大无关组
a1 = (1,-2,2,3), a2= (-2,4,-1,3), a3 = (-1,2,0,3), a4 = (0,6,2,3),a5 = (2,-6,3,4).
程序:
a1 = [1,-2,2,3]';
a2 = [-2,4,-1,3]';
a3 = [-1,2,0,3]';
a4 = [0,6,2,3]';
a5 = [2,-6,3,4]';
A = [a1,a2,a3,a4,a5] % 构成五个向量矩阵
[R,jb] = rref(A) % 用高斯一约当消元法和行主元法求A的最简矩阵R
jdwgz = A(:,jb) % 获得矩阵A的极大线性无关组
Matlab 运行结果
A =
1 -2 -1 0 2
-2 4 2 6 -6
2 -1 0 2 3
3 3 3 3 4
R =
1.0000 0 0.3333 0 1.7778
0 1.0000 0.6667 0 -0.1111
0 0 0 1.0000 -0.3333
0 0 0 0 0
jb =
1 2 4
jdwgz =
1 -2 0
-2 4 6
2 -1 2
3 3 3
从运行结果看,a1,a2,a4为向量组的一个基,即为向量组的一个极大无关组。
7.2、正交基、正交矩阵
如果矩阵Q满足 :QQ’ = I, Q’Q = I,那么Q为正交矩阵,求正交矩阵函数orth().格式 Q = Orth(A), 其中A为非奇异矩阵。
例子:
A = [4,0,0;0,3,1;0,1,3];
r = rank(A)
Q = orth(A) % 求正交矩阵
B = Q'* Q % 验证 Q'Q = I
E= norm(eye(r) - Q'*Q,'fro') % 在合理误差界限内验证基向量 Q是正交、归一化向量
matlab 运行结果
r =
3
Q =
0 1.0000 0
-0.7071 0 -0.7071
-0.7071 0 0.7071
B =
1.0000 0 0.0000
0 1.0000 0
0.0000 0 1.0000
E =
4.0877e-16
7.3、正定矩阵
正定矩阵是对称矩阵的基础上建立起来的概念。如果一个对称矩阵所有的主子行列式均为正数,则称该矩阵为正定矩阵,如果所有主子式均为非负的数值,则称为半正定矩阵。
格式 [D,p] = chol(A):若 p =0,则A为正定矩阵,其中D为矩阵A的cholesky分解矩阵;若p>0,则A为非正定矩阵,p为正数,表示分解失败的主元位置的索引。
例子1:判断A是不是正定矩阵
A = [1,-1,0;-1,2,1;0,1,3];
[D,p] = chol(A)
matlab 运行结果:
D =
1.0000 -1.0000 0
0 1.0000 1.0000
0 0 1.4142
p =
0
A矩阵为正定矩阵
例子2:判断B是不是正定矩阵
B = [2,-2,0;-2,1,-2;0,-2,0];
[D,p] = chol(B)
matlab 运行结果
D =
1.4142
p =
2
结论: B矩阵不是正定矩阵
7.4、矩阵的对角化
n * n 矩阵对角化的条件是A具有n个线性无关的特征向量。如果存在一个可逆矩阵P使得P(-1)AP是对角矩阵,则它被称为可对角化的。
例子:求下列实矩阵是否可以相似对角化,若可相似对角化,求出可逆矩阵P和对角矩阵D,使得P(-1)AP是对角矩阵。
A = [11,-6,4,-10,-4;-3,5,-2,4,1;-8,12,-3,12,4;1,6,-2,3,-1;8,-18,8,-14,-1];
代码
A = [11,-6,4,-10,-4;-3,5,-2,4,1;-8,12,-3,12,4;1,6,-2,3,-1;8,-18,8,-14,-1]
[V,D] = eig(A)
r = rank(A)
Matlab 运行结果
A =
11 -6 4 -10 -4
-3 5 -2 4 1
-8 12 -3 12 4
1 6 -2 3 -1
8 -18 8 -14 -1
V =
0.3244 -0.6922 0.0408 0.5536 0.0086
-0.1622 0.1831 0.1280 -0.2955 -0.1880
-0.6489 0.5493 0.3840 -0.5161 0.3588
-0.1622 -0.1428 0.4248 0.3330 0.5554
0.6489 -0.4065 -0.8088 0.4785 -0.7262
D =
3.0000 0 0 0 0
0 5.0000 0 0 0
0 0 5.0000 0 0
0 0 0 1.0000 0
0 0 0 0 1.0000
r =
5
2、代码
A1 = 3*eye(rank(A)) - A; % 求特征值3所对应的基础解系
x1 = null(A1,'r')
A2 = 5*eye(rank(A)) - A; % 求特征值5所对应的基础解系
x2 = null(A2,'r')
A3 = 1*eye(rank(A)) - A; % 求特征值1所对应的基础解系
x3 = null(A3,'r')
matlab 运行结果
x1 =
0.5000
-0.2500
-1.0000
-0.2500
1.0000
x2 =
2.0000 1.0000
-0.3333 -0.3333
-1.0000 -1.0000
1.0000 0
0 1.0000
x3 =
0.8000 0.6000
-0.6000 -0.2000
-0.4000 -0.8000
1.0000 0
0 1.0000
基础解系中解的数等于特征根重数,可对角化。
对角矩阵
inv(V)*A*V
ans =
3.0000 0.0000 0.0000 -0.0000 -0.0000
0.0000 5.0000 -0.0000 0.0000 -0.0000
0.0000 -0.0000 5.0000 0.0000 -0.0000
0.0000 -0.0000 -0.0000 1.0000 0.0000
-0.0000 0.0000 0.0000 -0.0000 1.0000