文档

预测美国人口

这个例子表明,通过外推数据来使用多项式(即使是适度程度的多项式)来预测未来是一件有风险的事情。

这个例子比MATLAB®更古老。它始于1977年普伦蒂斯-霍尔出版的Forsythe、Malcolm和Moler的《数学计算的计算机方法》一书中的一个练习。

现在,MATLAB使改变参数和看到结果变得更容易,但基本的数学原理没有改变。

这是1900年到2000年的美国人口普查数据。

%的时间间隔t =(1900:10:2000)”;%的人口P = [75.995 91.972 105.711 123.203 131.669...';%的阴谋情节(t, p,“波”);Axis ([1900 2020 0 400]);标题(《美国人口1900-2000》);ylabel (“数百万”);

你猜2010年的人口是多少?

p
p =11×175.9950 91.9720 105.7110 123.2030 131.6690 150.6970 179.3230 203.2120 226.5050 249.6330⋮

让我们用t的多项式来拟合数据然后用它来推断t = 2010。多项式的系数是通过求解包含11 × 11 Vandermonde矩阵的线性方程组得到的,该方程组的元素是时间的倍数,a (i,j) = s(i)^(n-j);

n =长度(t);s = (t - 1950) / 50;一个= 0 (n);(:,结束)= 1;A(:,j) = s .* A(:,j+1);结束

拟合数据p的d次多项式的系数c是通过求解包含Vandermonde矩阵最后d+1列的线性方程组得到的:

(一天::n) * c ~ = p

如果d小于10,则方程比未知数多,最小二乘解是合适的。如果d等于10,方程可以精确地解出来,多项式实际上是对数据进行插值。在这两种情况下,系统都是用MATLAB的反斜杠运算符来求解的。这是立方拟合的系数。

c = (:, n: n) \ p
c =4×11.2629 23.7261 100.3659 155.9043

现在我们对1900年到2010年间的每一年的多项式进行评估并绘制结果图。

v = (1900:2020) ';x = (v - 1950) / 50;50 w = (2010 - 1950) /;y = polyval (c、x);z = polyval (c w);持有情节(v, y,“k -”);情节(2010 z,“ks”);文本(2010 z + 15, num2str (z));持有

比较三次拟合与四次拟合。请注意,外推点是非常不同的。

c = (: 4 n: n) \ p;y = polyval (c、x);z = polyval (c w);持有情节(v, y,“k -”);情节(2010 z,“ks”);文本(2010年,z-15 num2str (z));持有

随着程度的增加,这种推断变得更加不稳定。

cla情节(t, p,“波”)举行轴([1900 2020 0 400])颜色= hsv(8);标签= {“数据”};d = 1:8 [Q,R] = qr(A(:,n-d:n));R = R (1: d + 1,);Q = Q (: 1: d + 1);c = R \ (Q * p);% Same as c = A(:,n-d:n)\p;y = polyval (c、x);z = polyval (c, 11);情节(v, y,“颜色”、颜色(d,:));结束标签{+ 1}= (的程度= 'int2str (d)];结束传奇(标签,“位置”“西北”)举行

这个话题有用吗?