拉格朗日插值算法实现及代码解析

拉格朗日插值法是一种常用的插值方法,可以根据已知数据点,在数据点之间进行插值,得到一个新的函数,该函数能够很好地逼近原函数。

代码实现

function y =lagrange (x0,y0,x)
  m=length(x);
  n=length(x0);
  for i=1:m
      z=x(i);
      s=0;
      for k=1:n
          p=1.0;
          for j=1:n
              if j~=k
                  p=p*(z-x0(j))/(x0(k)-x0(j));
              end
          end
          s=p*y0(k)+s;
      end
      y(i)=s;
  end
%%%%%%%%%%%%%%%%%%%%

clear;
clc;
clf;
x0=[-1:0.02:1];
y0=1./(1+25*x0.^2);
plot(x0,y0,'b') %绘制原曲线

hold on
x1=linspace(-1,1,11);
y1=1./(1+25*x1.^2);
y0=lagrange(x1,y1,x0);
plot(x0,y0,'--r') %插值曲线 

x1=linspace(-1,1,21);
y1=1./(1+25*x1.^2);
y0=lagrange(x1,y1,x0);
plot(x0,y0,'--g') %插值曲线 

代码解析

函数定义:

function y =lagrange (x0,y0,x)

该函数定义了一个名为 lagrange 的函数,用于计算拉格朗日插值。

  • x0y0 是已知数据点的横坐标和纵坐标向量。
  • x 是需要进行插值的横坐标向量。
  • y 是插值后得到的纵坐标向量。

代码部分:

  1. m=length(x);n=length(x0); 计算输入参数 xx0 的长度。
  2. 外层循环遍历 x 中的每个元素,用于计算每个插值点的值。
  3. 内层循环遍历 x0 中的每个元素,用于计算每个插值点的系数。
  4. s = p * y0(k) + s; 累加每个插值点的系数乘以对应纵坐标值,最终得到该插值点的值。
  5. 最后,将计算得到的插值点值赋给 y 向量。

主程序部分:

  1. x0=[-1:0.02:1];y0=1./(1+25*x0.^2); 定义了原函数的横坐标和纵坐标向量。
  2. 使用 plot(x0,y0,'b') 绘制了原函数曲线。
  3. x1=linspace(-1,1,11);y1=1./(1+25*x1.^2); 定义了两个插值点的集合,并使用 lagrange 函数分别计算了对应的插值曲线。
  4. 使用 plot(x0,y0,'--r')plot(x0,y0,'--g') 绘制了两个插值曲线,红色虚线表示插值点为 11 个的插值曲线,绿色虚线表示插值点为 21 个的插值曲线。

总结

拉格朗日插值法是一种简单易懂的插值方法,在很多领域都有广泛的应用。本文介绍了拉格朗日插值法的原理及实现方法,并通过代码示例展示了如何使用拉格朗日插值算法对数据进行插值。

注意: 当数据点过多时,拉格朗日插值法可能会出现龙格现象,即插值函数在数据点之间出现剧烈波动。因此,在实际应用中,需要根据具体情况选择合适的插值方法。

拉格朗日插值算法实现及代码解析

原文地址: https://www.cveoy.top/t/topic/n1R7 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录