问题:已知m*n个节点(xi,yi,zij),i=1,2,3..m,j=1,2,3...n,且x1<x2<...<xm,y1<y2<...<yn.求点(x*,y*)处的插值z*。
对上述问题,MATLAB中提供了二维插值函数interp2,其基本格式为cz=interp2(x,y,z,cx,cy,'method');其中x和y是自变量。x和y的分量值必须是单调递增的。x,y,z的值是已经知道的,cx,cy是但插值的点的坐标,cz是对应的插值。method为可选参数,可以用下面四个值中任选一个:
'nearest':最近邻点插值
'linear':线性插值
'spline':三次样条插值
'cubic':三次插值
'linear'是缺省值
例:已知平板表面3*5的网格处的温度值为
82 79 84
81 63 84
80 61 82
82 65 85
84 81 86
做出平板表面温度分布曲面,在x,y方向上每隔0.2个单位进行插值,画出插值后的图形。
clc;clear;
x=1:3;
y=1:5;
temps=[82 79 84
81 63 84
80 61 82
82 65 85
84 81 86]
[x,y]=meshgrid(x,y);
figure(1);
mesh(x,y,temps);
xlabel('x');
ylabel('y');
figure(2);
xi=1:0.2:3;
yi=1:0.2:5;
[xi,yi]=meshgrid(xi,yi);
zi=interp2(x,y,temps,xi,yi,'cubic');
mesh(xi,yi,zi);
xlabel('x');
ylabel('y');