%该程序用于灰色关联分析,其中原始数据的第一行为参考序列,1至15行为正相关序列,16至17为负相关序列
clc,clear
load x.txt %把原始数据存放在纯文本文件x.txt 中
%如果全为正相关序列,则将两个循环替换为下列代码
%for i=1:size(x,1)
%x(i,=x(i,/x(i,1);
%end
for i=1:15
x(i,=x(i,:)/x(i,1); %标准化数据
end
for i=16:17
x(i,:)=x(i,1)./x(i,:); %标准化数据
end
data=x;
n=size(data,1);
ck=data(1,:);%分离参考序列
bj=data(2:n,:);m1=size(bj,1);
for j=1:m1
t(j,:)=bj(j,:)-ck;
end
jc1=min(min(abs(t')));jc2=max(max(abs(t')));
rho=0.5;%灰色关联度为0.5
ksi=(jc1+rho*jc2)./(abs(t)+rho*jc2);
r=sum(ksi')/size(ksi,2);
r %灰色关联度向量
[rs,rind]=sort(r,'descend') %对关联度进行降序排序
%该函数用于灰色预测模型,其中x0为列向量,alpha一般取0.5,将第一个数据视为序号为0,k从0开始的序号矩阵
function y=huiseyuce(x0,alpha,k)
n=length(x0);
x1=cumsum(x0);
for i=2:n
z1(i)=alpha*x1(i)+(1-alpha)*x1(i-1);
end
z1=z1';
B=[-z1(2:n),ones(n-1,1)];
Y=x0(2:n);
ab=B\Y;
y1=(x0(1)-ab(2)/ab(1))*exp(-ab(1)*k)+ab(2)/ab(1);%产生预测累加生成序列
y=[x0(1) diff(y1)]%产生灰色预测数据