时间序列

来源:互联网 发布:刻字机端口设置 编辑:程序博客网 时间:2024/06/05 00:26

数学建模时间序列

原文:http://blog.csdn.net/qq_34861102/article/details/77075424


  • 趋势移动平均法:
    • 最简单的,使用线性的预测
  • 指数平滑预测模型:

    • 二次指数平滑

      这里写图片描述

    • 三次指数平滑

      这里写图片描述

曲线预测模型:

  • Compertz曲线
  • 生长曲线
  • 修正指数曲线

ARMA模型:

  • armax(p,q)函数
    这里写图片描述
  • 定阶
    我想的话,直接用aic评估一下,画个图,看哪个点的指标最小
 aic(m)
  • 预测
predict和forecast

正文:

这里写图片描述

  • 1
yt = [80.8 94.0 88.4 101.5 110.3 121.5 134.7 142.7];m = length(yt);n = 3;%未来一步的预测for i = n+1:m+1    ythat(i) = sum(yt(i-n:i-1))/n;endythat%未来多步的预测for i = m+1:m+3    yt(i) = ythat(i);    ythat(i+1) = sum(yt(i-n+1:i))/n;endyhat = ythat(end-3:end)s1 = sqrt(mean(yt(n+1:m)-ythat(n+1:m)).^2)
  • 2

    • alpha = 0.6; yt = [80.8 94.0 88.4 101.5 110.3 121.5 134.7 142.7]; n = length(yt); st1(1) = mean(yt(1:3)); st2(1) = st1(1); for i = 2:n    st1(i) = alpha*yt(i) + (1-alpha)*st1(i-1);    st2(i) = alpha*st1(i) + (1-alpha)*st2(i-1); end at = 2*st1 - st2; bt = alpha/(1-alpha)*(st1-st2); yhat = at + bt; sigma = sqrt(mean((yt(2:end)-yhat(1:end-1)).^2)); m = 1:4; yhat2 = at(end) + bt(end)*m;
    • alpha = 0.3; yt = [80.8 94.0 88.4 101.5 110.3 121.5 134.7 142.7]; n = length(yt); st1(1) = mean(yt(1:3)); st2(1) = st1(1); for i = 2:n    st1(i) = alpha*yt(i) + (1-alpha)*st1(i-1);    st2(i) = alpha*st1(i) + (1-alpha)*st2(i-1); end at = 2*st1 - st2; bt = alpha/(1-alpha)*(st1-st2); yhat = at + bt; sigma = sqrt(mean((yt(2:end)-yhat(1:end-1)).^2)); m = 1:4; yhat2 = at(end) + bt(end)*m;

这里写图片描述

  • 同(1)中的指数模型编写方法,参考三次指数:

    这里写图片描述

这里写图片描述

  • 修正指数曲线

    • t = 1969:1983;yt = [3.78 4.19 4.83 5.46 6.71 7.99 8.60 9.24 9.67 9.87 10.49 10.92 10.93 12.39 12.59];plot(t,yt,'* -');n = length(yt);m = n/3;dyt = diff(yt);for i = 1:n-2    jy(i) = dyt(i+1)/dyt(i);endfw = minmax(jy);s1 = sum(yt(1:m));s2 = sum(yt(m+1:2*m));s3 = sum(yt(2*m+1:end));b = ((s3-s2)/(s2-s1))^(1/m);a = (s2 - s1)*(b - 1)/(b * (b^m - 1)^2);k = (s1 - a*b*(b^m-1)/(b-1))/m;yuce = @(t) k + a*b.^t;bzcha = sqrt(mean((yt - yuce(1:n)).^2))ythat = yuce([n+2,n+7])

      这里写图片描述

      这里写图片描述

  • Compertz曲线

    解答:

    这里写图片描述

    y = [3.78 4.19 4.83 5.46 6.71 7.99 8.60 9.24 9.67 9.87 10.49 10.92 10.93 12.39 12.59];yt = log(y);n = length(yt);m = n/3;s1 = sum(yt(1:m));s2 = sum(yt(m+1:2*m));s3 = sum(yt(2*m+1:end));b = ((s3 - s2)/(s2 - s1))^(1/m);a2 = (s2 - s1)*(b - 1)/(b*(b^m - 1)^2);k2 = (s1 - a2*b*(b^m - 1)/(b - 1))/m;a = exp(a2);k = exp(k2);yuce = @(t) k*a.^(b.^t);yhat = yuce(1:n);bzcha = sqrt(mean((y-yhat).^2))ythat = yuce([n+2,n+7])
  • 生长曲线

    这里写图片描述
    这里写图片描述

    y = [3.78 4.19 4.83 5.46 6.71 7.99 8.60 9.24 9.67 9.87 10.49 10.92 10.93 12.39 12.59];yt = 1./y;n = length(yt);m = n/3;s1 = sum(yt(1:m));s2 = sum(yt(m+1:2*m));s3 = sum(yt(2*m+1:end));b = ((s3-s2)/(s2-s1))^(1/m);a = (s2 - s1)*(b - 1)/(b * (b^m - 1)^2);k = (s1 - a*b*(b^m-1)/(b-1))/m;yuce = @(t)1./(k + a*b.^t);bzcha = sqrt(mean((yt - yuce(1:n)).^2))ythat = yuce([n+2,n+7])

ARMA模型拟合实例:

elps = randn(100,1);x = ones(100,1);for i = 3:100    x(i,1) = elps(i) - 0.6*elps(i - 1) - 0.2*elps(i - 2);end%模拟ARMA(0,2)模型%x必须为列向量m = armax(x,[0,2]);%预测dx_Forecast = forecast(m,x,10);x_Forecast = x(end) + cumsum(dx_Forecast)

  • 具体建模的话,先观察时列图

    • 选择差分

      这里写图片描述

    • 确定与非确定结合

      这里写图片描述

  • 然后进行拟合

  • 拟合后预测
原创粉丝点击