一.为什么要引进插值函数
在实际问题中,两个变量的关系y=f(x)经常要 靠实验和观测来获得,而在通常的情况下只能得到f(x)在有限个点上的值
=
(
), i=0,1,2,...,n
人们希望找到f(x)的一个近似函数y=
(x),使得
,i=0,1,2,...,n (0.1)
此时,
称为被插函数,点
称为插值结点,
称为插值函数,(0.1)称为插值条件。
在处理插值问题的时候,首先根据需要选择
是哪一类函数,如果选择
为代数多项式就产生了代数插值问题。类似地,有三角多项式插值,有理函数插值和样条函数插值等问题,本文主要考虑代数多项式插值问题。
二.Lagrange插值的定义
由于大家都学过推到过程,我就不一一推导了,直接上公式:
n次Lagrange插值多项式:
其中
是
次基函数
这里着重讲一下一次Lagrange插值和二次Lagrange插值,又分别称为线性Lagrange插值和抛物线性Lagrange插值。
例如我们通过实验或观测已知如下表所示的数据,要求构造一个抛物线插值函数。
X | |||
Y |
直接带入公式可得:
(1)
其中
Lagrange插值多项式不必死记硬背,其基函数
只有在x=
时,基函数才为1,在x等于其他点时,
=0.记住这个特性,基函数公式就特别简单推到了。
三.Lagrange插值多项式的应用
光说不练都是假把戏,接题:
已知
,求
设
=100,
=10,
=121,
=11,
=144,
=12
代入(1)得
将(2)整理下,然后将x=115代入得y=10.7228,可以验证同精度比较,该结果具有4位有效数字。
四.Lagrange插值多项式的Matlab程序
function s=LagrangeInter(x,y,x0)
%% LagrangeInter:求拉格朗日插值多项式函数
% x为节点X坐标向量
% y为节点Y坐标向量
% x0为待计算点的x坐标
syms p;
n=length(x); %读取x向量维数
s=0;
for i=1:n
Li=y(i);
%构造基函数
for j=1:i-1
Li=Li*(p-x(j))/(x(i)-x(j));
end
for j=i+1:n
Li=Li*(p-x(j))/(x(i)-x(j));
end
s=s+Li;
simplify(s);
end
%对输入参数个数做判断,如果只有两个参数直接给出插值多项式
%如果三个参数 则给出插值点的插值结果,第三个参数可以为向量
if(nargin==2)
s=subs(s,'p','x');
s=collect(s); %展开多项式
% s=vpa(s,4); %把系数取到6位精度表达
else
s = subs(s,'p',x0);
% m=length(x0); %读取t长度
%分别对t的每一个分量插值
% for i=1:m
% temp(i)=subs(s,'p',x0(i));
% end
% s=temp;
end