1.用表1-1中的世界人口统计数值估计1980年的人口
表 1-1:
年 | 人口 |
---|---|
1960 | 3 039 585 530 |
1970 | 3 707 475 887 |
1990 | 5 281 653 820 |
2000 | 6 079 603 571 |
要求采用Lagrange插值:
(a) 采用经过1970和1990年估计值的直线;
(b) 经过1960年、1970年以及1990年估计值的抛物线;
© 经过全部4个数据点的三次曲线。
1.原理:
图1 Lagrange插值法计算的程序框图:
2.matlab代码:
要求采用Lagrange插值:
function p = LagrangePoly(xi,yi)
syms t;
p = 0;
n = length(xi);
for i = 1:n
v = 1;
for j = 1:n
if i ~= j
v = v * (t - xi(j))/(xi(i) - xi(j));
end
end
p = p + v * yi(i);
end
p = simplify(p);
end
(a)采用经过1970和1990年估计值的直线:
x=[1970,1990];
y=[3707475887,5281653820];
xi=1980;
poly=LagrangePoly(x,y);
yi=subs(poly,'t',xi);
plot(x,y,'o',xi,yi,'*');
运行结果:
(b)经过1960年、1970年以及1990年估计值的抛物线:
x=[1960,1970,1990];
y=[3039585530,3707475887,5281653820];
xi=1980;
poly=LagrangePoly(x,y)
yi=subs(poly,'t',xi)
plot(x,y,'o',xi,yi,'*')
x=[1960,1970,1990,2000];
y=[3039585530,3707475887,5281653820,6079603571];
xi=1980;
poly=LagrangePoly(x,y);
yi=subs(poly,'t',xi);
plot(x,y,'o',xi,yi,'*')
世界石油产量以每天百万桶计,如表1-2所示。估计2010年的石油产量(备注:不需要2010年的真实石油产量,目的分析高次插值的局限性)。要求采用Newton插值。
(a) 采用线性插值;
(b) 采用经过全部数据点的9次多项式。
表1-2:
年 | 桶/天(×10^6) | 年 | 桶/天(×10^6) |
---|---|---|---|
1994 | 67.052 | 1999 | 72.063 |
1995 | 68.008 | 2000 | 74.669 |
1996 | 69.803 | 2001 | 74.487 |
1997 | 72.024 | 2002 | 74.065 |
1998 | 73.400 | 2003 | 76.777 |
1.原理:
2.matlab代码:
要求采用Newton插值:
function c = newtoninterp(xi,yi)
n = length(xi);
for i = 1:n
for j = 1:n
t(i,j) = 0;
end
end
for j = 1:n
t(j,1) = yi(j);
end
for i = 2:n
for j = i:n
t(j,i) = (t(j,i -1) - t(j - 1,i - 1))/(xi(j) - xi(j - i + 1));
end
end
for i = 1:n
c(i) = t(i,i);
end
end
拉格朗日:
function v = Lagrange(x,y,u)
n = length(x);
v = zeros(size(u));
for k = 1:n
w = ones(size(u));
for j = [1:k-1 k+1:n]
w = (u - x(j))./(x(k) - x(j)).*w;
end
v = v + w * y(k);
end
end
(a)采用线性插值:
x=[1994,2003];
y=[67052000,76777000];
xi=2010;
poly=newtoninterp(x,y)
yi=subs(poly,'t',xi)
plot(x,y,'o',xi,yi,'*')
运行结果:
x=1994:1:2003;
xi=2004:1:2010;
y=[67.052,68.008,69.803,72.024,73.400,72.063,74.669,74.487,74.065,76.777];
yi=Lagrange(x,y,xi)
plot(x,y,'o',xi,yi,'*')