文章首发于我的个人博客:欢迎大佬们来逛逛
A = ∣ X 1 − Y 1 ∣ A = ∣ x 4 − x 1 , x 5 − x 1 , x 6 − x 1 , x 7 − x 1 ∣ \begin{aligned}A&=|X_1-Y_1|\\A&=|x_4-x_1,x_5-x_1,x_6-x_1,x_7-x_1|\end{aligned} AA=∣X1−Y1∣=∣x4−x1,x5−x1,x6−x1,x7−x1∣
B i j = d m i n + ρ d m a x A i j + ρ d m a x B_{ij}=\frac{d_{min}+\rho d_{max}}{A_{ij}+\rho d_{max}} Bij=Aij+ρdmaxdmin+ρdmax
ξ j = ∑ i = 1 m B i j m \xi_j=\frac{\sum_{i=1}^mB_{ij}}m ξj=m∑i=1mBij
S c o r e j = 1 1 + ( ξ j ( m i n ) / ξ j ( m a x ) ) 2 Score_j=\frac{1}{1+(\xi_j^{(min)}/\xi_j^{(max)})^2} Scorej=1+(ξj(min)/ξj(max))21
function [Score] = mfunc_GreyCorrelationAnalysis(data)
% data表示一个 m * n 列的原始数据矩阵
% 标准化mapminmax是对行操作的,因此转置一下,如果使用zscore(data)标准化则无须转置,但是无法标准化到0,1
data1=mapminmax(data',0,1);%标准化到0.002-1区间
%
data1=data1'; % mapminmax在再转置回来
%
V_max=max(data1);%最大参考指标行,指标最大
V_min=min(data1);%最小参考指标行,指标最小
% 与最大值的灰色关联度
data2=abs(data1-V_max);
%得到绝对值矩阵的全局最大值和最小值
d_max=max(max(data2));
d_min=min(min(data2));
% 计算灰色关联矩阵
a=0.5; %分辨系数默认为0.5
data3=(d_min+a*d_max)./(data2+a*d_max);
% 计算灰色关联度
xi_max=mean(data3'); %计算每个评价对象的灰色关联度,求mean平均值
% 与最小值的灰色关联度
data2=abs(data1-V_min);
%得到绝对值矩阵的全局最大值和最小值
d_max=max(max(data2));
d_min=min(min(data2));
data3=(d_min+a*d_max)./(data2+a*d_max);
xi_min=mean(data3');
% 综合评分
%与最大相关系数越大,最小相关系数越小得分大
Score=1./(1+(xi_min./xi_max)).^2;
for i=1:length(Score)
fprintf('第%d个投标者评分为:%4.2f\n',i,Score(i));
end
end