2012-12-06 305 views
1

我想問一些關於特徵向量中心性的問題。 我必須使用功率迭代來計算特徵值。這是我的代碼來計算特徵值:使用顯性特徵值計算特徵向量

v=rand(165,1); 
    for k=1:5 
     w = data_table*v; 
     lamda = norm(w); 
     v = w/lamda; 

    end 

當我得到一個特徵值,我困惑來計算得分的特徵向量使用一個特徵值,我有得到它。例如在我的代碼中計算特徵值,我得到了主導特徵值= 78.50。有了這個特徵值分數,我想要計算特徵向量分數。通常,我們總是使用代碼計算特徵值和特徵向量,例如:[U,V] = eig(data_matrix); 但是,從代碼的結果:

v = 
-167.59 0 0 

0 -117.51 0 

0 0 -112.0 


V = 
0.0404505 0.04835455 -0.01170 

0.0099050 -0.0035217 -0.05561 

0.0319591 -0.0272589 0.018426 

從結果我們計算的特徵向量使用三個特徵值的分數。我的問題是如何計算特徵向量分數,但只使用我們在功率迭代代碼中獲得的一個特徵值分數?

回答

1

功率迭代找到主導特徵向量,即具有最大特徵值的特徵向量。

如果你開始

v=ones(165,1)/165;  % initialisation 
for i=1:5    % 5 iterations 
    w=data_table*v; % assuming size(data_table) = [165 165] 
    v=w/norm(w); 
end 

和你的算法在5次迭代收斂,則v是你的主要特徵向量;

此外,我會從一個較小的例子開始測試你的代碼。你的matlab調用[U,V] = eig(data_matrix);令人困惑,因爲V應該是一個大小爲[165 165]的對角矩陣,而不是大小爲[3 3]的完整矩陣。

嘗試這種情況:

X=[1 1 1;1 1 2;1 2 2] 
[U,V]=eig(X) 
X*U(:,3) 
U(:,3)*V(3,3) 

看到的最大特徵值是在matlab輸出,即(V3,3)什麼,以及相應的矢量U(:,3)。

你的貓使用電源迭代找到這個特徵向量:

v=ones(1,3) 
w=v*X;v=w/norm(w) 
w=v*X;v=w/norm(w) 
w=v*X;v=w/norm(w) 
w=v*X;v=w/norm(w)