#matlab#1.预测广东省甘蔗产量

来源:互联网 发布:苹果电脑mac地址 编辑:程序博客网 时间:2024/04/27 16:10

数据获取

从中国种业信息网可以获取到广东省1949年到2015年的甘蔗产量数据。
用一下代码简单处理,可以得到一下图表。

clcclear% 年份(t = 年份 - 1949)t = zeros(2015-1949,1);for i = 1949 : 2015    t(i-1949+1) = i;end% 产量output = [78.1 114.5 207.5 299.4 276.6 381.1 398 399.5 499.8 571.8 262.2 404 227.4 178.9 514.6 691.7 707.7 578.1 690 632.5 550.3 729.5 624.4 790.5 751.5 788.7 813.3 833.6 883.8 895 821.8 922.7 1369.9 1722.9 1250 1769.2 2333.3 2044.3 1812 1613.2 1752.8 2165.5 2371.1 2376.6 1712.4 1505 1591.6 1392 1764.3 1756.9 1367.1 1253.21 1213.03 1315.48 1134.08 1110.4 1114.25 1114.9 1180.69 1198.8 1253.51 1300.15 1390.03 1469.21 1553.2 1504.68 1452.85];output = output';% 画图% subplot(1,2,1);scatter(t, output,'k');hold on;plot(t, output,'r');xlabel('年份')ylabel('广东甘蔗产量/万吨');

广东省1949-2015年甘蔗产量
可以看出,建国后甘蔗产量开始稳步上升,在50年代末60年代初三年自然灾害时期产量遭遇重挫,随后继续稳步上升。在文革时期出现波动,平均增长速度放缓。改革开后后,甘蔗产量出现指数爆发增长,随后在市场规律下以较大幅度波动。

尝试拟合预测

我们要预测的是市场条件下的甘蔗产量,所以数据应该用的是1979年及其后改革开放后的数据。又因为价格是波动的,我们可以尝试使用三角函数来预测Asin(ωt+φ)+B,并画图。
这里写图片描述
上图,左边的是原来的数据。右边的是截取部分数据并拟合的结果。多次运行可以发现,拟合的结果是差异很大的,并且与我们预期中的远远不符合。
代码如下

clcclear% 年份(t = 年份 - 1949)t = zeros(2015-1949,1);for i = 1949 : 2015    t(i-1949+1) = i;end% 产量output = [78.1 114.5 207.5 299.4 276.6 381.1 398 399.5 499.8 571.8 262.2 404 227.4 178.9 514.6 691.7 707.7 578.1 690 632.5 550.3 729.5 624.4 790.5 751.5 788.7 813.3 833.6 883.8 895 821.8 922.7 1369.9 1722.9 1250 1769.2 2333.3 2044.3 1812 1613.2 1752.8 2165.5 2371.1 2376.6 1712.4 1505 1591.6 1392 1764.3 1756.9 1367.1 1253.21 1213.03 1315.48 1134.08 1110.4 1114.25 1114.9 1180.69 1198.8 1253.51 1300.15 1390.03 1469.21 1553.2 1504.68 1452.85];output = output';% 画图subplot(1,2,1);scatter(t, output,'k');hold on;plot(t, output,'r');xlabel('年份')ylabel('广东甘蔗产量/万吨');% 1979年及以后的年份t2 = t(1979-1949+1 : 2015-1949+1);% 1979年及以后的产量output2 = output(1979-1949+1 : 2015-1949+1);subplot(1,2,2);scatter(t2, output2,'k');hold on;plot(t2, output2,'r');hold on;% 拟合并画图p = fittype('(A*sin(w*t+f))+B','independent','t')fitfun = fit(t2, output2, p)plot(fitfun, t2, output2, 'b-');

插值再拟合

上面的拟合方法多次运行结果不一致并且与预想不符,可能的一个原因是数据点太少,我们可以使用插值的方法使数据点增多,在拟合,从而增加拟合的精确度。
这里写图片描述
上图坐是没插值的拟合效果,上图右是插值后的拟合效果,可以看到,其实都是不精确的。

% 插值t3 = (1979: 0.25 : 2015)';output3 = interp1(t2, output2, t3,'spline');subplot(1,2,2);% 拟合再画图p2 = fittype('(A*sin(w*t))+B','independent','t')fitfun = fit(t3, output3, p2)plot(fitfun, t3, output3, 'b-');

也许我们需要一个更简单的模型。

用工具箱进行拟合

上网搜索有关模型,找到的很多都是多因子的预测模型。而我们这里的预测只是单纯地用函数来预测,我们找到的模型显然不适用。
但是我们发现matlab提供了一个函数拟合的工具箱.
在命令行中用cftool打开。
我们用这个工具箱来拟合。
我们找到了一个较为适合的函数。
这里写图片描述
其函数表达式是a1*sin(b1*x+c1)+a2*sin(b2*x+c2)
其中a1=2256, b1 = 0.07031, c1=36.76, a2=1070, b2=0.1525, c2=44.71.
画图。这里写图片描述
同时算得2016年的预测产量应该为1517.1万吨。
此处代码为

clcclear% 年份(t = 年份 - 1949)t = zeros(2015-1949,1);for i = 1949 : 2015    t(i-1949+1) = i;end% 产量output = [78.1 114.5 207.5 299.4 276.6 381.1 398 399.5 499.8 571.8 262.2 404 227.4 178.9 514.6 691.7 707.7 578.1 690 632.5 550.3 729.5 624.4 790.5 751.5 788.7 813.3 833.6 883.8 895 821.8 922.7 1369.9 1722.9 1250 1769.2 2333.3 2044.3 1812 1613.2 1752.8 2165.5 2371.1 2376.6 1712.4 1505 1591.6 1392 1764.3 1756.9 1367.1 1253.21 1213.03 1315.48 1134.08 1110.4 1114.25 1114.9 1180.69 1198.8 1253.51 1300.15 1390.03 1469.21 1553.2 1504.68 1452.85];output = output';% 1979年及以后的年份t2 = t(1979-1949+1 : 2015-1949+1);% 1979年及以后的产量output2 = output(1979-1949+1 : 2015-1949+1);subplot(1,1,1);scatter(t2, output2,'k');hold on;a1=2256;b1 = 0.07031;c1=36.76;a2=1070;b2=0.1525;c2=44.71;x = 1979:0.1:2016;y = a1* sin(b1*x+c1) + a2*sin(b2*x+c2);a1* sin(b1*2016+c1) + a2*sin(b2*2016+c2)plot(x, y);

该模型的优缺点

优点,对已有的数据有较好地拟合效果。
缺点,只能对近期进行预测。不能对远期进行预测。因为甘蔗产量实际是受多种因素影响的。如果其他因素都充分满足的情况下,甘蔗产量应该只受种植量影响,而种植量应该受当年的甘蔗影响。这样,产量应该在围绕某个数字进行波动。而这个波动是比现有波动更小,还是比现有波动一样大,这是不知道的,即该模型无法预测的。

0 0
原创粉丝点击