菜单

MATLAB教学(六)函数拟合与未来预测

2017-11-13 - IT小知识
MATLAB教学(六)函数拟合与未来预测

这个例子表明,即使用适度的多项式来预测数据,也能预测未来。

这个例子比MATLAB更老。它开始作为一个练习( 计算机方法,通过数学计算 )福赛斯,马尔科姆和摩尔,由Prentice Hall出版在1977。

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

以下是1900至2000年间的美国人口普查数据。

% 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');

你对2010的人口有什么看法?

p
p = 

   75.9950
   91.9720
  105.7110
  123.2030
  131.6690
  150.6970
  179.3230
  203.2120
  226.5050
  249.6330

让我们用t中的多项式拟合数据,并用它外推到t=2010。通过求解一个线性涉及11-by-11范德蒙矩阵方程组得到的多项式的系数,它的元素是缩放的时间的力量,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

系数C一次多项式拟合数据的P D是通过求解一个线性涉及过去的D + 1列的Vandermonde matrix方程组:

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

如果D小于10,有比未知数和方程的最小二乘解更合适。如果D等于10,方程可以精确求解,多项式插值数据实际上。在任何情况下,该系统是用MATLAB的反斜杠算子解决。这里有三次拟合系数。

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

    1.2629
   23.7261
  100.3659
  155.9043

现在我们每年从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

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

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

随着度数的增加,外推变得更加不稳定。

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

打赏作者
标签:

MATLAB教学(六)函数拟合与未来预测》有1个想法

  • Pingback 引用通告: MATLAB基础教学 | Hannes的站点

  • 发表评论

    邮箱地址不会被公开。 必填项已用*标注