急求灰色预测模型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),'%') %后验差检验%计算小误差概率

%%%%%%%%%%%%%%%%把下面函数保存为gmcal.m文件%%%%%%%%%%%

function gmcal=gm1(x)

sizexd2 = size(x,2)

%求数组长度

k=0

for y1=x

k=k+1

if k>1

x1(k)=x1(k-1)+x(k)

%累加生成

z1(k-1)=-0.5*(x1(k)+x1(k-1))

%z1维数减1,用于计算B

yn1(k-1)=x(k)

else

x1(k)=x(k)

end

end

%x1,z1,k,yn1

sizez1=size(z1,2)

%size(yn1)

z2 = z1'

z3 = ones(1,sizez1)'

YN = yn1' %转置

%YN

B=[z2 z3]

au0=inv(B'*B)*B'*YN

au = au0'

%B,au0,au

afor = au(1)

ufor = au(2)

ua = au(2)./au(1)

%afor,ufor,ua

%输出预测的 a u 和 u/a的值

constant1 = x(1)-ua

afor1 = -afor

x1t1 = 'x1(t+1)'

estr = 'exp'

tstr = 't'

leftbra = '('

rightbra = ')'

%constant1,afor1,x1t1,estr,tstr,leftbra,rightbra

strcat(x1t1,'=',num2str(constant1),estr,leftbra,num2str(afor1),tstr,rightbra,'+',leftbra,num2str(ua),rightbra)

%输出时间响应方程,也就是最终要求的灰色模型

%%%%%%%%%%%%%%%%%%%%%在workspace里输入%%%%%%%%%%%%

x =[5999,5903,5848,5700,7884]gm1(x)

%其中5999,5903,5848,5700,7884可以换成已知的历史数据,无论几个都可以。

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


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

原文地址: http://outofmemory.cn/yw/12103640.html

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

发表评论

登录后才能评论

评论列表(0条)

保存