拉格朗日插值法代码分析及应用示例
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,输入为三个向量x0、y0、x,输出为向量y。 -
m=length(x);n=length(x0);确定了x和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实现了拉格朗日插值法的计算过程。对每一个x(i)计算其对应的y值,并存入y(i)中。 -
clear;清空命令窗口。 -
clc;清空命令窗口。 -
clf;清空图形窗口。 -
x0=[-1:0.02:1];y0=1./(1+25*x0.^2);定义了一个向量x0和一个向量y0,分别为 -1 到 1 之间以 0.02 为间隔的数列和函数1/(1+25x^2)在x0上的取值。 -
plot(x0,y0,'b')绘制出y0关于x0的图像,用蓝色表示。 -
hold on保持当前图形窗口,以便在同一张图上绘制多个曲线。 -
x1=linspace(-1,1,11);y1=1./(1+25*x1.^2);定义了一个向量x1和一个向量y1,分别为 -1 到 1 之间等分成 11 份的数列和函数1/(1+25x^2)在x1上的取值。 -
y0=lagrange(x1,y1,x0);对函数1/(1+25x^2)在x1上的取值进行插值,得到在x0上的插值结果,并将其存入y0中。 -
plot(x0,y0,'--r')绘制出y0关于x0的图像,用红色虚线表示。 -
x1=linspace(-1,1,21);y1=1./(1+25*x1.^2);定义了一个向量x1和一个向量y1,分别为 -1 到 1 之间等分成 21 份的数列和函数1/(1+25x^2)在x1上的取值。 -
y0=lagrange(x1,y1,x0);对函数1/(1+25x^2)在x1上的取值进行插值,得到在x0上的插值结果,并将其存入y0中。 -
plot(x0,y0,'--g')绘制出y0关于x0的图像,用绿色虚线表示。
该代码的实现过程可以帮助我们了解拉格朗日插值法的原理和应用。同时,绘制出的图像也可以直观地展示插值效果和插值精度的影响。
原文地址: https://www.cveoy.top/t/topic/n1IS 著作权归作者所有。请勿转载和采集!