Lagrange插值在生产实践与科学实验中的应用非常多,然而,在MATLAB中没有专门针对Lagrange插值的插值函数。为此,下面编写了Lagrange插值的M文件。下面先介绍一下Lagrange插值的公式。
设函数f在n+1个相异点x0,x1,…,xn上的函数值f(x0),f(x1),…,f(xn)是已知的,则可以利用n次Lagrange插值多项式,求出插值区间内任意x处的函数值y。通过下面的公式求得:
\[f(x)=\sum_{i=0}^{n} {{f}_{i}}\prod_{\begin{matrix} j=0 \\ j\neq i \end{matrix}}^{n} {\frac{x-{x}_{j}}{{x}_{i}-{x}_{j}}}\]
于是可以编写Lagrange插值的M文件Lagrange.m,如下所示:
code.matlab
function s=Lagrange(x,y,x0)
% Lagrange插值,x和y为已知的插值点及其函数值
% x0为要求的插值点的x值
nx=length(x);
ny=length(y);
if nx~=ny
warning('向量x与y的长度应该相同')
return
end
m=length(x0);
% 按照公式,对要求的插值点向量x0的每个元素进行计算
for i=1:m
t=0.0;
for j=1:nx
u=1.0;
for k=1:nx
if k~=j
u=u*(x0(i)-x(k))/(x(j)-x(k));
end
end
t=t+u*y(j);
end
s(m)=t;
end
return
编好M文件以后,就可以用Lagrange插值函数进行插值计算了。
【例12】根据x和y的数据求1.4,2.5和3.7这3个点上的值。
code.matlab
>> x=[1 2 3 4 5];
>> y=[2 4 6 8 10];
>> Lagrange(x,y,[1.4 2.5 3.7])
ans =
0 0 7.4000
重新给定x和y的数据,求0.6处的值。
code.matlab
>> x=[0.4 0.5 0.7 0.8];
>> y=[-0.916291 -0.693147 -0.356675 -0.223144];
>> Lagrange(x,y,0.6)
ans =
-0.5100