matlab数值分析 插值法
1 拉格朗日插值法
function yh=lagrange(x,y,xh)
n=length(x);
m=length(xh);
yh=zeros(1,m);
for j=1:m;
for i=1:n
xp=x([1:i-1 i+1:n]);
yh(j)=yh(j)+y(i)*prod((xh(j)-xp)./(x(i)-xp)); %注意区分yh和y
end
end
调用程序
x=[11,12,13];
y=[2.3979,2.4849,2.5649];
xh=11.75;
yh=lagrange(x,y,xh)
2 牛顿插值法
function yh=newtonPol(x,y,xh)
n=length(x);
p(:,1)=x;
p(:,2)=y;
for j=3:n+1
p(1:n+2-j,j)=diff(p(1:n+3-j,j-1))./(x(j-1:n)-x(1:n+2-j))'; %求差商表 (注意这里有一个 ’ 符号,与差商表不一样的地方)
end
q=p(1,2:n+1)'; %求牛顿法的系数--取第一行
yh=0;
m=1;
yh=q(1);
for i=2:n
m=q(i);
for j=2:i
m=m*(xh-x(j-1)); %求牛顿法中各多项式值(xh-x0)…(xh-xn-1)
end
yh=yh+m;%求和
end
调用程序
x=[11,12,13];
y=[2.3979,2.4849,2.5649];
xh=11.75;
yh= newtonPol(x,y,xh)