clear;clc
A=[ 0 0 0 0 0 11 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