【MATLAB】pagerank算法



clear;clc

A=[ 0 0 0 0 0 1
    1 0 0 0 0 0
    0 1 0 0 0 0
    0 1 1 0 0 0
    0 0 1 0 0 0
    0 0 1 0 1 0]; %有向图邻接矩阵
[n,n] = size(A);
sn = sum(A,2); %按列求矩阵A各行的和
d = 0.85; %阻尼因子
D = zeros(1,n);
for j=1:n
    if sn(j)==0
        A(j,:)=ones(1,n)/n;
    else
        A(j,:)=A(j,:)/sn(j);
    end
end
% A = (1-d)/n*ones(n)+d*A';
p = ones(n,1)/n;
z = zeros(n,1);
count=0;
while max(abs(p-z))>0.0001
    z=p;
%     p=A*p;
    p = (1-d)/n*ones(n,1)+d*A'*p; %要更改的地方
    count=count+1;
end
[x1,index]=sort(p);
x1=flipud(x1);
index=flipud(index);
out=[1:n;x1';index']; %输出结果
fprintf('迭代步数=%d\n',count);
fprintf('--------按名次排名---------\n');
str={'排名','PageRank得分','序号' };
fprintf('%-6s%-15s%-5s\n',str{1},str{2},str{3});
fprintf('%-8d%-17f%-5d\n',out);
fprintf('--------按序号排名---------\n');
str={'序号','PageRank得分','排名'};
x2=p;
[tmp,rank] = sort(index);
out = [1:n;x2';rank'];
fprintf('%-6s%-15s%-5s\n',str{1},str{2},str{3});
fprintf('%-8d%-17f%-5d\n',out);


迭代步数=33
--------按名次排名---------
排名    PageRank得分     序号   
1       0.222193         2    
2       0.219463         3    
3       0.213801         1    
4       0.206679         6    
5       0.112864         5    
6       0.025000         4    
--------按序号排名---------
序号    PageRank得分     排名   
1       0.213801         3    
2       0.222193         1    
3       0.219463         2    
4       0.025000         6    
5       0.112864         5    
6       0.206679         4   

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值