目录
一、一维插值
1、应用条件
“ 已 知 函 数 在 某 区 间(域)内若干点处的值,求函数在该区间(域)内其它点处的值”,
2、插值方法
常用的插值方法有 Lagrange 插值法和Newton 插值法。
1)拉格朗日插值法
拉格朗日插值公式(外文名Lagrange interpolation formula)指的是在节点上给出节点基函数,然后做基函数的线性组合,组合系数为节点函数值的一种插值多项式。
代码
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
2)高次插值的 Runge 现象
插值多项式的次数越高,插值精度越高。
Runge 通过对一个例子的研究发现,上述结论仅仅在插值多项式的次数不超过七时成立;插值多项式的次数超过七时,插值多项式会出现严重的振荡现象,称之为 Runge 现象。
避免 Runge 现象的常用方法是:将插值区间分成若干小区间,在小区间内用低次(二次,三次)插值,即分段低次插值,如样条函数插值。
3、matlab命令
一维插值命令是 interp1, 其基本格式为 yi= interp1(x,y,xi, 'method')。
x,y 为插值点,xi,yi 为被插值点和插值结果,x,y 和 xi,yi 通常为向量;'method'表示 插 值 方 法 : ' n e a r e s t ' — 最 邻 近 插 值 ,'linear'—线性插值, 'spline'—三次样条插值,'cubic'—立方插值,缺省为线性插值。
举例:
x=0:2:24;
y=[12 9 9 10 18 24 28 27 25 20 18 15 13];
x1=13;
y1=interp1(x,y,x1,'spline')
xi=0:1/3600:24;
yi=interp1(x,y,xi, 'spline');
plot(x,y, '*',xi,yi)
x y为插值点,x1为被插值点,y1使用三次样条插值。
xi为第二个被插值点,yi也使用三次样条插值。
plot绘图制作
只执行x1 y1的图象
执行xi yi的图像
二、二维插值
1、matlab命令
二维插值命令是interp2, 基本格式为zi=interp2(x,y,z,xi,yi,'method')。
二维插值命令的使用较复杂。
x,y,z为插值点,z可以理解为被插值函数在(x,y)处的值;xi,yi为被插值点, zi为输出的插值结果,可理解为插值函数在(xi,yi)处的值;x,y为向量,xi,yi为向量或矩阵,而z和zi则为矩阵。
' m e t h o d ' 表 示 插 值 方 法 : ' n e a r e st'—最邻近插值, 'linear'—双线性插值,'spline'—双三次样条插值,'cubi c'—双立方插值,黙认双线性插值。
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);
interp2 中的 xi 为行向量, 而 yi'为列向量, 其实 xi 和 yi 行列不同即可。
xi=1:0.2:5;
yi=1:0.2:3;
zi=interp2(x,y,temps,xi,yi','cubic');
figure(2);
mesh(xi,yi,zi);
plot3(空间曲线), mesh(空间曲面),surf (空间曲面), contour(等高线)是三维作图中的常用命令。mesh 和 surf 的区别是:
mesh 画的是曲面网格图,而 surf 画的是曲面表面图。
figure(3);
contour(xi,yi,zi,20,'r');
[i,j]=find(zi==min(min(zi)));
x=xi(j),y=yi(i),zmin=zi(i,j)
[i,j]=find(zi==max(max(zi)));
x=xi(j),y=yi(i),zmax=zi(i,j)
c o n t o u r ( x , y , z , n ) 的 功 能 是 作 出 由 点
(x,y,z)插值而成曲面的 n 条等高线。
用 meshc 和 surfc 可在曲面下方画等高线。
meshz 和 surfz 是画垂帘图。
程序的最后部分为求最高 (低)点
例二:
在某山区测得一些地点的高程如下表。平面区域为0<x<5600, 0<y<4800试用 Matlab 中的最邻近插值、双线性插 值和 双三 次插 值 3 种方 法 作 出该山区的地貌图和等高线图,并求出最高和最低点。
x=...
y=...
z=...
figure(1);
meshz(x,y,z);
xlabel('X'),ylabel('Y'),zlabel('Z');
[xi,yi]=meshgrid(0:50:5600,0:50:4800);
figure(2);
z1i=interp2(x,y,z,xi,yi,'nearest');
surfc(xi,yi,z1i);
xlabel('X'),ylabel('Y'),zlabel('Z');
figure(3);
z2i=interp2(x,y,z,xi,yi);
surfc(xi,yi,z2i);
xlabel('X'),ylabel('Y'),zlabel('Z');
figure(4);
z3i=interp2(x,y,z,xi,yi,'cubic');
surfc(xi,yi,z3i);
xlabel('X'),ylabel('Y'),zlabel('Z');
figure(5);
subplot(1,3,1),contour(xi,yi,z1i,10,'r');
subplot(1,3,2),contour(xi,yi,z2i,10,'r');
subplot(1,3,3),contour(xi,yi,z3i,10,'r');
程 序 用 “ [xi, yi]= meshgrid(0:50 :5600,0:50:4800);”生成网格点(xi,yi),作用相当于“xi=0:50:5600;yi'=0:50:4800;”,但 meshgrid(x,y)生成的 xi,yi 为同维矩阵,xi 的行均为 x,而 yi 的列均为 y。
2、散乱点插值
前面讨论的插值问题的插值点(x, y)均为网格点 。当 ( x , y ) 为散乱点时,可用griddata(x,y,z,xi,yi, 'method') 命令进行二维插值。