1.问题描述
下表是由中国国家统计局提供的《50个城市主要食品平均价格变动情况》整理得到的2016年1月到5月豆角价格数据表,请建立数学模型解决下来两个问题:
(1)豆角价格有什么特点?
(2)对6月份豆角价格变化情况进行预测。
月份 | 一月 | 二月 | 三月 | 四月 | 五月 | ||||||||||
日期 | 1-10 | 11-20 | 21-30 | 1-10 | 11-20 | 21-30 | 1-10 | 11-20 | 21-30 | 1-10 | 11-20 | 21-30 | 1-10 | 11-20 | 21-30 |
价格 | 10.36 | 10.19 | 12.69 | 12.14 | 17.4 | 16.47 | 17.69 | 17.22 | 15.48 | 13.82 | 11.76 | 10.93 | 9.15 | 7.92 |
2.模型假设,符号说明
2.1 模型假设
一个国家的宏观经济会呈现周期性,因此作为一国宏观经济的组成部分之一的物价水平也会呈现周期性,随着经济周期的上下波动,物价水平也会上下波动。基于这点,描述物价水平的数学模型——经验公式也应该具有周期性。我们不妨假设描述物价水平数学模型是一个周期函数,并且可以转化为傅里叶级数。
2.2 符号说明
从表中,我们不难发现,国家统计局会在一个月里对50个城市主要食品平均价格变动情况进行三次调查统计,分别是1-10日,11-20日和21-30日三个时间区间。因此,描述物价水平的周期函数的自变量是月份。为了方便处理,我们再做一次抽象处理,将时间抽象为整数N,其中0<=N<=36。那么如何使用N来表示某一个月呢?又如何使用N来表示某一个月里的第几次调查呢?为此,我们使用如下两个运算符(高级编程语言中都有这两个运算符):
/:整除运算符,比如13/3=4
%:取模运算符,比如13%3=1
这样整数N与月份和当月的第几次调查之间的关系可以表示如下:
调查次序Q=N%3
如果Q=0,那么调查月份M=N/3,否则M=N/3 + 1
比如取N=13,那么调查次序Q=1,调查月份M=5,这表示5月份的第一次调查,即调查时间为5月1-10日。
3.数学建模
接下来看看,如何使用MATLAB的数据拟合工具解决该问题。
设时间矩阵N = [1 2 3 4 5 6 7 8 9 10 11 12 13 14];
豆角价格的矩阵vigna= [10.36 10.19 12.69 12.14 17.4 16.47 17.69 17.22 15.48 13.82 11.76 10.93 9.15 7.92];
3.1 进入数据拟合窗口
在MATLAB命令行窗口中输入cftool,回车即可。
3.2 数据拟合
在区域1中选择相应坐标轴的变量名,在区域2中选择拟合的函数模型,在区域3会会自动显示拟合的图像,在区域4中会给出拟合后的函数表达式。
区域2中可以选择的函数模型有:
Custom Equation 自定义方程
Exponential 指数拟合
Fourier 傅里叶拟合
Gaussian 高斯拟合
Interpolant 插值
Linear Fitting 线性拟合
Polynoimal 多项式
Power 幂函数拟合
Rational 有理拟合,两个多项式之比,分子和分母都是多项式
Smoothing Spline 平滑样条
Sum of Sine 正弦曲线拟合
Weibull 韦布尔拟合
区域4中显示拟合结果的评价指标,含义如下:
SSE:Sum of Squares due to Error误差平方和,越接近0曲线的拟合效果(由最小二乘法计算得出)
R-square:越接近1,曲线的拟合效果越好
Adjusted R-square:越接近1,曲线的拟合效果越好
RMSE:root mean square error 均方根误差,越接近0曲线的拟合效果
最后看看本题的拟合效果,如下图所示。
最后看看,区域4中显示的函数模型:
General model Fourier1:
f(x) = a0 + a1*cos(x*w) + b1*sin(x*w)
Coefficients (with 95% confidence bounds):
a0 = 13 (11.75, 14.25)
a1 = -4.347 (-5.235, -3.459)
b1 = 0.34 (-3.128, 3.808)
w = 0.4398 (0.3295, 0.5501)
Goodness of fit:
SSE: 9.611
R-square: 0.9314
Adjusted R-square: 0.9108
RMSE: 0.9803
通过各种函数模型的拟合发现这个模型拟合效果最好,R-square: 0.9314,非常接近于1。
因此描述豆角价格变化规律的数学模型就是:
vigna = f(N) = 13 + -4.347*cos(N*0.4398) + 0.34*sin(N*0.4398)
这是一个周期函数,符合经济周期的规律。
至此,本题基本解决了。
4.总结
本文通过一个数学建模题目讲解了MATLAB中数据拟合工具的使用,该工具比较简单,但是功能很强大。MATLAB中含有许多功能强大的工具,读者有兴趣的话,可以继续探索,在使用该工具时,也可以从软件设计的角度去欣赏,个人觉得MATLAB软件的设计是一个经典的学习例子。