首页 > 解决方案 > 特征值和特征向量计算中的通缩

问题描述

使用这种方法,我应该能够通过在每次迭代中获得最大值来获得特征值。但是,我的代码能够获得的只是第一个特征值(不一定是最大的),我不知道问题出在哪里。

function [Vect,Vp]=PID(A,precision)
    nbVal= 50;
    [n,m]=size(A);
    X=zeros(n,1);
    X(1,1)=1;
    Vect=zeros(n,min(n,nbVal));
    Vp=zeros(1,min(n,nbVal));
    XG=zeros(1,n);
    j=1;
    
for i=1:min(nbVal,n)
    Y = rand(n,1);
    while (max(abs(Y/norm(Y)-X/norm(X))>=precision))
        
        X=Y/norm(Y);
        Y=A*X;
    end
    Vect(:,i)=X;
    % To prevent a division by 0
    while (X(j,1)==0 && j<=n) 
        j = j + 1;
    end    
    if X(j,1)~=0
    Vp(1,i) =Y(j,1)/X(j,1); 
    end
    
    % Wielandt Deflation
     YG= rand(1,n);
    while (max(abs(YG/norm(YG)-XG/norm(XG)))>=precision )
        XG=YG/norm(YG);
        YG=XG*A;
    end    

    A2=A-Vp(1,i)*(X*XG)/(XG*X);
    A=A2;

    end

end  

标签: matlabmathmatrixnumerical-methodseigenvalue

解决方案


推荐阅读