function [y] = relevancy( refer,compare,p,rank)
%refer参考数列(行向量),compare比较数列
%p为分辨系数,默认为0.5
%rank为列向量,反映参考数列与比较数列同增同减时是相关还是不相关
%rank为1表示同增同减时是相关(默认),rank为0表示同增同减时是不相关
%y返回一个反映关联度的列向量
[a,b]=size(compare);
if(nargin<3)
    p=0.5;
end
if(nargin<4)
    rank=ones(a,1);
end
%参考数列,比较数列初始化
refer=refer/refer(1);
for i=1:a
    if(rank(i)==1)
        compare(i,:)=compare(i,:)/compare(i,1);
    else
        compare(i,:)=compare(i,1)./compare(i,:);
    end
end
%计算差值
for i=1:a
    for j=1:b
        diff(i,j)=compare(i,j)-refer(j);
    end
end
%计算关联度
diff=abs(diff);
for i=1:a
    sum=0;
    for j=1:b
        max1=max(max(diff'));
        min1=min(min(diff'));
        sum=sum+(min1+p*max1)/(diff(i,j)+p*max1);%关联度计算公式
    end
    y(i,1)=sum/b;%关联度取平均
end

不知道为啥今天放不了公式,就先这样了

灰色关联分析是指对一个系统发展变化态势的定量描述和比较的方法,其基本思想是通过确定参考数据列和若干个比较数据列的几何形状相似程度来判断其联系是否紧密,它反映了曲线间的关联程度。

通常可以运用此方法来分析各个因素对于结果的影响程度,也可以运用此方法解决随时间变化的综合评价类问题,其核心是按照一定规则确立随时间变化的母序列,把各个评估对象随时间的变化作为子序列,求各个子序列与母序列的相关程度,依照相关性大小得出结论。

灰色关联分析的步骤

灰色关联分析的具体计算步骤如下:

第一步:确定分析数列。

确定反映系统行为特征的参考数列和影响系统行为的比较数列。反映系统行为特征的数据序列,称为参考数列。影响系统行为的因素组成的数据序列,称比较数列。

第二步,变量的无量纲化

由于系统中各因素列中的数据可能因量纲不同,不便于比较或在比较时难以得到正确的结论。因此在进行灰色关联度分析时,一般都要进行数据的无量纲化处理。主要有初值化处理和均值化处理两种方法。

第三步,计算关联系数

第四步,计算关联度

因为关联系数是比较数列与参考数列在各个时刻(即曲线中的各点)的关联程度值,所以它的数不止一个,而信息过于分散不便于进行整体性比较。因此有必要将各个时刻(即曲线中的各点)的关联系数集中为一个值,即求其平均值,作为比较数列与参考数列间关联程度的数量表示,关联度公式如下:

第五步,关联度排序

数值越大说明关联性越强