函数:
函数:
function y=f(x)
y=5./(1+x.^2);
end
拉格朗日插值法函数:
function [c,L]=lagran(x,y)
w=length(x);
n=w-1;
l=zeros(w,w);
for k=1:n+1
v=1;
for j=1:n+1
if k~=j
v=conv(v,poly(x(j)))/(x(k)-x(j));
end
end
l(k,:)=v;
end
c=y*l;
%牛顿插值
function [c,D]=newpoly(x,y)
n=length(x);
D=zeros(n,n);
D(:,1)=y';
for j=2:n
for k=j:n
D(k,j)=(D(k,j-1)-D(k-1,j-1))/(x(k)-x(k-j+1));
end
end
c=D(n,n);
for k=(n-1):-1:1
c=conv(c,poly(x(k)));
m=length(c);
c(m)=c(m)+D(k,k);
end
x=-5:5;
c=newpoly(x,f(x));
x0=-5:0.01:5;
y0=polyval(c,x0);
plot(x0,y0)
title('牛顿插值');
三次样条插值:
x=-5:0.1:5;
c=spline(x,f(x),-5:0.1:5);
plot(x,c,'*-');
title('三次样条插值')
结果: