Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Predecir la población estadounidense

Este ejemplo muestra que la extrapolación de datos utilizando polinomios de grado incluso modesto es riesgosa y poco fiable.

Este ejemplo es más antiguo que MATLAB®. Comenzó como un ejercicio en, por Forsythe, Malcolm y moler, publicado por Prentice-Hall en 1977.Computer Methods for Mathematical Computations

Ahora, MATLAB hace que sea mucho más fácil variar los parámetros y ver los resultados, pero los principios matemáticos subyacentes no se modifican.

Cree y trace dos vectores con datos del censo de EE. UU. de 1910 a 2000.

% Time interval t = (1910:10:2000)';  % Population p = [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([1910 2020 0 400]); title('Population of the U.S. 1910-2000'); ylabel('Millions');

¿Cuál es su conjetura para la población en el año 2010?

p
p = 10×1

   91.9720
  105.7110
  123.2030
  131.6690
  150.6970
  179.3230
  203.2120
  226.5050
  249.6330
  281.4220

Ajustar los datos con un polinomio en y utilizarlo para extrapolar la población en.tt = 2010 Obtener los coeficientes en el polinomio mediante la resolución de un sistema lineal de ecuaciones que implican una 11-por-11 Vandermonde matriz, con elementos como potencias de tiempo escalado,.A(i,j) = s(i)^(n-j)

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

Obtenga los coeficientes para un polinomio de grado que se ajuste a los datos resolviendo un sistema lineal de ecuaciones que involucre las últimas columnas de la matriz de Vandermonde:cdpd+1

A(:,n-d:n)*c ~= p

  • Si, entonces existen más ecuaciones que las desconocidas, y una solución de mínimos cuadrados es apropiada.d < 10

  • Si, entonces usted puede resolver las ecuaciones exactamente y el polinomio realmente interpolar los datos.d == 10

En cualquier caso, utilice el operador de barra diagonal inversa para resolver el sistema. Los coeficientes para el ajuste cúbico son:

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

   -5.7042
   27.9064
  103.1528
  155.1017

Ahora evaluar el polinomio en cada año de 1910 a 2010 y trazar los resultados.

v = (1910: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

Compare el ajuste cúbico con el quartic. Observe que el punto extrapolado es muy diferente.

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

A medida que el grado aumenta, la extrapolación se vuelve aún más errática.

cla plot(t,p,'bo') hold on axis([1910 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

Consulte también