大家好,欢迎来到IT知识分享网。
注:参考司守奎老师的数学建模与算法书籍。
在数学建模问题中,有很多类问题具有“季节性特点”。类似于不同蔬菜在一年四季中的价格变化、季节性服装在一年四季的价格变化等……
对于季节性时间序列的预测,可以采用“季节系数法”来预测时间序列的变化趋势。在时间序列问题中,季节并不单纯代表一年四季,一些既有季度性、周期性的时间序列也可以用季节系数法来进行预测,例如月份。其步骤如下:
- 收集m年中n个季度的时间序列样本数据
- 计算所有季度的算术平均值
- 计算每年中相同季度的算术平均值
- 计算季度系数:每年相同季度的算术平均值/所有季度的算术平均值
- 确认预测时间序列中,m年数据各自的权重(采用自然序列取值,比如第一年为1,第二年为2……),这意味着距离越近的年份,在预测时间序列中所占权重越大。
- 计算下一年的年加权平均,用每年各季度数据总和乘每年的权数再累加,比上权数总和
- 计算下一年的季度平均值:上一步的结果/季度数n
- 计算每个月第j季度的预测值:预测的季度平均值*季度系数
下面介绍实例:
首先我们把销售额存储到文本文档seasons.txt中,具体格式如下图:
之后用matlab编写代码,如下所示:
%清空命令行和工作区 clc,clear fprintf("计算开始\n"); %导入数据 data = load("test1.txt"); %将data转化为矩阵,行向量years表示年份,列向量seasons表示季节 [years, seasons] = size(data); %求所有数据的算术平均值 years_mean = mean(mean(data)); %求同季节的算术平均值 seasons_mean = mean(data); %计算季节系数 bj = seasons_mean/years_mean; %赋权 w = 1 : years; %预测下一年的年加权平均值,季节平均值,季节预测值 pre_year = w * sum(data ,2) / sum(w); pre_season_ava = pre_year/seasons; pre_seasons = pre_season_ava * bj; %打印结果 fprintf("下一年的年加权平均值:%.2f\n",pre_year); fprintf("下一年的季节平均值:%.2f\n",pre_season_ava); fprintf("下一年四个季度的季节预测值:"); fprintf("%.2f ",pre_seasons); fprintf("\n"); fprintf("计算完成");
结果如下图所示:
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/142643.html