MATLAB实现用幂法/反幂法求矩阵的最大/最小特征值问题(有追加!)。

问题:求A=[2 -1 0;-1 2 -1;0 -1 2]的最大(用幂法求)/最小(用反幂法求)特征值。
下面是我写的MATLAB程序,可是运行不了
/*幂法程序,函数名:pow.m*/
function[m,u,index]=pow(A,ep,N)
%A为矩阵;ep为精度要求;N为最大迭代次数;m为绝对值最大的特征值;u为对应最大特征值的特征向量。
N=100;
ep=1e-6;
n=length(A);u=ones(n,1);
index=0;k=0;m1=0;
while k<=N
v=A*u;[vmax,i]=max(abs(v));
m=v(i);u=v/m;
if abs(m-m1)<ep
index=1;break;
end
m1=m;k=k+1;
end

输入A=[2 -1 0;-1 2 -1;0 -1 2];
[m,u,index]=pow(A,1e-6)

/*反幂法程序,函数名:pow_inv.m*/
function[m ,u,index]=pow_inv(A,ep,N)
%A为矩阵;ep为精度要求;N为最大迭代次数;m 为绝对值最小的特征值;u为对应最小特征值的特征向量。
N=100;
ep=1e-6;
n=length(A);u=ones(n,1);
index=0;k=0;m1=0;
invA=inv(A);
while k<=N
v=invA*u;[vmax,i]=max(abs(v));
m =v(i);u=v/ m ;
if abs(m-m1)<ep
index=1;break;
end
m1 m ;k=k+1;
end
m =1/ m ;

谁知道该怎么写?贴上正确的追加

%A为矩阵;ep为精度要求;N为最大迭代次数;m为绝对值最大的特征值;u为对应最大特征值的特征向量。
A=[2,-1,0;-1,2,-1;0,-1,2];

N=100;
ep=1e-6;

n=length(A);
u=ones(n,1);
index=0;
k=0;
m1=0;
while k<=N
v=A*u;
m=max(abs(v));
u=v/m
if abs(m-m1)<ep
index=1;
break;
end
m1=m;
k=k+1;
end

m %特征值
u/norm(u) %特征向量
[vv,ll]=eig(A); %matlab求解的特征值和特征向量
[mm,ii]=max(abs(diag(ll)));
m_matlab=mm
v_matlab=vv(:,ii)

这个是你的幂法,你的方法基本没有问题。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-05-05
可以先做两次迭代,然后计算norm(x2-x1,inf),norm(x2+x1,inf),如果是双特征值矩阵,这两项会各有一次取2