clc
clear
close all
Q=[2,3,13,20,21,26,32];
t=[1981,1982,1992,1999,2000,2005,2011];
T=10;%输入7时为普通对比,大于7则进行预测
%% GM(1,1)
%累加数列
for i=1:size(Q,2)
QQ(i)=sum(Q(1:i));
end
for i=1:size(Q,2)-1
B(i,:)=[-1/2*(QQ(i)+QQ(i+1)),1];
end
Yn=Q;
Yn(1)=[];
deta_a=inv(B'*B)*B'*Yn';
a=deta_a(1);
u=deta_a(2);
deta_Q=zeros(1,size(Q,2));
for i=0:T-1
deta_Q(i+1)=(Q(1)-u/a)*exp(-a*i)+u/a;
end
for i=1:size(deta_Q,2)
if i==1
de_Q(i)=deta_Q(i);
else
de_Q(i)=deta_Q(i)-deta_Q(i-1);
end
end
plot(1:size(Q,2),Q,'-k',1:size(de_Q,2),de_Q,'-b',1:size(Q,2),Q,'ok',1:size(de_Q,2),de_Q,'ob')
legend('真实值','预测值')
axis([1,max(T,size(Q,2)),0,max(max(de_Q),max(Q))+5])
title('普通GM(1,1)预测')
%% 残差GM(1,1)预测模型,与原始数据进行对比
e=Q-de_Q(1:size(Q,2));
se=abs(e);
se(1)=[];
for i=1:size(se,2)
Se(i)=sum(se(1:i));
end
for i=1:size(se,2)-1
Be(i,:)=[-1/2*(Se(i)+Se(i+1)),1];
end
Yn=se;
Yn(1)=[];
deta_a=inv(Be'*Be)*Be'*Yn';
a=deta_a(1);
u=deta_a(2);
deta_se=zeros(1,size(se,2));
for i=0:T-1
deta_se(i+1)=(se(1)-u/a)*exp(-a*i)+u/a;
end
for i=1:T-1
if i==1
de_se(i)=deta_se(i);
else
de_se(i)=deta_se(i)-deta_se(i-1);
end
end
de_se=[0,de_se];
for i=2:size(e,2)
if e(i)>0
mm(i)=1;
else
mm(i)=-1;
end
end
Qs=de_Q(1:size(Q,2))+mm.*de_se(1:size(Q,2));
figure(2)
plot(1:size(Q,2),Q,'-k',1:size(Qs,2),Qs,'-b',1:size(Q,2),Q,'ok',1:size(Qs,2),Qs,'ob')
legend('真实值','预测值')
axis([1,size(Q,2),0,max(max(Qs),max(Q))+5])
title('灰色残差马尔科夫模型与原始值对比')
%% 灰色残差马尔科夫模型进行预测
e(1)=[];
for i=size(Q,2)+1:T
pp=zeros(2,2);
for j=1:size(e,2)
if e(j)<0
aw(j,:)=[0,1];
else
aw(j,:)=[1,0];
end
end
see=se;
for j=1:size(see,2)-1
if e(j)>0&&e(j+1)>0
pp(1,1)=pp(1,1)+1;
elseif e(j)>0&&e(j+1)<0
pp(1,2)=pp(1,2)+1;
elseif e(j)<0&&e(j+1)>0
pp(2,1)=pp(2,1)+1;
else
pp(2,2)=pp(2,2)+1;
end
end
if pp(1,1)+pp(1,2)==0&&pp(2,1)+pp(2,2)~=0
Pp=[[0,0];[pp(2,1)/(pp(2,1)+pp(2,2)),pp(2,2)/(pp(2,1)+pp(2,2))]];
elseif pp(1,1)+pp(1,2)~=0&&pp(2,1)+pp(2,2)==0
Pp=[[pp(1,1)/(pp(1,1)+pp(1,2)),pp(1,2)/(pp(1,1)+pp(1,2))];[0,0]];
else
Pp=[[pp(1,1)/(pp(1,1)+pp(1,2)),pp(1,2)/(pp(1,1)+pp(1,2))];[pp(2,1)/(pp(2,1)+pp(2,2)),pp(2,2)/(pp(2,1)+pp(2,2))]];
end
PP=aw(i-2,:)*Pp;
if PP(1)>PP(2)
V=1;
elseif PP(1)<PP(2)
V=-1;
else
if e(end)>0
V=1;
else
V=-1;
end
end
e=[e,V*de_se(i)];
Qs(i)=de_Q(i)+V*de_se(i);
end
figure(3)
plot(1:size(Q,2),Q,'-k',1:size(Qs,2),Qs,'-b',1:size(Q,2),Q,'ok',1:size(Qs,2),Qs,'ob')
legend('真实值','预测值')
axis([1,max(T,size(Q,2)),0,max(max(Qs),max(Q))+5])
title('灰色残差马尔科夫模型预测')
Qs
de_se
Matlab科研辅导帮
- 粉丝: 2w+
- 资源: 7740
最新资源
- 三电平有源电力滤波器 全套软硬-件资料 基于DSP28335,两套 可以直接用的
- MMC整流器(Matlab),技术文档 1.MMC工作在整流侧,子模块个数N=18,直流侧电压Udc=25.2kV,交流侧电压6
- 天翼云2024年最新版本认证必过资料
- 批量替换当前目录文件名中的的字符串
- 基于IEEE33节点系统电动汽车充电对配电网节点电压偏差的影响 给出IEEE33节电系统在一个时刻下接入电动汽车充电负荷后的Si
- 树与二叉树(c++)版 ppt
- 三通道交错并联双向buck-boost变换器 通过simulink搭建的三通道交错并联双向buck-boost变换器,采用电压
- 光储并网VSG系统Matlab simulink仿真模型,附参考文献 系统前级直流部分包括光伏阵列、变换器、储能系统和双向dc
- 线控转向系统Carsim和Simulink联合仿真模型,带Carsim数据库,C级车 正向建模,利用三环PID控制算法控制无
- 正版主题 Inpandora Pro潘多拉 - 专业WordPress会员制主题,最新版免费下载
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈