【计算方法数值分析】插值问题
1、 拉格朗日插值
function f=agui_lagrange(x0,y0,x)
%x0为节点向量,y0为节点上的函数值,x为插值点,f返回插值
n=length(x0);
m=length(x);
format long
s=0.0;
for k=1:n
p=1.0;
for j=1:n
if j~=k
p=p*(x-x0(j))/(x0(k)-x0(j));
end
end
s=p*y0(k)+s;
end
f=s;
end
f(0.5)= 0.521089682539683 f(0.7)= 0.758588904761904
f(0.85)= 0.956119446428571
2、 牛顿插值
function yi=agui_newtoninterp(x,y,xi)
%Newton插值方法,给定一系列插值的点(x,y),得到在x=xi处的,牛顿插值多项的值yi
n=length(x);
m=length(y);
if m~=n
error('x,y的长度不一样,请重新输入!');
return
end
A=zeros(n); %定义差商表
A(:,1)=y; %差商表第一列为y
for j=2:n%j为列标
for i=1:(n-j+1)%i为行标
A(i,j)=(A(i+1,j-1)-A(i,j-1))/(x(i+j-1)-x(i));%计算差商表
end
end
disp('差商表为:')
disp(A)
%根据差商表,求对应的牛顿插值多项式在x=xi处的值yi
N(1)=A(1,1);
for j=2:n
T=1;
for i=1:j-1
T=T*(xi-x(i));
end
N(j)=A(1,j)*T;
end
yi=sum(N); %将x=xi带入牛顿插值多项式,得到的yi的值
end
f(0.5)= 0.5211, f(0.7)= 0.7586 f(0.85)= 0.9561
<1>拉格朗日插值法与牛顿插值法都是常用的简便的插值法。但牛顿法插值法则更为简便,与拉格朗日插值多项式相比较,它不仅克服了“增加一个节点时整个计算工作必须重新开始的缺点,而且可以节省乘、除法运算次数。同时,在牛顿插值多项式中用到的差分与差商等概念,又与数值计算的其他方面有着密切的关系。
<2>对于一些计算比较复杂的函数,牛顿插值法就比拉格朗日插值法具有优势
<3>由实验结果可看出拉格朗日插值与牛顿插值最终计算的实验结果基本一致,只是涉及到最终结果精度的问题,所以二者各自有各自的特点,依照函数而定适用对象。