1、拉格朗日插值
新建如下函数:
function y=lagrange(x0,y0,x)%拉格朗日插值函数%n 个节点数据以数组 x0, y0 输入(注意 Matlat 的数组下标从1开始),%m 个插值点以数组 x 输入,输出数组 y 为 m 个插值
n=length(x0);m=length(x);for i=1:m
z=x(i);
s=0.0;for k=1:n
p=1.0;for j=1:nif j~=k
p=p*(z-x0(j))/(x0(k)-x0(j));
end
end
s=p*y0(k)+s;
end
y(i)=s;
end
应用实例:
x0=1:1:20;
y0=x0.^2-20*x0-5;
x=1:0.1:20;
z=lagrange(x0,y0,x);
plot(x,z,':',x0,y0,'ko');
运行结果:
2、分段线性插值
MATLAB现成的插值函数为interp1,其调用格式为: yi= interp1(x,y,xi,'method')
其中x,y为插值点,yi为在被插值点xi处的插值结果;x,y为向量, 'method'表示采用的插值方法,包括:
'method':是最近项插值; 'linear':线性插值;(默认)
'spline':逐段3次样条插值; (下面的三次样条插值会用到) 'cubic':保凹凸性3次插值
'pchip':分段三次Hermite 插值。
例如:在一天24小时内,从零点开始每间隔2小时测得的环境温度数据分别为
12,9,9,1,0,18 ,24,28,27,25,20,18,15,13,
推测中午12点(即13点)时的温度.
x=0:2:24;
y=[12,9,9,10,18,24,28,27,25,20,18,15,13];
x1=0:0.5:24;
y1=interp1(x,y,x1,'linear');
plot(x,y,'bo',x1,y1,'r:');
运行结果:
3、埃尔米特插值
如果要求插值函数不仅在节点处与函数同值,而且要求它与函数有相同的一阶、二阶甚至高阶导数值,这就是埃尔米特插值问题。
已知f(x)的n+1个节点的函数值f(xi)以及导数值f`(xi),可得一个至多n+1次的多项式H(x),即her