1、function f=grayrelated(X,Y)
%这里X是标准化后的参考序列,Y是评价矩阵
Y=[
71.8 90.1 0.57 0.45 0
51 40.2 0.38 0.55 10.5
52 25 0.22 0.52 12
68 90 0.38 0.38 21
28 40 0.32 0.3 18.5
51 45 0.15 0.3 5
76 95 0.7 0.55 12
87 95 0.7 0.5 9.8
76 90 0.57 0.5 11
50 35 0.32 0.35 20
68 90 0.57 0.35 18.5
82 95 0.7 0.35 0
100 200 1 1 0
97.5 180 0.94 0.95 1.3
95 160 0.88 0.9 2.5
86.3 105 0.68 0.75 6.3
82.5 90 0.6 0.7 7.5
78.8 75 0.53 0.65 8.8
75 60 0.45 0.7 7.5
68.8 52.5 0.41 0.55 13.8
62.5 45 0.38 0.5 17.5
56.3 37.5 0.34 0.45 21.3
43.8 26.3 0.28 0.35 50.6
50 30 0.3 0.4 25
37.5 22.5 0.25 0.3 75
31.3 18.8 0.23 0.25 100
18.8 11.3 0.15 0.15 168.8
25 15 0.2 0.2 125
12.5 7.5 0.1 0.1 212.5
6.3 0.8 0.05 0.05 256.3
2、];%输入评价矩阵Y
X=[1 1 1 1 1];%X为参考序列,均为1,个数就是指标个数,情形不同要修改个数
Len=size(Y,2);%取Y矩阵的列数,也就是指标的个数
Wen=size(Y,1);%取行数,就是目标个数
%for i=1:Len
%Y(:,i)=(Y(:,i)-mean(Y(:,i)))/sqrt(var(Y(:,i))); %将Y矩阵用统计方法标准化标准化,
%end
for i=1:Len-1
S(:,i)=(Y(:,i)-min(Y(:,i)))./(max(Y(:,i))-min(Y(:,i)));%将Y矩阵标准化,适用于越大越好型,把该型指标放在一起,前n-1个,不同情形要修改
D=(max(Y(:,5))-Y(:,5))./(max(Y(:,5))-min(Y(:,5))); %将Y矩阵标准化,适用于越小越好型,把该型指标放在一起,第n个,不同情形要修改
end
SD=[S,D];%把两种不同类型的指标组合在一起
temp=SD;% 给temp变量分配空间,其实可以不分配,只是先分配编译的速度更快
for i=1:Wen
temp(i,:)=abs(SD(i,:)-X);%计算评价矩阵与参考序列的差的绝对值
end
p=0.5;%分辨系数
related=Y;%给关联系数related变量分配空间
Min=min(min(temp));
Max=max(max(temp));
for i=1:Wen
related(i,:)=(Min+p*Max)./(temp(i,:)+p*Max);
end
f=size(1,Wen);%给关联度分配空间
for i=1:Wen
f(i)=mean(related(i,:));
end
%w=[1/Len 1/Len 1/Len 1/Len 1/Len] %若已知各指标权重,可在此修改
%f=w*related'