在wikipedia上实现了Googles的PageRank:
% Parameter M adjacency matrix where M_i,j represents the link from 'j' to 'i', such that for all 'j' sum(i, M_i,j) = 1
% Parameter d damping factor
% Parameter v_quadratic_error quadratic error for v
% Return v, a vector of ranks such that v_i is the i-th rank from [0, 1]
function [v] = rank(M, d, v_quadratic_error)
N = size(M, 2); % N is equal to half the size of M
v = rand(N, 1);
v = v ./ norm(v, 2);
last_v = ones(N, 1) * inf;
M_hat = (d .* M) + (((1 - d) / N) .* ones(N, N));
while(norm(v - last_v, 2) > v_quadratic_error)
last_v = v;
v = M_hat * v;
v = v ./ norm(v, 2);
end
endfunction
我可以'弄清楚是什么是quadratic_error。它没有在维基百科上和文章的算法规范中描述。
答案 0 :(得分:2)
看起来这是一次融合测试。当while
和v
之间的L 2 差异未超过last_v
的值时,v_quadratic_error
循环结束。
这里有更多解释。首先,请注意M_hat
是一个矩阵,v
是一个向量。 while
循环将v
替换为产品M_hat * v
(规范化为单位向量)。当由于一次迭代导致v
的变化足够小时,循环结束。这就是“融合”在这种情况下的含义。
这似乎是用于找到对应于矩阵的主要特征值的本征向量的标准power iteration循环(在这种情况下为M_hat
)。如果不了解更多关于整体算法(我不打算研究),我不能说为什么这个计算是有用的。