急求灰色预测模型GM(1,N)matlab源代码!

急求灰色预测模型GM(1,N)matlab源代码!,第1张

function GM1_1(X0)

%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),'%') %后验差检验%计算小误差概率

clc

clear 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.通过比较关联度数值,最大的那个,其对应的数列与目标数列的关联度最高。

灰色关联度,指的是两个系统或两个因素之间关联性大小的量度。目的,是在于寻求系统中各因素之间的主要关系,找出影响目标值的重要因素,从而掌握事物的主要特征,促进和引导系统迅速有效地发展。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8050417.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-13
下一篇2023-04-13

发表评论

登录后才能评论

评论列表(0条)

    保存