由于MATLAB中没有现成的拉格朗日插值命令,因此我们可以根据Lagrange插值法的定义编写一个Lagrange插值命令。
定义:
给定n个插值节点x1,x2,...,xn和各个节点对应的函数值y1,y2,...yn,利用拉格朗日插值多项式公式(注:k从0到n累加),其中,
,则可以得到在插值区间内的任意x的函数值y为
。从公式中可以看出,生成的多项式与用来插值的数据密切相关,数据变化则函数就要重新计算。
以下为M语言编写的函数文件lagrange.m
%拉格朗日插值命令
function yy=lagrange(x,y,xx)
%Lagrange 插值,求数据(x,y)所表达式的函数在插值点xx处的插值
m=length(x);
n=length(y);
if m~=n
error('向量x,y长度必须一致');
end
s=0;
for i=1:n
t=ones(1,length(xx));
for j=1:n
if j~=i
t=t.*(xx-x(j))/(x(i)-x(j));
end
end
s=s+t*y(i);
end
yy=s;
读者可以自己找一个题目自行实验,通过画出的图像可以发现,拉格朗日插值的一个明显的特点为——拟合出的多项式通过原x,y的每一个对应的点。