前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >matlab批量灰色预测

matlab批量灰色预测

作者头像
机器学习和大数据挖掘
发布2019-07-02 10:42:20
1K0
发布2019-07-02 10:42:20
举报
文章被收录于专栏:数据挖掘数据挖掘

没事玩了一下matlab

发现现在网上的代码都是一组数据预测

所以我就写个批量数据的预测

顺便学习下matlab

----------------------------------我是快乐的分割线------------------------------------

灰色预测的主要思想是:

1、给定一组数据

2、进行累加,即

X(1)1=x(0)1

X(1)2=x(0)1+x(0)2

X(1)3=x(0)1+x(0)2+x(0)3

3、最终目的是为了构造预测方程:

其中:

而为了求得上式,需要:

好的,就是这样子灰色预测就写完了,下面就是各种循环各种写了

----------------------------------我是快乐的分割线------------------------------------

为了批量对多组数据进行预测

所以加入了一个打开excel:

代码语言:javascript
复制
%读取excel的数据,data = xlsread(filename, sheet, range)
data=xlsread('D:\MATLAB\GM.xlsx', 1, 'A1:E2');

然后写个大大的for循环:

代码语言:javascript
复制
m=ndims(data);%维度
for i = 1:m
...
end

省略号里面就是一组数据的预测程序了

灰色预测的思想很简单

我就不分段解释了

全部代码如下

代码语言:javascript
复制
function GM(t)
clc; %清屏,以使计算结果独立显示
format long g; %设置计算精度

%读取excel的数据,data = xlsread(filename, sheet, range)
data=xlsread('D:\MATLAB\GM.xlsx', 1, 'A1:E2');

%fprintf(data(1,:));
%x=data(1,:)
%n=length(data)%长度
%加了;分号表示不将结果显示出来

m=ndims(data);%维度

t=input('你要预测多少期?');
for i = 1:m
    z=0;
    x=data(i,:);
    %下面的全部内容都在这个循环里面进行
    %注意下面的那个end
    %每一行的长度
    n=length(data);
    for j = 1:n
        z = z + x(j);
        be(j,:)=z;
    end
    %matlab的变量定义好乱,可以随便定义,都是局部变量
    %本文这里除了i之外其他都算局部变量吧
    
    %计算数据矩阵B的第一列和第二列数据
    for j = 1:n-1
        %第一列
        c(j,:)=-0.5*(be(j,:)+be(j+1,:));
        %第二列
        e(j,:)=1;
        %代入矩阵B中
        B(j,1)=c(j,:);
        B(j,2)=e(j,:);
    end
    
    %对原始数列平行移位
    for j=2:n 
        y(j-1,:)=x(1,j);
    end
    
    %计算参数α、μ矩阵
    alpha=inv(B.'*B)*B.'*y;
    
    %计算数据估计值的累加数列
    for k = 0:n-1+t
        ago(k+1,:)=(be(1)-alpha(2,:)/alpha(1,:))*exp(-alpha(1,:)*(k))+alpha(2,:)/alpha(1,:);
    end

    
    %估计值的累加数列的还原,并计算出下一预测值
    for j=1:n-1+t
        var(j+1,:)=ago(j+1,:)-ago(j,:);
    end
    
    %给出预测结果
    result(i,:)=var(n+t,1);
    %计算残差
    for j=2:n
        error(j,:)=var(j,:)-x(1,j);
    end
    %调用统计工具箱的标准差函数计算后验差的比值c
    S1=std(x)
    S2=std(error)
    c=S2/S1
end
disp('预测结果为:')
disp(result(:,1))

花了一个下午复习了一下matlab

发现编写m文件不是很难

但是matlab的语言逻辑有点乱

要不是我的逻辑有点乱

---------------------------------------orz-----------------------------------

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-08-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档