zoukankan      html  css  js  c++  java
  • 灰色预测的MATLAB程序

             灰色预测适用于小样本的预测,常用来解决一些不确定性的问题。

            理论知识书上都有介绍,下面仅列出程序设计,同时方便自己比赛。

            MATLAB是实现灰色预测过程的首选,用MATLAB编写灰色预测程序时,可以完全按照预测模型的求解步骤进行,也就是下面的步骤:

    • 对原始数据进行累加;
    • 构造累加矩阵B与常数向量;
    • 求解灰参数;
    • 将参数代入预测模型进行数据预测。

           下面举例,一个公司1999到2008年的利润为[89677,99215,109655,120333,135823,159878,182321,209407,246619,300670],现在要预测该公司未来几年的利润情况。

           在程序中我们仅仅预测该公司10年以后的情况,数据可修改,把(n+10)里的10改成你需要的数字即可。

          代码:

    clc,clear;
    syms a b;
    c=[a b]';
    A=[89677,99215,109655,120333,135823,159878,182321,209407,246619,300670];
    B=cumsum(A);  %原始数据累加
    n=length(A);
    for i=1:(n-1)
        C(i)=(B(i)+B(i+1))/2; %生成累加矩阵
    end
    %计算待定参数的值
    D=A;D(1)=[];
    D=D';
    E=[-C;ones(1,n-1)];
    c=inv(E*E')*E*D;
    c=c';
    a=c(1);b=c(2);
    %预测后续数据
    F=[];F(1)=A(1);
    for i=2:(n+10)  %只推测后10个数据,可以从此修改
        F(i)=(A(1)-b/a)/exp(a*(i-1))+b/a;
    end
    G=[];G(1)=A(1);
    for i=2:(n+10)  %只推测后10个数据,可以从此修改
        G(i)=F(i)-F(i-1);  %得到预测出来的数据
    end
    t1=1999:2008;
    t2=1999:2018;  %多10组数据
    G
    h=plot(t1,A,'o',t2,G,'-'); %原始数据与预测数据的比较
    set(h,'LineWidth',1.5);    
    预测数据与原始数据的比较,运行结果,其中圈代表原始数据,线是预测数据拟合的结果,想看每年对应的实际数据看矩阵G值,MATLAB有输出在command window里:

             下面为说明该程序的模板作用,举例说明CUMCM2005A题 长江水质的预测,其中1995年到2004年的长江污水排放数据如下:

    1995 1996 1997 1998 1999 2000 2001 2002 2003 2004
    174 179 183 189 207 234 220.5 256 270 285

         代码和上一样,只是数据区改了,功能是预测长江未来10年的水质情况。

        代码:

    clc,clear;
    syms a b;
    c=[a b]';
    <span style="color:#ff0000;"><strong>A=[174,179,183,189,207,234,220.5,256,270,285];</strong></span>
    B=cumsum(A);  %原始数据累加
    n=length(A);
    for i=1:(n-1)
        C(i)=(B(i)+B(i+1))/2; %生成累加矩阵
    end
    %计算待定参数的值
    D=A;D(1)=[];
    D=D';
    E=[-C;ones(1,n-1)];
    c=inv(E*E')*E*D;
    c=c';
    a=c(1);b=c(2);
    %预测后续数据
    F=[];F(1)=A(1);
    for i=2:(n+10)  %只推测后10个数据,可以从此修改
        F(i)=(A(1)-b/a)/exp(a*(i-1))+b/a;
    end
    G=[];G(1)=A(1);
    for i=2:(n+10)  %只推测后10个数据,可以从此修改
        G(i)=F(i)-F(i-1);  %得到预测出来的数据
    end
    t1=1995:2004;
    t2=1995:2014;  %多10组数据
    G
    h=plot(t1,A,'o',t2,G,'-'); %原始数据与预测数据的比较
    set(h,'LineWidth',1.5);    

    预测结果:


    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    Zookeeper全解析——Paxos作为灵魂(转)
    你真的会开发测试框架?
    使用Hypothesis生成测试数据
    poium测试库之JavaScript API封装原理
    PHP接口自动化测试框架实现
    Web项目如何做单元测试
    如何在Appium中使用AI定位
    我写了个项目,帮你学习HTTP接口测试!
    性能测试浅谈
    Web测试框架SeleniumBase
  • 原文地址:https://www.cnblogs.com/Tobyuyu/p/4965347.html
Copyright © 2011-2022 走看看