数值计算day5-特征值与特征向量
上节课主要介绍了线性方程组的两种迭代求解算法,一个是Jacobi迭代(同步更新),一个是高斯塞德尔迭代(异步更新)。对于特殊的三对角系统,一种更简单快捷的Thomas算法也可以用来求解。之后介绍了向量范数与矩阵范数的概念,线性系统数值解的相对误差可以通过条件数来判定。本节课主要介绍矩阵的特征值,特征向量,以及其中涉及到的几种数值算法。
1. 特征值与特征向量
给定维矩阵,满足下式的数称作矩阵的一个特征值: 而对应的向量称作对应特征值的一个特征向量。上述运算可以推广到更一般的形式,而不仅仅是针对矩阵运算。假设是一个关于的连续函数,表示微分运算,则 就可以表示为: 这是特征值问题的一种更广泛的表现形式。
特征值与特征向量在工程与科学中有着非常重要的作用。例如,在振动研究中,特征值表示系统或组件的固有频率,而特征向量表示这些振动的模式。
为了求解一个矩阵的特征值与特征向量,根据定义,可以得到: 假设是非奇异矩阵,则上式只有零解,不满足求解要求,因此,想要求解特征值,需要, 该式称作特征方程,特征方程的根即为矩阵的特征值。
例:
其特征方程为 求解可得特征值为 然而,对于阶数比较高的矩阵,特征值的求解不会这么简单,需要使用数值求解方法。
2. 幂法与反幂法
2.1 幂法
这节主要介绍如何使用幂法和反幂法分别求解一个矩阵所有特征值中模最大和模最小的值。给定矩阵,假设其有个实特征值 其对应的特征向量为。幂法是通过迭代法来计算最大特征值,首先随机选取初始向量, 迭代计算, 进一步计算, 可以看到,其迭代公式为: 注意到是最大的特征值,因此,当充分大时,有。具体实现时,并没有和的值,因此,迭代计算后,规范化 即可(有待进一步验证,采用向量范数并不合理)。注意:最大特征值是指模最大的那个特征值
MATLAB实现:
A=[4 2 -2; -2 8 1 ; 2 4 -4]
x=[1 1 1]'
for i=1:16
x=A*x; x=x/norm(x,Inf);
end
A*x./x
%%%%%%%%%%%%%%%%
A =
4 2 -2
-2 8 1
2 4 -4
ans =
7.7502
7.7503
7.7502
>> eig(A)
ans =
-3.6102
3.8599
7.7504
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function e = MaxEig(A)
x = ones(size(A));
for i=1:40
x=A*x;
[mx,id] = max(abs(x));
x=x/x(id);
end
e = A*x./x;
[mx,id] = max(abs(e));
e = e(id);
end
2.2 反幂法
给定矩阵,假设其有个实特征值 其对应的特征向量为。是最小特征值,首先注意到如果,则, 即 ,因此有 。可以看到,当为矩阵的最小特征值时,将是的最大特征值,此时运用幂法求解的最大特征值,取倒数,即为的最小特征值。反幂法中,需要注意的是,当最小特征值为0时,其倒数是没有定义的,反幂法求解的是第二小的特征值,且需要采用移位反幂法。
MATLAB实现
function e = MinEig(A)
invA = inv(A);
x = ones(size(A));
for i=1:40
x=invA*x;
[mx,id] = max(abs(x));
x=x/x(id);
end
e = invA*x./x;
[mx,id] = max(abs(e));
e = 1/e(id);
end
%%%%%%%%%%%%%%%%%%%%
>> A = [4 0 0;0 -1 0;0 0 -9]
A =
4 0 0
0 -1 0
0 0 -9
>> MinEig(A)
ans =
-1
>> eig(A)
ans =
-9
-1
4
>> MaxEig(A)
ans =
-9
3. QR分解法
幂法与反幂法是用来求解矩阵的最大特征值与最小特征值,想要求解矩阵所有特征值,可以使用QR分解法。假设是一个的矩阵,有个互不相同的实特征值。QR分解的理论保证是,如果对矩阵做如下相似变换:,则特征值保持不变。这是因为如果,则取,就有,进一步有 ,因此也是的特征值。对进行QR分解的算法流程:
- ,对做QR分解其中是一个正交矩阵(),是一个上三角矩阵
- 令,即,特征值与是一致的。进一步对做QR分解:
- 重复上述过程,直到成为一个上三角矩阵,其特征值即为对角线上的元素。
MATLAB实现
A=[ 6 -7 2 ; 4 -5 2; 1 -1 1]
A0=A;
for i=1:40
[Q R]=qr(A);
A=R*Q;
end
A
ev=diag(A)
eig(A0)
%%%%%%%%%%%%%%%%
>> QRiteration
A =
6 -7 2
4 -5 2
1 -1 1
A =
2.0000 -8.6603 -7.4066
0.0000 -1.0000 -1.0690
0.0000 -0.0000 1.0000
ev =
2.0000
-1.0000
1.0000
ans =
-1.0000
2.0000
1.0000
在每次迭代中,对矩阵进行QR分解的操作是通过使用一种特殊的矩阵Householder矩阵来实现的,其形式为 其中,与为列向量,为向量的2范数。矩阵是对称的,是正交的。 这就意味着与是相似的。下面详细说明,如何通过矩阵将分解为一个正交阵和一个上三角阵的乘积。
- 取为矩阵的第一列元素: 的第一位元素的符号与的第一个元素的符号保持一致,
- 令 , ,则是对称正交矩阵(HouseHolder,),注意 因此的第一列除了第一个元素,其他均为
- 取为矩阵第二列: 的第二位元素的符号与的第二个元素的符号保持一致,
- 令, , , 也为对称正交矩阵(),类似地,的第二列第二个元素一下均为
- 重复上述过程,直到成为一个上三角矩阵,矩阵分解为正交矩阵和上三角矩阵的乘积。
MATLAB实现:
function [Q R] = QRFactorization(R)
% The function factors a matrix [A] into an orthogonal matrix [Q]
% and an upper-triangular matrix [R].
% Input variables:
% A The (square) matrix to be factored.
% Output variables:
% Q Orthogonal matrix.
% R Upper-triangular matrix.
nmatrix = size(R);
n = nmatrix(1);
I = eye(n);
Q = I;
for j = 1:n-1
c = R(:,j);
c(1:j-1) = 0;
e(1:n,1)=0;
if c(j) > 0
e(j) = 1;
else
e(j) = -1;
end
clength = sqrt(c'*c);
v = c + clength*e;
H = I - 2/(v'*v)*v*v';
Q = Q*H;
R = H*R;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
>> A=[ 6 -7 2 ; 4 -5 2; 1 -1 1]
A =
6 -7 2
4 -5 2
1 -1 1
>> [Q R] = qr(A)
Q =
-0.8242 0.3925 -0.4082
-0.5494 -0.7290 0.4082
-0.1374 0.5608 0.8165
R =
-7.2801 8.6537 -2.8846
0 0.3365 -0.1122
0 0 0.8165
>> [Q1 R1] = QRFactorization(A)
Q1 =
-0.8242 0.3925 -0.4082
-0.5494 -0.7290 0.4082
-0.1374 0.5608 0.8165
R1 =
-7.2801 8.6537 -2.8846
0.0000 0.3365 -0.1122
-0.0000 0.0000 0.8165
4. 总结
这节课主要介绍了矩阵特征值与特征向量的概念,对于低阶矩阵,可以通过特征方程求解出矩阵特征值;对于高阶矩阵,可以使用幂法与反幂法求解出矩阵的最大特征值与最小特征值,要求出矩阵的所有特征值,则可以对矩阵进行QR分解,将矩阵相似化为一个上三角矩阵,上三角矩阵的对角线元素即为矩阵的特征值。