2013-11-28 49 views
0

試圖修復我的代碼,頁面排名。不知道爲什麼權力的方法和反斜槓出現不同的答案,哪些是錯誤的,以及如何解決它。頁面排名MATLAB

p=rand(length(M),1); 
    pnorm=norm(p,1); 
    p=p/pnorm; 
    n=length(M); 

    d=0; 
    e=ones(n,1); 
    a=1/n; 
    Z=a*(e*e'); 
    Mtilda=d*M+(1-d)*Z; 


    for k=1:n 
     tic; 
     prev_p = p; 
     z = Mtilda*p; 
     p = z/norm(z,2); 
     dl_p = norm(p-prev_p, 2); 
     t(k)=toc; 
     str=sprintf('for d=%g , iteration %d: time=%11.4g',d,k,t(k)); 
     disp(str); 
    if dl_p < 1e-6; break; end 
    end 


    ReportPageRank(p,U,0.005) 
    d=1; 
    p2 =(eye(n)-d*M)\((((1-d)/n)*e)); 
+0

它似乎出了2倍,所以我不能完全錯誤。 –

+0

你能給一個數組'M'表示的例子嗎?另外,ReportPageRank(p,U,0,005)函數的定義是什麼?參數'p','U'和'0.005'是什麼?這樣我可以在我的機器上運行它。最後兩行代碼的意圖是什麼?他們似乎沒有任何目的。 – Falimond

+0

我不得不比較反斜槓運算符。我現在幸運地工作。我必須以不同的方式設置強力方法,並且出於某種原因起作用。 –

回答

2

你已經算出來了,但是我會發布我的作品,以防某人對實施感興趣。

M = ... 
[ 0.09091 0.00000 0.00000 0.50000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000; 
    0.09091 0.00000 1.00000 0.50000 0.33333 0.50000 0.50000 0.50000 0.50000 0.00000 0.00000; 
    0.09091 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000; 
    0.09091 0.00000 0.00000 0.00000 0.33333 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000; 
    0.09091 0.00000 0.00000 0.00000 0.00000 0.50000 0.50000 0.50000 0.50000 1.00000 1.00000; 
    0.09091 0.00000 0.00000 0.00000 0.33333 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000; 
    0.09091 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000; 
    0.09091 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000; 
    0.09091 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000; 
    0.09091 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000; 
    0.09091 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000]; 
N = length(M); 
PR = (1/N)*ones(length(M),1); %define PageRank vector for t = 0 
d = 0.85;      %define damping rate 
iter = 1; 
delta_PR = Inf;     %set initial error to infinity 
while delta_PR > 1e-6   %iterate until error is less than 1e-6 
    tic; 

    prev_PR = PR;    %save previous PageRank vector (t-1) 
    PR = d*M*PR + ((1-d)/N)*ones(N,1); %calculate new PageRank (t) 

    delta_PR = norm(PR-prev_PR);%calculate new error 
    t(iter)=toc; 
    str=sprintf('for d=%g , iteration %d: time=%11.4g',delta_PR,iter,t(iter)); 
    disp(str); 
    iter = iter + 1; 
end 

powerRank = pinv((eye(length(M)) - d*M))*(((1-d)/N)*ones(length(M),1)); 

PR = powerRank = 

    0.0328 
    0.3844 
    0.3429 
    0.0391 
    0.0809 
    0.0391 
    0.0162 
    0.0162 
    0.0162 
    0.0162 
    0.0162