function [lamda,uk]=CM(A,u0,e)
% 用乘幂法求矩阵的主特征值
% 参数说明:A为所求主特征值的矩阵,要求为方阵 n*n;u0为初始向量 n*1;e为误差限,缺省值为10^(-6).
% 返回值说明:lamda为主特征值,uk为lamda对应的特征向量
%
% 作者:野渡无人
% 最后修改日期:2008.4.24
%
%
% >> A=[6 -12 6;-21 -3 24;-12 -12 51];
% >> u0=[1 0 0]';
% >> [lamda,uk]=CM(A,u0,10^(-3))
%
% 迭代次数为9
%
% lamda =
%
% 45.00013824035389
%
%
% uk =
%
% -0.00065433566498
% 0.50065663966380
% 1.00000000000000
[m,n]=size(A);
if m~=n
error('参数要求:请输入方阵!');
end
if nargin==2
e=10^(-6);
end
if nargin<2
error('参数输入错误,请检查所输入参数个数及要求!');
end
n=0; %记录迭代次数
u1=A*u0;
n=n+1;
lamda0=0;
while 1 %采用死循环模式,满足误差限要求即终止
[m,p]=max(abs(u1)); %选择最大的分量,m为最大分量值,p为最大分量对应下标值
if m==0
error('各分量已全0')
end
uk=A*u1;
n=n+1;
lamda=uk(p)/u1(p);
if abs(lamda-lamda0)< e
break
end
lamda0=lamda;
u1=uk/uk(p);
end
uk=uk/uk(p);
fprintf('/n 迭代次数为%d/n',n);