我想问一些关于特征向量中心性的问题。我必须使用幂迭代来计算特征值。这是我计算特征值的代码:
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
根据结果,我们使用三个特征值得分来计算特征向量。我的问题是如何计算特征向量分数,但仅使用在幂迭代代码中获得的一个特征值分数?
发布于 2013-04-24 20:07:51
幂迭代寻找主导特征向量,即具有最大特征值的特征向量。
如果你从
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应该是一个165165的对角线矩阵,而不是一个大小为33的完整矩阵;
试试这个:
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)
https://stackoverflow.com/questions/13739186
复制相似问题