《Matlab在数学建模中的应用》笔记3-灰色预测(GM(1,1))

来源:互联网 发布:话费q币充值软件 编辑:程序博客网 时间:2024/04/28 13:00

灰色预测

今晚看了GM(1,1),发觉还不是很懂原理,貌似是:

  • 先把原始数据累加,进而构建一阶微分;
  • 再求均值生成新矩阵B和常数项矩阵Yn;
  • 再利用最小二乘法(没给过程,直接公式求解,记忆中线代里有)求出所谓的灰参数a1;
  • 再代回原微分方程,求出新序列x1
  • 最后,对新序列的相邻数据求差,“还原”为拟合(预测)x0的X0序列
  • 最后的最后,检验(这一步不是很懂,待以后弄懂更新)

    把原书代码修改了一下,加新注释以及检验部分(检验部分应该理解有误,到时记得再改吧)

clear;clcsyms a u;a1=[a,u]';X0=[89677,99215,109655,120333,135823,159878,182321,209407,246619,300670];       %原始数据(可改动部分)X1=cumsum(X0);                                                                  %原始数据累加以便弱化随机序列波动性欲随机性n=length(X0);for i=1:(n-1)    B(i)=(X1(i)+X1(i+1))/2;     %生成累加矩阵end%计算待定参数Yn=X0;Yn(1)=[];Yn=Yn';E=[-B;ones(1,n-1)];a1=inv(E*E')*E*Yn;              %最小二乘法求解(公式)a1=a1';a=a1(1);u=a1(2)%预测后续数据以及画图F=[];F(1)=X0(1);for i=2:(n+10)                          %预测未来十年(可改动部分,改为20、30年)    F(i)=(X0(1)-u/a)/exp(a*(i-1))+u/a;endG=[];G(1)=X0(1);for i=2:(n+10)                          %预测未来十年(可改动部分,改为20、30年)    G(i)=F(i)-F(i-1);end                                     %得到预测数据t1=1999:2008;%(可改动部分)t2=1999:2018;%(可改动部分)Gplot(t1,X0,'o',t2,G)                    %原始数据与预测数据比较%误差检验%------------------灰色模型精度检验对照表-------------------%%等级     相对误差q       方差比C        小误差概率P          %% I级          <0.01          <0.35          >0.95           %% II级         <0.05          <0.50          <0.80           %% III级        <0.10          <0.65          <0.70           %% IV级         >0.02          >0.80          <0.60           %%-----------------------------------------------------------%%计算相对误差qG0=cumsum(G);for i=1:n                   %计算残差    e(i)=X0(i)-G0(i);endfor i=1:10                  %计算相对误差q    q(i)=e(i)/X0(i);endq%计算方差比Cs1=(std(X0,0,2))^2;s2=(std(e,0,2))^2;C=s2/s1%计算小误差概率P(求|e|<0.6745*s1的概率)count=0;for i=1:n    e(i)<0.6745*s1;    count=count+1;endP=count/n

复制到CSDN之后有点问题了,原来在notepad++排版没问题的。。

0 0
原创粉丝点击