zoukankan      html  css  js  c++  java
  • 灰色模型GM(1,1) 代码及存在的问题

     

    “客观世界的很多实际问题,其内部的结构、参数以及特征并未全部被人们了解,人们不可能象研究白箱问题那样将其内部机理研究清楚,只能依据某种思维逻辑与推断来构造模型。对这类部分信息已知而部分信息未知的系统,我们称之为灰色系统。灰色系统的本征即灰色,研究在信息大量缺乏或紊乱的情况下,如何对实际问题进行分析和解决。

    GM(1,1)模型适用于具有较强指数规律的序列,多只能描述单调的变化过程。”

    但是可以说应用最普遍了。多种灰色模型具体的理论推导及应用条件见《算法大全  第二十八章灰色系统理论及其应用》。

    建模练习题的关键应用摘录如下,虽然借用了,但是自己还存在问题。

    %GM(1,1)单行数据预测 
    clc,clear x0
    =[2033.333333 2183 2223 2269 2733 ]; n=length(x0); lamda=x0(1:n-1)./x0(2:n) range=minmax(lamda) x1=cumsum(x0) for i=2:n z(i)=0.5*(x1(i)+x1(i-1));  %这里以取0.5的发展系数为例,一般多取平均值 end B=[-z(2:n)',ones(n-1,1)]; Y=x0(2:n)'; u=BY x=dsolve('Dx+a*x=b','x(0)=x0'); x=subs(x,{'a','b','x0'},{u(1),u(2),x1(1)}); yuce1=subs(x,'t',[0:n-1]); digits(6),y=vpa(x) %为提高预测精度,先计算预测值,再显示微分方程的解 %预测x的预测值,x的预测值记为yuce,x1的预测值记为yuce1 yuce1=zeros(1,5); yuce1(1)=x0(1); yuce(1)=x0(1); for k= 1 : 4 yuce1(k+1)=(x0(1)-u(2)./u(1))*exp(-u(1)*k)+u(2)./u(1); yuce(k+1)=yuce1(k+1)-yuce1(k); end
    yuce
    =[x0(1),diff(yuce1)] epsilon=x0-yuce %计算残差 delta=abs(epsilon./x0) %计算相对误差 rho=1-(1-0.5*u(1))/(1+0.5*u(1))*lamda %计算级比偏差值 %预测第k年数据的函数,这里是第5+1=6年的 yuce(6)=(x0(1)-u(2)./u(1))*exp(-u(1)*(6-1))-(x0(1)-u(2)./u(1))*exp(-u(1)*(6-2))


    %上述灰色系统理论在多行数据处理中的矩阵化输入和输出,做《出版社资源配置》时的代码备份如下
    a=[124.00 113.00 154.17 240.09 224.33 180.90 155.09 223.42 274.83 327.25 33.33 92.50 57.50 382.50 101.33 60.00 69.75 62.67 136.67 202.75 48.67 60.33 49.75 97.25 139.67 111.40 98.18 118.75 168.80 243.55 280.25 296.13 316.78 354.00 458.89 62.67 61.33 95.75 39.67 79.00 223.10 205.00 235.36 303.80 355.00 148.25 162.00 161.17 243.00 361.60 650.00 522.80 629.71 915.67 1270.40 780.33 726.67 924.00 1483.67 1656.67 140.00 104.75 168.20 322.00 337.33 292.67 344.33 454.33 416.33 943.50 168.33 161.50 339.00 415.67 262.80 290.33 270.25 317.00 548.00 494.00 313.25 543.00 565.67 696.75 713.00 308.00 328.43 379.00 432.14 521.83 1723.25 2060.00 2107.00 3643.67 2416.60 285.75 508.00 364.25 526.25 1142.00 386.33 511.20 558.17 549.50 674.50 348.29 412.35 502.96 694.88 747.56 4091.91 4137.06 4823.69 6175.72 7706.31 520.00 619.00 547.50 786.00 1142.00 643.24 489.81 699.67 1133.25 1298.53 964.25 972.00 1220.81 1408.57 2286.91 210.60 234.80 304.00 428.50 544.86 79.75 110.67 107.20 283.00 415.00 265.73 286.57 400.81 415.00 425.69 1873.29 1623.00 1854.22 2042.90 2665.50 219.18 311.70 406.89 480.75 642.08 88.20 171.00 233.00 178.80 438.00 33.33 183.00 223.00 269.00 733.00 105.40 122.81 130.56 265.50 235.94 134.40 104.33 247.25 293.00 385.17 134.80 147.00 216.86 186.67 246.25 33.33 44.25 116.75 96.00 54.60 124.20 147.00 253.00 544.00 530.75 114.50 109.50 150.50 219.33 300.86 57.67 51.60 89.60 166.67 253.00 959.75 1120.25 2188.00 3439.50 4430.00 2461.86 3007.71 4046.57 4783.00 6518.50 1871.20 1785.83 3962.25 2489.00 7272.00 2396.83 2322.71 2950.14 3408.00 4164.25 5154.25 5092.00 8304.33 19573.00 13888.33 2737.00 2675.43 3227.00 3299.75 6860.40 1500.75 1813.86 2180.17 2722.00 3583.86 1417.00 1205.80 1414.50 1211.78 1276.90 255.00 278.64 305.17 386.46 596.08 20.00 33.33 100.00 132.00 217.50 894.00 614.33 545.00 425.33 563.00 285.80 308.46 443.75 511.20 710.10 299.60 316.00 443.00 893.33 1023.67 240.00 278.57 361.67 704.00 848.60 50.00 61.33 100.00 273.00 841.00 119.20 192.25 251.00 445.00 715.00 159.60 142.40 225.50 396.33 357.50 33.33 63.67 71.00 177.50 137.00 256.67 257.00 375.67 664.50 677.00 215.17 194.00 329.67 361.14 385.00 296.67 265.00 244.25 249.00 240.67 292.50 355.75 415.75 407.20 574.40 317.50 306.20 408.50 389.20 543.60 315.00 409.40 504.80 472.67 711.40 84.33 116.50 153.00 128.00 253.00 632.00 1013.00 855.33 1089.33 1361.33 227.25 275.75 348.00 361.00 520.00 225.33 260.40 264.50 305.00 426.50 237.50 351.80 378.00 375.67 550.83 77.00 106.60 104.33 166.80 346.80 148.00 443.00 189.33 379.50 604.50 474.50 1182.00 1250.00 1019.00 1263.50 ];%输入2001-2005历年来72门课程平均每个书号带来的销量,用做起始数据 b= zeros(72,6);%留作存放六年的预测值 c=zeros(72,5);%留作存放每门课程预测数据六年的残差相对误差 d=zeros(72,4);%留作存放每门课程预测数据六年的级比偏差 e=zeros(72,2);%留作存放每门课程的级比 for s= 1:72 x0=a(s,:);%每次取出一行应用灰色预测,循环72次 n=length(x0); lamda=x0(1:n-1)./x0(2:n) range=minmax(lamda)%级比最值 x1=cumsum(x0)%生成一次累加数列 for i=2:n z(i)=0.5*(x1(i)+x1(i-1));%生成参数为0.5的均值数列 end B=[-z(2:n)',ones(n-1,1)]; Y=x0(2:n)'; u=BY x=dsolve('Dx+a*x=b','x(0)=x0'); x=subs(x,{'a','b','x0'},{u(1),u(2),x1(1)}); yuce1=subs(x,'t',[0:n-1]); digits(6),y=vpa(x) %为提高预测精度,先计算预测值,再显示微分方程的解 %预测x的预测值,x的预测值记为yuce,x1的预测值记为yuce1 yuce1=zeros(1,5); yuce1(1)=x0(1); yuce(1)=x0(1); for k= 1 : 4 yuce1(k+1)=(x0(1)-u(2)./u(1))*exp(-u(1)*k)+u(2)./u(1); yuce(k+1)=yuce1(k+1)-yuce1(k); end yuce=[x0(1),diff(yuce1)]; epsilon=x0-yuce ;%计算残差 delta=abs(epsilon./x0); %计算相对误差 rho=1-(1-0.5*u(1))/(1+0.5*u(1))*lamda; %计算级比偏差值 %预测第6年数据的函数 yuce(6)=(x0(1)-u(2)./u(1))*exp(-u(1)*(6-1))-(x0(1)-u(2)./u(1))*exp(-u(1)*(6-2)); b(s,:)=yuce; c(s,:)=delta; d(s,:)=rho; e(s,:)=range; end b%72行预测值输出 c%对应的相对误差矩阵 d%对应的级比偏差矩阵 e%对应的级比最值矩阵

     Q:灰色预测的平移与还原,还存在问题

    首先级比检验,符合规定范围后才能进行有可信度的预测。不符合的适当加减同一常数进行平移。但是有个别数据行即使平移也不能同时满足级比上下限,建模老师说剔除?还有,平移后的预测值需不需要还原,怎么还原,直接减加该常数吗?

  • 相关阅读:
    sudo在shell脚本执行的问题
    mahout的数据文件格式
    mahout概述
    基于keepalived的redis系统master双机热备,读数据负载均衡设置方案
    输入挂(读数大致格式)
    POJ3762 The Bonus Salary! (费用流+离散化)
    codeforces round 321 div2 D Kefa and Dishes(状态压缩dp)
    HDU5492 Find a path (dp)
    大数模版
    RMQ模版
  • 原文地址:https://www.cnblogs.com/debughzj/p/4909122.html
Copyright © 2011-2022 走看看