1.问题描述

下表是由中国国家统计局提供的《50个城市主要食品平均价格变动情况》整理得到的2016年1月到5月豆角价格数据表,请建立数学模型解决下来两个问题:

(1)豆角价格有什么特点?

(2)对6月份豆角价格变化情况进行预测。

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)

这是一个周期函数,符合经济周期的规律。

至此,本题基本解决了。

本文通过一个数学建模题目讲解了MATLAB中数据拟合工具的使用,该工具比较简单,但是功能很强大。MATLAB中含有许多功能强大的工具,读者有兴趣的话,可以继续探索,在使用该工具时,也可以从软件设计的角度去欣赏,个人觉得MATLAB软件的设计是一个经典的学习例子。