足球队排名matlab实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
%足球队排名次的matlab程序
%interWinTimes(i,j)表示Ti与Tj对抗时胜的场次;
%netWinGoals(i,j)表示Ti与Tj对抗时净胜球数;
%无比赛interWinTimes设为-1;当i=j时,interWinTimes设为0;
%无比赛netWinGoals设为-1;当i=j时,netWinGoals设为0;
%输入数据
%disp('请输入interWinTimes矩阵(n阶)');
%interWinTimes=input('interWinTimes=');
%disp('请输入netWinGoals矩阵(n阶)');
%netWinGoals=input('netWinGoals=');
%程序核心部分开始;
interWinTimes=[0 1 1 3 1 1 0 1 2 0 -1 -1;1 0 1 1 0 1 0 0 1 0 -1 -1;1 2 0 1 1 1 1 1 1 1 -1 -1;0 0 0 0 0 0 0 1 0 0 -1 -1;0 0 0 1 0 0 -1 -1 -1 -1 1 0;0 0 0 1 1 0 -1 -1 -1 -1 -1 -1;2 0 1 2 -1 -1 0 2 3 2 1 1;1 0 1 1 -1 -1 0 0 1 1 1 0;0 0 1 1 -1 -1 0 2 0 2 1 1;0 1 1 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 0 0 0 1 0];
netWinGoals=[0 0 -1 5 2 1 -3 -1 5 0 -1 -1;0 0 -1 2 0 1 0 0 2 -2 -1 -1;1 1 0 2 1 3 -2 1 0 1 -1 -1;-5 -2 -2 0 -1 -1 -6 -1 -1 -1 -1 -1;-2 0 -1 1 0 -1 -1 -1 -1 -1 0 -1;-1 -1 -3 1 1 0 -1 -1 -1 -1 -1 -1;3 0 2 6 -1 -1 0 3 5 5 2 2;1 0 -1 1 -1 -1 -3 0 0 0 2 0;-5 -2 0 1 -1 -1 -5 0 0 4 1 1;0 2 -1 1 -1 -1 -5 0 -4 0 1 2;-1 -1 -1 -1 0 -1 -2 -2 -1 -1 0 -1;-1 -1 -1 -1 1 -1 -2 0 -1 -2 1 0];
[n,n]=size(interWinTimes);
a=zeros(n,n);
for i=1:n
for j=1:n
if interWinTimes(i,j)==interWinTimes(j,i)
if netWinGoals(i,j)==0
a(i,j)=1;
a(j,i)=1;
continue;
end
if netWinGoals(i,j)>0
interWinTimes(i,j)=1
interWinTimes(j,i)=0
end
end
k=0;
k=interWinTimes(i,j)- interWinTimes(j,i)
if k>0
%根据k值设定相应的b,用的是一个尺度判定的方法.再根据Ti胜Tj每场净胜球数来决定d
if k>4
b(i,j)=9
else
b(i,j)=2*k
end
%计算平均每场净胜球数=净胜球数/净胜场次
m=zeros(n,n);
d=zeros(n,n);
m(i,j)=netWinGoals(i,j)/k;
if m(i,j)>2
d(i,j)=1;
else if m(i,j)<0
d(i,j)=-1;
else
d(i,j)=0;
end
end
a(i,j)=b(i,j)+d(i,j);
a(j,i)=1/a(i,j);
end
if interWinTimes(i,j)==-1
a(i,j)=0;
a(j,i)=0;
end
end
end
%判断矩阵a的可约性(修改的floyd算法)
for i=1:n
for j=1:n
if a(i,j)==0
a(i,j)=inf;
end
end
end
n=size(a,1);
D=a
for k=1:n
for i=1:n
for j=1:n
if D(i,k)+D(k,j)
end
end
end
end
for i=1:n
for j=1:n
if D(i,j)==inf
disp('成绩表可约,无法排序');
pause
quit
end
end
end
for i=1:n
for j=1:n
if a(i,j)==inf
a(i,j)=0;
end
end
end
%构造辅助矩阵A
A=zeros(n,n);
m=zeros(n);
for i=1:n
for j=1:n
if a(i,j)==0
m(i)=m(i)+1;
end
end
end
for i=1:n
for j=1:n
if a(i,j)~=0 & i~=j
A(i,j)=a(i,j);
else if i==j
A(i,j)=m(i)+1;
else
A(i,j)=0;
end
end
end
end
%计算A的主特征根和主特征向量(用的是幂法)
x=ones(n,100);
y=ones(n,100);
m=zeros(1,100);
m(1)=max(x(:,1));
y(:,1)=x(:,1);
x(:,2)=A*y(:,1);
m(2)=max(x(:,2));
y(:,2)=x(:,2)/m(2);
p=0.0001;i=2;k=abs(m(2)-m(1));
while k>p
i=i+1;
x(:,i)=A*y(:,i-1);
m(i)=max(x(:,i));
y(:,i)=x(:,i)/m(i);
k=abs(m(i)-m(i-1));
end
a=sum(y(:,i));
w=y(:,i)/a;
t=m(i);
disp('权向量');disp(w);
disp('最大特征值');disp(t);