实验五多项式插值逼近
信息与计算科学金融崔振威201002034031
一、实验目的:
拉格朗日插值和牛顿插值的数值实现
二、实验内容:p171.1、p178.1、龙格现象数值实现
三、实验要求:
1、根据所给题目构造相应的插值多项式,
2、编程实现两类插值多项式的计算
3、试分析多项式插值造成龙格现象的原因
主程序
1、拉格朗日
function [c,l]=lagran(x,y)
%c为多项式函数输出的系数
%l为矩阵的系数多项式
%x为横坐标上的坐标向量
%y为纵坐标上的坐标向量
w=length(x);
n=w-1;
l=zeros(w,w);
for k=1:n+1
v=1;
for j=1:n+1
if k~=j
v=conv(v,poly(x(j)))/(x(k)-x(j)) %对多项式做卷积运算end
end
l(k,:)=v;
end
c=y*l;
牛顿插值多项式主程序
function [p2,z]=newTon(x,y,t)
%输入参数中x,y为元素个数相等的向量
%t为插入的定点
%p2为所求得的牛顿插值多项式
%z为利用多项式所得的t的函数值。
n=length(x);
chaS(1)=y(1);
for i=2:n
x1=x;y1=y;
x1(i+1:n)=[];
y1(i+1:n)=[];
n1=length(x1);
s1=0;
for j=1:n1
t1=1;
for k=1:n1
if k==j %如果相等则跳出循环
continue;
else
t1=t1*(x1(j)-x1(k));
end
end
s1=s1+y1(j)/t1;
end
chaS(i)=s1;
end
b(1,:)=[zeros(1,n-1) chaS(1)];
cl=cell(1,n-1); %cell定义了一个矩阵
for i=2:n
u1=1;
for j=1:i-1
u1=conv(u1,[1 -x(j)]); %conv()用于多项式乘法、矩阵乘法
cl{i-1}=u1;
end
cl{i-1}=chaS(i)*cl{i-1};
b(i,:)=[zeros(1,n-i),cl{i-1}];
end
p2=b(1,:);
for j=2:n
p2=p2+b(j,:);
end
if length(t)==1
rm=0;
for i=1:n
rm=rm+p2(i)*t^(n-i);
end
z=rm;
else
k1=length(t);
rm=zeros(1,k1);
for j=1:k1
for i=1:n
rm(j)=rm(j)+p2(i)*t(j)^(n-i);
end
z=rm;
end
end
plot(t,z,'y',x,y,'*r') %输出牛顿插值多项式的函数图
p171.1
(a)、f(x)=e x
解:在matlab窗口中输入:
>> x=[0 0.2 0.4 0.6 0.8 1];
>> y=[exp(0) exp(0.2) exp(0.4) exp(0.6) exp(0.8) exp(1)]
y =
1.0000 1.2214 1.4918 1.8221
2.2255 2.7183
>> [c,l]=lagran(x,y)
可以得出输出结果为:
c =
0.0139 0.0349 0.1704 0.4991 1.0001 1.0000
l =
-26.0417 78.1250 -88.5417 46.8750 -11.4167 1.0000
130.2083 -364.5833 369.7917 -160.4167 25.0000 0
-260.4167 677.0833 -614.5833 222.9167 -25.0000 0
260.4167 -625.0000 510.4167 -162.5000 16.6667 0
-130.2083 286.4583 -213.5417 63.5417 -6.2500 0
26.0417 -52.0833 36.4583 -10.4167 1.0000 0
由输出结果可以的出:P(x)的系数分别为:
a0=0.0139 a1=0.0349 a2=0.1704 a3=0.4991 a4=1.0001 a5=1.0000
(b)、f(x)=sin(x)
解:在matlab窗口中输入:
>> x=[0 0.2 0.4 0.6 0.8 1];
>> y=[sin(0) sin(0.2) sin(0.4) sin(0.6) sin(0.8) sin(1)];
>> [c,l]=lagran(x,y)
可以得出输出结果为:
c =
0.0073 0.0016 -0.1676 0.0002 1.0000 0
l =
-26.0417 78.1250 -88.5417 46.8750 -11.4167 1.0000
130.2083 -364.5833 369.7917 -160.4167 25.0000 0
-260.4167 677.0833 -614.5833 222.9167 -25.0000 0
260.4167 -625.0000 510.4167 -162.5000 16.6667 0
-130.2083 286.4583 -213.5417 63.5417 -6.2500 0
26.0417 -52.0833 36.4583 -10.4167 1.0000 0
由输出结果可以的出:P(x)的系数分别为:
a0=0.0073 a1=0.0016 a2=-0.1676 a3=0.0002 a4=1.0000 a5=0
(c)、f(x)=(x+1)x+1
解:在matlab窗口中输入:
>> x=[0 0.2 0.4 0.6 0.8 1];
>> y=[1 1.2^1.2 1.4^1.4 1.6^1.6 1.8^1.8 2^2];
>> [c,l]=lagran(x,y)
可以得出输出结果为:
c =
0.3945 -0.0717 0.7304 0.9415 1.0052 1.0000
l =
-26.0417 78.1250 -88.5417 46.8750 -11.4167 1.0000
130.2083 -364.5833 369.7917 -160.4167 25.0000 0
-260.4167 677.0833 -614.5833 222.9167 -25.0000 0
260.4167 -625.0000 510.4167 -162.5000 16.6667 0
-130.2083 286.4583 -213.5417 63.5417 -6.2500 0
26.0417 -52.0833 36.4583 -10.4167 1.0000 0
由输出结果可以的出:P(x)的系数分别为:
a0=0.3945 a1=-0.0717 a2=0.7304 a3=0.9415 a4=1.0052 a5=1.0000
P178.1
2、a0=5 a1=-2 a2=0.5 a3=-0.1 a4=0.003
x0=0 x1=1 x2=2 x3=3 c=2.5
解:在matlab窗口中输入:
>> x=[5 -2 0.5 -0.1];
>> y=[0 1 2 3];
>> t=0:0.1:2.5;
>> [u,v]=newTon(x,y,t)
可得出输出结果:
u =
0.1896 -0.7843 -1.3928 2.8688
v =
2.8688 2.7218 2.5603 2.3855 2.1983 2.0000 1.7917 1.5745 1.3497 1.1182 0.8813 0.6401 0.3957 0.1493 -0.0980 -0.3451 -0.5908 -0.8340 -1.0735 -1.3082 -1.5370 -1.7588 -1.9723 -2.1765 -2.3702 -2.5523
由此可以求出牛顿多项式为:
f(x)=0.1896x^3--0.7843^x2--1.3928x+2.8688
输出的图为:
结果分析:
利用牛顿插值多项式的函数,通过调用函数可以求得牛顿多项式与给定的点的值,并通过matlab做出函数图像。
对输出结果v的值和图像进行分析,不难发现函数的输出值没有很明显的偏离函数原图像,即出现龙格现象。
因此利用牛顿插值多项式求该函数,其结果是逼近的。