拉格朗日插值法代码分析:龙格现象与插值误差
以下程序在运行过程中,虽然没有语法错误,但存在数值计算误差。
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') %插值曲线
程序本身没有语法错误,但是存在数值计算误差。由于拉格朗日插值多项式存在龙格现象,当插值点数量增加时,插值曲线在边界处出现振荡现象,导致插值误差增大。
因此,使用更高效的插值方法,如分段线性插值或样条插值,可以减小插值误差。
原文地址: https://www.cveoy.top/t/topic/nZFj 著作权归作者所有。请勿转载和采集!