clear
clc
A= [126743 127627 128453 129227 129988 130756 131448 132129 132802 133450 134091 134735 135404 136072]';
T=[ 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013]; %T为时间序列
n = length(A);
%逐差法
a = A(2:end)-A(1:end-1);
b = a;
b1 = -(b(1:end-1)+b(2:end))/2;
b2 = ones(12,1);
B = [b1 b2];
r = a(2:end);
s=inv(B'*B)*B'*r; %结果为s
%预测后续数据
F = [];
F(1) = a(1);
for i=2:(n+7)
F(i) = (a(1)-s(2)/s(1))/exp(s(1)*(i-1))+s(2)/s(1);
end
G = [];
G(1) = a(1);
for i=2:(n+7)
G(i) = F(i)-F(i-1); %得到预测出来的数据
end
H=[]; %H为预测结果
H(1) = A(1);
for i=2:(n+7)
H(i) = H(i-1) + G(i-1);
end
H
t2 = [2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020]; %预测时间序列
P=polyfit(t2,H,20)
yi=polyval(P,t2);
plot(T,A,'o') %实际值('o')与预测值拟合('--')对比
hold on
plot(t2,yi,'r')
set(gca,'xgrid','on');
set(gca,'ygrid','on');
title('灰色预测模型拟合中国人口数据结果')
xlabel('年份')
ylabel('中国人口数据/万')
legend('\fontsize{10}\it 实际数据','\fontsize{10}\it 拟合得到数据','Location','SouthEast')