
%format long
[m,n]=size(X0)
X1=cumsum(X0) %累加
X2=[]
for i=1:n-1
X2(i,:)=X1(i)+X1(i+1)
end
B=-0.5.*X2
t=ones(n-1,1)
B=[B,t] % 求B矩阵
YN=X0(2:end)
P_t=YN./X1(1:(length(X0)-1)) %对原始数据序列X0进行准光滑性检验,
%序列x0的光滑比P(t)=X0(t)/X1(t-1)
A=inv(B.'*B)*B.'*YN.'
a=A(1)
u=A(2)
c=u/a
b=X0(1)-c
X=[num2str(b),'exp','(',num2str(-a),'k',')',num2str(c)]
strcat('X(k+1)=',X)
%syms k
for t=1:length(X0)
k(1,t)=t-1
end
k
Y_k_1=b*exp(-a*k)+c
for j=1:length(k)-1
Y(1,j)=Y_k_1(j+1)-Y_k_1(j)
end
XY=[Y_k_1(1),Y]%预测值
CA=abs(XY-X0)%残差数列
Theta=CA %残差检验 绝对误差序列
XD_Theta= CA ./ X0 %残差检验 相对误差序列
AV=mean(CA) % 残差数列平均值
R_k=(min(Theta)+0.5*max(Theta))./(Theta+0.5*max(Theta)) % P=0.5
R=sum(R_k)/length(R_k) %关联度
Temp0=(CA-AV).^2
Temp1=sum(Temp0)/length(CA)
S2=sqrt(Temp1)%绝对误差序列的标准差
%----------
AV_0=mean(X0)% 原始序列平均值
Temp_0=(X0-AV_0).^2
Temp_1=sum(Temp_0)/length(CA)
S1=sqrt(Temp_1) %原始序列的标准差
TempC=S2/S1*100 %方差比
C=strcat(num2str(TempC),'%') %后验差检验 %方差比
%----------
SS=0.675*S1
Delta=abs(CA-AV)
TempN=find(Delta<=SS)
N1=length(TempN)
N2=length(CA)
TempP=N1/N2*100
P=strcat(num2str(TempP),'%') %后验差检验%计算小误差概率
clcclear all
% 本程序主要用来计算根据灰色理论建立的模型的预测值。
% 应用的数学模型是 GM(1,1)。
% 原始数据的处理方法是一次累加法。
y=[1662.87 2163.4 1965.35 2472.48 2900.66 3034.93 2755.5 3207 3462]%已知数据
n=length(y)
yy=ones(n,1)
yy(1)=y(1)
for i=2:n
yy(i)=yy(i-1)+y(i)
end
B=ones(n-1,2)
for i=1:(n-1)
B(i,1)=-(yy(i)+yy(i+1))/2
B(i,2)=1
end
BT=B'
for j=1:n-1
YN(j)=y(j+1)
end
YN=YN'
A=inv(BT*B)*BT*YN
a=A(1)
u=A(2)
t=u/a
t_test=4 %需要预测个数
i=1:t_test+n
yys(i+1)=(y(1)-t).*exp(-a.*i)+t
yys(1)=y(1)
for j=n+t_test:-1:2
ys(j)=yys(j)-yys(j-1)
end
x=1:n
xs=2:n+t_test
yn=ys(2:n+t_test)
plot(x,y,'^r',xs,yn,'*-b')
det=0
for i=2:n
det=det+abs(yn(i)-y(i))
end
det=det/(n-1)
disp(['百分绝对误差为:',num2str(det),'%'])
disp(['预测值为: ',num2str(ys(n+1:n+t_test))])
输出结果:
百分绝对误差为:228.3113%
预测值为: 3710.152 3978.2142 4265.6442 4573.8413
实例如下:首先看下面四数列:
A=[2,3,4,3.7]
B=[60,73,84,58]
C=[1204,801,1228,1270]
D=[303,298,247,251]
以A为目标,检验B、C、D与A的关联度。
步骤1.归一化,将数列中的每个元素,除以相同的一个数值,比如A的归一化过程为[2/2, 3/2 ,4/2, 3.7/2]或者更常用的均值化处理,都可以搞定。只需要这几个数列用同一种方法归一即可了。
步骤2.求差序列.经过归一化的A、B、C、D,用A分别减去B/C/D;即
E=A-B F=A-C G=A-D
步骤3.求两级最大和最小差值。这是一个容易让人糊涂的地方,但实际 *** 作很简单:
设E中最大值为Emax,最小值为Emin,其余类推;这样一共就有六个数,分别是Emax;Emin;Fmax;Fmin;Gmax和Gmin。从这六个数中,再选出一个最大值和一个最小值,假设为M和N——而这就是上述公式当中双重最值的部分啦。
步骤4.带入公式,得到三组关联系数(单行)矩阵。
步骤5.计算关联度,实际上就是步骤4中,每组矩阵各个元素求和除以元素个数(求均值)。
步骤6.通过比较关联度数值,最大的那个,其对应的数列与目标数列的关联度最高。
灰色关联度,指的是两个系统或两个因素之间关联性大小的量度。目的,是在于寻求系统中各因素之间的主要关系,找出影响目标值的重要因素,从而掌握事物的主要特征,促进和引导系统迅速有效地发展。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)