1、
MATLAB期中作业
构造拉格朗日插值多项式
一、问题分析:
首先从最简单的一次lagrange出发构造一个插值函数,过两个点做一条直线,用两点式表示,则有
分别记作:
则是的一次插值基函数,是的一次插值基函数。是这两个差值基函数的线性组合:
,
这种形式的插值称为拉格朗日线性插值。
同样地我们可以用三个点来构造过三个点的插值函数,即二次插值。
点的二次插值基函数为:
点的二次插值基函数为:
点的二次插值基函数为:
有了这3个二次插值基函数,可得到过的二次
2、拉格朗日插值
项式:
有了上面的一次和二次差之多插值多项式、,我们可以推广到次插值多项式。下面构造通过各节点的次插值多项式,是之满足
首先构造个插值节点上的插值基函数,对任一点所对应的插值基函数,由于在所有取零值,因此有因子。又因是一个次数不超过的多项式,所以只可能相差一个常数因子,固可表示成:
利用得:
于是
因此满足 的插值多项式可表示为:
从而次拉格朗日插值多项式为:
二、lagrange插值多项式在MATLAB中的实现:
定义函数文件lagran:
function y=lagran(
3、x0,y0,x)
% x0,y0是已知的插值点坐标
% x是待求点组成的数组
% y是拉格朗日差值多项式在x处的值
% L是拉格朗日插值函数的权函数
n=length(x0);
m=length(x);
L=zeros(1,n);
y=zeros(1,m);
for k=1:m
s=0;
for i=1:n
L(i)=1;
for j=1:n
if j~=i
L(i)=L(i)*(x(k)-x0(j))/(x0(i)-x0(j));
end
end
s
4、s+y0(i)*L(i);
end
y(k)=s;
end
return;
用下列命令文件调用函数文件lagran.m:
x1=[1.1 2.3 3.9 5.1];
y1=[3.887 4.276 4.651 5.117];
x=[2.101 3.523 4.234 5.226];
y=lagran(x1,y1,x)
[P,S]=polyfit(x,y,3)
plot(x,y,'r*');grid;
hold on
plot(x1,y1,'g')
title=('lagran(x,y)');
xlabel('x');
ylabel('y');
运行结果:
y =
4.2257 4.5531 4.7526 5.1858
P =
0.0218 -0.1909 0.7768 3.2345
S =
R: [4x4 double]
df: 0
normr: 2.5121e-015
三、 结果分析: