MATLAB——数值插值之拉格朗日(Lagrange)插值法

 由于MATLAB中没有现成的拉格朗日插值命令,因此我们可以根据Lagrange插值法的定义编写一个Lagrange插值命令

   定义:

给定n个插值节点x1,x2,...,xn和各个节点对应的函数值y1,y2,...yn,利用拉格朗日插值多项式公式L_{n}(x)=\sum y_{i}l_{i}(x),(注:k从0到n累加),其中,l_{i}(x)=\frac{(x-x_{0})...(x-x_{i-1})(x-x_{i+1})...(x-x_{n})}{(x_{i}-x_{0})...(x_{i}-x_{i-1})(x_{i}-x_{i+1})...(x_{i}-x_{n})}  ,则可以得到在插值区间内的任意x的函数值y为y(x)=L_{n}(x)。从公式中可以看出,生成的多项式与用来插值的数据密切相关,数据变化则函数就要重新计算。

以下为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的每一个对应的点。

你可能感兴趣的:(MATLAB——数值插值之拉格朗日(Lagrange)插值法)