A=[0,-1,0,1,1,1,0,0,1,-1,-1,-1;
-1,0,0,1,-1,1,-1,-1,1,0,-1,-1;
1,1,0,1,1,1,0,1,-1,1,-1,-1;
0,0,0,0,0,0,0,0,0,0,-1,-1;
0,-1,0,1,0,0,-1,-1,-1,-1,-1,-1;
0,0,0,1,1,0,-1,-1,-1,-1,-1,-1;
1,-1,1,1,-1,-1,0,1,1,1,1,1;
1,-1,0,1,-1,-1,0,0,0,-1,1,-1;
0,0,-1,1,-1,-1,0,1,0,1,1,1;
-1,1,0,1,-1,-1,0,-1,0,0,1,1;
-1,-1,-1,-1,-1,-1,0,0,0,0,0,0;
-1,-1,-1,-1,-1,-1,0,-1,0,0,1,0];
[m,n]=size(A); %矩阵大小
%获得一级得分向量
a1=zeros(1,n);
for i=1:m
s=0;
for j=1:n
if(A(i,j)==1)
s=s+A(i,j)
end
end
a1(i)=s
end
%获得二级得分向量
a2=zeros(1,n);
for i=1:m
s=0;
for j=1:n
if(A(i,j)==1)
s=s+a1(j)
end
end
a2(i)=s
end
%根据一级得分向量完善邻接矩阵A
for i=1:m
for j=1:n
if(A(i,j)==-1)
if(a1(i)>a1(j))
A(i,j)=1; A(j,i)=0
end
if(a1(i)
A(i,j)=0; A(j,i)=1
end
end
end
end
%根据二级得分向量完善邻接矩阵A
for i=1:m
for j=1:n
if(A(i,j)==-1)
if(a2(i)>a2(j))
A(i,j)=1; A(j,i)=0;
end
if(a2(i)
A(i,j)=0; A(j,i)=1
end
end
end
end
%根据随机方式完善邻接矩阵A
for i=1:m
for j=1:n
if(A(i,j)==-1)
r=rand(1,1);
if(r>0.5)
A(i,j)=1; A(j,i)=0;
else
A(i,j)=0; A(j,i)=1
end
end
end
end
%计算20级得分向量
num=20;
Y=ones(n,1);
for i=1:num
Y=A*Y;
end
%或使用下面两句程序计算20级得分向量
%e=ones(n,1);
%Y=A^num*e;
%计算最大特征值及特征向量
[u,v]=eig(A);
[p,k]=max(eig(A));
w=u(:,k);
w=w/sum(w);
fprintf('序号 得分 特征向量\n');
for k=1:n
fprintf('%2d %-7d %-6f\n',k,Y(k),w(k));
end