在节点上给出节点基函数,然后做基函数的线性组合,组合系数为节点函数值的一种插值多项式
过 ( x 1 , y 1 ) , ( x 2 , y 2 ) , ( x 3 , y 3 ) (x_1,y_1),(x_2,y_2),(x_3,y_3) (x1,y1),(x2,y2),(x3,y3)的二次曲线可以拆分成三个曲线之和
①过 ( x 1 , 1 ) , ( x 2 , 0 ) , ( x 3 , 0 ) (x_1,1),(x_2,0),(x_3,0) (x1,1),(x2,0),(x3,0)的 f ( x 1 ) f(x_1) f(x1)
②过 ( x 1 , 0 ) , ( x 2 , 1 ) , ( x 3 , 0 ) (x_1,0),(x_2,1),(x_3,0) (x1,0),(x2,1),(x3,0)的 f ( x 1 ) f(x_1) f(x1)
③过 ( x 1 , 0 ) , ( x 2 , 0 ) , ( x 3 , 1 ) (x_1,0),(x_2,0),(x_3,1) (x1,0),(x2,0),(x3,1)的 f ( x 1 ) f(x_1) f(x1)
则原函数 f ( x ) f(x) f(x)可写为 y 1 f ( x 1 ) + y 2 f ( x 2 ) + y 3 f ( x 3 ) y_1f(x_1)+y_2f(x_2)+y_3f(x_3) y1f(x1)+y2f(x2)+y3f(x3)
同样的任意一个多项式都可以写成
f ( x ) = ∑ i = 0 k y ∏ j ≠ i x − x j x i − x j f(x)=\sum\limits_{i=0}^ky\prod_{j\not= i}\frac{x-x_j}{x_i-x_j} f(x)=i=0∑kyj=i∏xi−xjx−xj
高次拟合边缘处会产生Runge现象,因此不应使用七次以上的插值。
避免Runge现象的常用方法是,将插值区间分成若干小区间,在小区间内用低次的插值
一维插值的命令是interp1
,其基本格式为yi=interp1(x,y,xi,'method')
其中x,y表示已知的点坐标,xi表示待插的坐标,‘method’是选择的插值方法
'nearest'
——最邻近插值
'linear'
——线性插值
'spline'
——三次样条插值
'cubic'
——立方插值
示例
例
lagrange插值的函数部分
function y=lagrange(x0,y0,x)
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: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
代码主体部分,制作了一个由三种不同插值方法构造的函数图像
拟合部分:
x0=[0 3 5 7 9 11 12 13 14 15];
y0=[0 1.2 1.7 2 2.1 2 1.8 1.2 1 1.6];
x=0:0.1:15;
y1=lagrange(x0,y0,x);
y2=interp1(x0,y0,x);
y3=interp1(x0,y0,x,'spline');
绘图部分
subplot(3,1,1);
plot(x0,y0,'k+',x,y1,'r');
grid;
title('lagrange');
subplot(3,1,2);
plot(x0,y0,'k+',x,y2,'r');
grid;
title('piecewise linear');
subplot(3,1,3);
plot(x0,y0,'k+',x,y3,'r');
grid;
title('spline');
二维插值命令是interp2
,基本格式为zi=interp2(x,y,z,xi,yi,'method')
其中z可以理解为被插值函数在(x,y)处的值;xi,yi为被插值点,zi为输出的插值结果;
'nearest'
——最邻近插值
'linear'
——双线性插值
'spline'
——双三次样条插值
'cubic'
——双立方插值
示例
数据输入
x=1:5;
y=1:3;
temps=[82 81 80 82 84;
79 63 61 65 81;
84 84 82 85 86];
figure(1);
mesh(x,y,temps);
插值
xi=1:0.2:5;
yi=1:0.2:3;
zi=interp2(x,y,temps,xi,yi','cubic');
figure(2);
mesh(xi,yi,zi);%插值后的图像
figure(3);
contour(xi,yi,zi,20,'r');%等高线,20表示有20条
说明:
plot3(空间曲线),mesh(空间曲面),
surf(空间曲面),contour(等高线)是三维作图中的常用命令
mesh带有网格,而surf仅有曲面表面
之前的插值问题都是网格点,当(x,y)为散乱点时,可用griddata(x,y,z,xi,yi,'method')
命令
当等高线命令为contour(xi,yi,zi,[k,k],'b')
的形式时,表示画出高度为k的等高线