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') %插值曲线 

该代码实现了拉格朗日插值法的函数,并对一个函数进行了插值并绘制了插值曲线和原曲线。

逐行分析如下:

  1. function y =lagrange (x0,y0,x) 定义了一个函数 lagrange,输入为三个向量 x0y0x,输出为向量 y

  2. m=length(x); n=length(x0); 确定了 xx0 的长度。

  3. 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 实现了拉格朗日插值法的计算过程。对每一个 x(i) 计算其对应的 y 值,并存入 y(i) 中。

  4. clear; 清空命令窗口。

  5. clc; 清空命令窗口。

  6. clf; 清空图形窗口。

  7. x0=[-1:0.02:1]; y0=1./(1+25*x0.^2); 定义了一个向量 x0 和一个向量 y0,分别为 -1 到 1 之间以 0.02 为间隔的数列和函数 1/(1+25x^2)x0 上的取值。

  8. plot(x0,y0,'b') 绘制出 y0 关于 x0 的图像,用蓝色表示。

  9. hold on 保持当前图形窗口,以便在同一张图上绘制多个曲线。

  10. x1=linspace(-1,1,11); y1=1./(1+25*x1.^2); 定义了一个向量 x1 和一个向量 y1,分别为 -1 到 1 之间等分成 11 份的数列和函数 1/(1+25x^2)x1 上的取值。

  11. y0=lagrange(x1,y1,x0); 对函数 1/(1+25x^2)x1 上的取值进行插值,得到在 x0 上的插值结果,并将其存入 y0 中。

  12. plot(x0,y0,'--r') 绘制出 y0 关于 x0 的图像,用红色虚线表示。

  13. x1=linspace(-1,1,21); y1=1./(1+25*x1.^2); 定义了一个向量 x1 和一个向量 y1,分别为 -1 到 1 之间等分成 21 份的数列和函数 1/(1+25x^2)x1 上的取值。

  14. y0=lagrange(x1,y1,x0); 对函数 1/(1+25x^2)x1 上的取值进行插值,得到在 x0 上的插值结果,并将其存入 y0 中。

  15. plot(x0,y0,'--g') 绘制出 y0 关于 x0 的图像,用绿色虚线表示。

该代码的实现过程可以帮助我们了解拉格朗日插值法的原理和应用。同时,绘制出的图像也可以直观地展示插值效果和插值精度的影响。

拉格朗日插值法代码分析及应用示例

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

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