如何预测美国人口

此示例表明,使用中等程度的多项式通过推断数据来预测未来是一项冒险的业务。该示例比MATLAB®早。 它始于1977年由Prentice-Hall出版的Forsythe,Malcolm和Moler撰写的“数学计算的计算机方法”中的一项练习。现在,MATLAB和HandleGraphics®使更改参数和查看结果变得更加容易,但是基本的数学原理没有改变。这是1900年至2000年的美国人口普查数据。

东西/原料

  • matlab软件
  • 电脑

方式/步调

  1. 1

    在号令窗口,输入如下:

    % Time interval

    t = (1900:10:2000)';

    % Population

    p = [75.995 91.972 105.711 123.203 131.669 ...

       150.697 179.323 203.212 226.505 249.633 281.422]';

    % Plot

    plot(t,p,'bo');

    axis([1900 2020 0 400]);

    title('Population of the U.S. 1900-2000');

    ylabel('Millions');

    按“Enter”键。

    得如下图1所示。

  2. 2

    您对2010年的生齿有何猜想?

    输入如下号令:

    p

    按“Enter”键。

    得如下图2所示。

  3. 3

    让我们用t中的多项式拟合数据并将其外推到t =2010。多项式中的系数是经由过程求解包含11 x 11 Vandermonde矩阵的线性方程组而获得的,该矩阵的元素是标度时候的幂 ,A(i,j)= s(i)^(nj);

    程序如下:

    n = length(t);

    s = (t-1950)/50;

    A = zeros(n);

    A(:,end) = 1;

    for j = n-1:-1:1

       A(:,j) = s .* A(:,j+1);

    end

    拟合数据p的度为d的多项式的系数c是经由过程求解线性方程组而获得的,该线性方程组涉及Vandermonde矩阵的最后d + 1列: A(:,n-d:n)* c〜= p

  4. 4

    若是d小于10,则方程式多于未知数,而且最小二乘法是合适的。 若是d等于10,则方程可以切确求解,而且多项式现实上是对数据进行插值的。 无论哪种环境,都可以利用MATLAB的反斜杠运算符来解决该系统。 这是三次拟合的系数。

    输入如下程序:

    c = A(:,n-3:n)\p

    按“Enter”键。

    得如图3所示。

  5. 5

    此刻,我们评估1900年至2010年之间每年的多项式并绘制成果。

    程序如下:

    v = (1900:2020)';

    x = (v-1950)/50;

    w = (2010-1950)/50;

    y = polyval(c,x);

    z = polyval(c,w);


    hold on

    plot(v,y,'k-');

    plot(2010,z,'ks');

    text(2010,z+15,num2str(z));

    hold off

    按“Enter”键。

    如图4所示。

  6. 6

    比力三次拟合和四次拟合。 请注重,外推点很是分歧。

    程序如下:

    c = A(:,n-4:n)\p;

    y = polyval(c,x);

    z = polyval(c,w);


    hold on

    plot(v,y,'k-');

    plot(2010,z,'ks');

    text(2010,z-15,num2str(z));

    hold off

    按“Enter”键。

    如图5所示。

  7. 7

    跟着度数的增添,外推变得加倍不不变。

    程序如下:

    cla

    plot(t,p,'bo')

    hold on

    axis([1900 2020 0 400])

    colors = hsv(8);

    labels = {'data'};

    for 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);

       plot(v,y,'color',colors(d,:));

       labels{end+1} = ['degree = ' int2str(d)];

    end

    legend(labels, 'Location', 'NorthWest')

    hold off

    按“Enter”键。

    如图6所示。

原作者:matlab教程举报
  • 发表于 2020-02-11 20:00
  • 阅读 ( 840 )
  • 分类:其他类型

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
联系我们:uytrv@hotmail.com 问答工具