Lagrange插值

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