资源简介
本文参考了2篇论文,并给出了matlab实现,并附有论文。
本文采用最后的预测效果前50数据预测后面10个数据。效果如文件夹中result.jpg所示。可以通过CSDN交流。
本文仅仅提供入门级别的实现方法。
代码片段和文件信息
%% 灰色预测模型
% File Name :mine
% Create Date :2016/08/09
% Author :ZYZ
% Abstract Description :Grey Model-GM(11)
% Note :本文参考了博士论文《灰色预测技术及其应用研究》4.2节和论文《灰色预测GM_1_1模型的Matlab实现》
%%
clear all; close all;clc;
%load(‘TestData.mat‘);
data = xlsread(‘mine.xlsx‘‘1-1000‘‘A1:A60‘);%读取60个原始样本数据
%data=data+100;
n1=50;%用于训练的样本数目
x0_rawdata=data(1:n11)‘;%选取n1个作为训练样本
n2=size(data1);%训练+预测未来的样本数目
pre_rawdata=data(n1+1:n21)‘;
x=1:n2;
%E1加速指数变换
M=max(x0_rawdata);
m=min(x0_rawdata);
T=M/m;
T_power=0:n1-1;
Y=zeros(size(x0_rawdata));
Y=x0_rawdata.*(T.^T_power);
%E2几何平均生成变换生成变换后的x0_rawdata
x0=zeros(size(x0_rawdata));
for i=1:n1
x0(1i)=(prod(Y(11:i)))^(1/i);
end
%1-AGO生成序列(累加)
x1=zeros(1n1);
x1(11)=x0(11);
for i=2:n1
x1(1i)=x1(1i-1)+x0(1i);
end
%紧邻均值生成
z1=zeros(1n1-1);
for i=1:n1-1
z1(1i)= 0.5*(x1(1i)+x1(1i+1));
end
%计算矩阵B和向量yn
B=zeros(n1-12);
B(:1)=-z1‘;
B(:2)=ones(n1-11);
yn=x0(2:end)‘;
%计算参数a和b
A=inv(B‘*B)*B‘*yn;
a=A(11);
b=A(21);
%微分方程的离散化解(时间响应序列)
xx1=zeros(1n2);
k=0:n2-1;
xx1(1:)=(x0(1)-b/a)*exp(-a*k) +b/a;
%还原:
xx0=zeros(1n2);
xx0(11)=x0(11);
for i=2:n2
xx0(i)=xx1(i)-xx1(i-1);
end
%还原1:变换后的x0的预测;还原2:x0的预测
%还原1
Y_undo=zeros(size(xx0));
Y_undo(11)=xx0(11);
for i=2:n2
Y_undo(1i)= (xx0(1i)^i)/(xx0(1i-1)^(i-1));
end
%还原2
xx0_undo=zeros(size(Y_undo));
T_power_undo=0:n2-1;
xx0_undo=Y_undo./(T.^T_power_undo);
%残差检验
e0=zeros(1n1);%绝对残差
e0=x0_rawdata-xx0_undo(1:n1);
q=zeros(1n1);%相对残差
q=e0./x0_rawdata;
q_mean=mean(abs(q));%平均相对误差(已加绝对值)
q_max=max(abs(q));%最大相对误差(已加绝对值)
fprintf(‘平均相对误差q_mean为(已绝对值化):%f.\n‘q_mean);
fprintf(‘最大相对误差q_max为(已绝对值化):%f.\n‘q_max);
%后验差检验
x0_rawdata_mean=mean(abs(x0_rawdata));
S1=sqrt(sum((x0_rawdata-x0_rawdata_mean).^2)/(n1-1));
e0_mean=mean(abs(e0));
S2=sqrt(sum((e0-e0_mean).^2)/(n1-1));
C=S2/S1;%方差比
p_num=length(find(abs(e0-e0_mean)<0.6745*S1));
p=p_num/n1;%小误差概率
fprintf(‘方差比C为:%f.\n‘C);
fprintf(‘小误差概率p为:%f.\n‘p);
%预测结果的残差检验
e0_pre=pre_rawdata-xx0_undo(n1+1:n2);%绝对残差
q_pre=e0_pre./pre_rawdata;%相对残差
q_pre_mean=mean(abs(q_pre));%平均相对误差(已加绝对值)
q_pre_max=max(abs(q_pre));%最大相对误差(已加绝对值)
fprintf(‘预测结果的平均相对误差q_pre_mean为(已绝对值化):%f.\n‘q_pre_mean);
fprintf(‘预测结果的最大相对误差q_pre_max为(已绝对值化):%f.\n‘q_pre_max);
%打印结果
plot(1:n2data(1:n21)‘‘k.-‘);
hold on;
plot(1:n2xx0_undo‘r.-‘);
legend(‘原始值‘‘预测值‘);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2016-10-24 10:17 GM\
文件 2821 2016-10-24 10:15 GM\mine.m
文件 10040 2016-10-24 10:16 GM\mine.xlsx
文件 480 2016-10-24 10:23 GM\readme.txt
文件 26064 2016-10-24 10:12 GM\result.jpg
目录 0 2016-10-24 10:16 GM\灰色预测论文\
文件 725101 2016-08-10 14:05 GM\灰色预测论文\灰色预测GM_1_1_模型的Matlab实现_朱登远.pdf
文件 969246 2016-08-12 10:10 GM\灰色预测论文\灰色预测技术及其应用研究_崔立志.caj
相关资源
- 非线性SVM算法-matlab实现
- 《MATLAB 智能算法超级学习手册》-程序
- 组合导航matlab程序
- 读取txt文件内容matlab代码实现
- Matlab实现基于相关的模板匹配程序
- matlab优化工具箱讲解
- 基于MATLAB的快速傅里叶变换
- 光纤传输中的分布傅立叶算法matlab实
- 基于matlab的图像处理源程序
- matlab 椭圆拟合程序
- 算术编码解码matlab源代码
- optical_flow 光流法 matlab 实现程序
- 引导图像滤波器 Matlab实现
- 分形几何中一些经典图形的Matlab画法
- OFDM系统MATLAB仿真代码
- SVM工具箱(matlab中运行)
- 图像小波变换MatLab源代码
- LU分解的MATLAB实现
- 冈萨雷斯数字图像处理matlab版(第三
- 替代数据法的matlab程序
- 用matlab实现的多站定位系统性能仿真
- 通过不同方法进行粗糙集属性约简m
- k近邻算法matlab实现
- matlab识别系统
- 神经网络分类matlab程序
- matlab正弦信号发生器的设计
- matlab程序用Hopfield网络解决TSP
- 实例matlab 编程100个常用程序
- 用MATLAB(BPSK仿真 直接扩频)
- 最小二乘法曲线拟合(MATLAB)
评论
共有 条评论