||
在层次分析建模中,需要计算一个方阵的最大特征值,和特征向量.
一、乘幂法
实际问题中,矩阵 $\boldsymbol{A}$ 按模最大的特征值起着重要的作用,并且希望有较高的计算精度。因此,求矩阵按模最大特征值的问题十分重要。
设 $n$ 阶实矩阵 $\boldsymbol{A}$ 有 $n$ 个线性无关的特征向量 $\boldsymbol{x}_1,\boldsymbol{x}_2,\cdots,\boldsymbol{x}_n$,对应的特征值满足
$\mid \lambda_1\mid > \mid\lambda_2\mid\geqslant\cdots\geqslant\mid\lambda_n\mid,$
下面求按模最大的特征值 $\lambda_1$ 和对应特征向量 $\boldsymbol{x}_1$.
求主特征值 $\lambda_1$ 及相应特征向量的步骤如下:
1 任给~$n$ 维初始向量 $\boldsymbol{u}_0\ne \boldsymbol{0}$;
2 按~$\boldsymbol{u}_k = \boldsymbol{Au}_{k-1}$;
3 如果从某个常数后,$\frac{(\boldsymbol{u}_k)_i}{(\boldsymbol{u}_k)_i}\approx c\text{常数},(i=1,2,\cdots,n.)$,则取 $\lambda_1 = c$ , 而$\boldsymbol{u}_k$ 就是与 ~$\lambda_1$ 对应的一个近似特征向量。
注:算法收敛速度主要取决于 $\mid\cfrac{\lambda_2}{\lambda_1}\mid$ 的大小。
例子: 求矩阵
$\textbfsymbol{A} = \begin{bmatrix} \dfrac{1}{4} & &\dfrac{1}{5}\\[8pt] \dfrac{1}{5} & &\dfrac{1}{6}\\[8pt] \end{bmatrix}$
的按模最大特征值及其特征向量。
A = [1/4 1/5;1/5 1/6]; u0 = [1;0]; uk = u0;for k = 1:4 u1 = A*u0; u0=u1; uk = [uk u0]; end;uk
uk =
1.0000 0.2500 0.1025 0.0423 0.0175
0 0.2000 0.0833 0.0344 0.0142
>> uk(:,3:end)./uk(:,2:end-1)
ans =
0.4100 0.4126 0.4126
0.4167 0.4127 0.4126
例子二,
$\textbfsymbol{A} =
\begin{bmatrix}
-4 & 14 & 0 \\
-5 & 13 & 0 \\
-1 & 0 &2 \\
\end{bmatrix}$
的按模最大特征值及其特征向量。
幂法的程序为:
function [m, u] = powermethod(A, ep, it_max)
% 求矩阵最大模特征值的幂法,调用格式为
% [m, u] = powermethod(A, ep, it_max)
% 其中
% A 为矩阵,ep 为精度要求,默认为1e-5,
% it_max 为最大迭代次数,默认为100
% m 为模最大的特征值,u 为 m 对应的特征向量
if nargin < 3 it_max = 100; end
if nargin <2 ep = 1e-5; end;
n = length(A); u = ones(n,1); k = 0; m1 = 0;
while k <= it_max
v = A*u; [vmax, i ] = max(abs(v));
m = v(i); u = v/m;
if abs(m-m1)<ep break; end
m1 = m; k = k+1;
end
上例中结果为:
>> A = [-4 14 0 ;-5 13 0 ; -1 0 2];
[m, u] = powermethod(A)
m =
6.0000
u =
1.0000
0.7143
-0.2500
二、反幂法
反幂法用来求非奇异矩阵按模最小的特征值和相应特征向量。约定同上。
步骤如下:
1 任给~$n$ 维初始向量$\boldsymbol{u}_0\ne \boldsymbol{0}$;
2 按$\boldsymbol{u}_k = \boldsymbol{A}^{-1}\boldsymbol{u}_{k-1},k=1,2,\cdots.$;
3 如果从某个常数后,$\frac{(\boldsymbol{u}_k)_i}{(\boldsymbol{u}_k)_i}\approx c\text{常数},(i=1,2,\cdots,n.)$,则取~$\lambda_n = \cfrac{1}{c}$ , 而$\boldsymbol{u}_k$ 就是与$\lambda_n$ 对应的一个近似特征向量。
实际计算$ \boldsymbol{A}^{-1}$ 困难,故上述迭代公式$\boldsymbol{u}_k = \boldsymbol{A}^{-1}\boldsymbol{u}_{k-1},k=1,2,\cdots.$ 常写为$\boldsymbol{A}\boldsymbol{u}_k = \boldsymbol{u}_{k-1},k=1,2,\cdots.$。反幂法计算量大。
function [m, u] = powerinvmethod(A, ep, it_max)
% 求矩阵最小模特征值的反幂法,调用格式为
% [m, u] = powerinvmethod(A, ep, it_max)
% 其中
% A 为矩阵,ep 为精度要求,默认为1e-5,
% it_max 为最大迭代次数,默认为100
% m 为模最小的特征值,u 为 m 对应的特征向量
if nargin < 3 it_max = 100; end
if nargin <2 ep = 1e-5; end;
n = length(A); u = ones(n,1); k = 0; m1 = 0;
while k <= it_max
v = Au; [vmax, i ] = max(abs(v));
m = v(i); u = v/m;
if abs(m-m1)<ep break; end
m1 = m; k = k+1;
end
m = 1/m;
end
求矩阵
$\textbfsymbol{A} =
\begin{bmatrix}
2& -1 & 0 \\
-1 & 2 & -1 \\
0 & -1 &2 \\
\end{bmatrix}$
的按模最小特征值及其特征向量。
>> A= [2 -1 0;-1 2 -1;0 -1 2];
[m, u] = powerinvmethod(A)
m =
0.5858
u =
0.7071
1.0000
0.7071
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-4-26 21:55
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社