一、一维插值函数
插值函数:yi = interp1(x,y,xi,'method')
yi : xi处的插值结果
x、y :插值节点
xi : 被插值点
method :插值方法(下面四种)
1、‘nearest':最邻近插值
2、‘1inear':线性插值
3、‘cubic':立方次插值
4、‘spline':三次样条插值
缺省时:分段线性插值。
注意:所有的插值方法都要求x是单调的,并且xi不能够超过xi的范围。
eg:例:在1-12的11小时内,每隔1小时测量一次温度,
测得的温度依次为:5,8,9,15,25,29,31,30,
22,25,27,24。试估计每隔1/10小时的温度值。
hours = 1:12 ;
temps = [5 8 9 15 25 29 31 30 22 25 27 24] ;
%plot(hours,temps) ;%为插值前
%hold on
h = 1:0.1:12 ;
t = interp1(hours,temps,h,'spline') ;
%plot(h,t,'r') ;%插值后,线条颜色为红色
plot(hours,temps,'+',hours,temps,'r:',h,t)
xlabel('Hour'),ylabel('Degrees Celsius') %定义横纵坐标名称
二、利用MATLAB做网格节点的插值
插值函数:z = interp2(x0,y0,z0,x,y','method')
z : 被插值点的函数值
x0、y0、z0 :插值节点
x、y : 被插值点
method :插值方法(下面四种)
1、‘nearest':最邻近插值
2、‘1inear':双线性插值
3、‘cubic':双三次插值
4、‘spline':三次样条函数
注意事项:要求x0,y0单调;x,y可取为矩阵,
或x取行向量,y取为列向量,
x,y的值分别不能超出x0,y0的范围。
eg:例:测得平板表面3*5网格点处的温度分别为:
82 81 80 82 84
79 63 61 65 81
84 84 82 85 86
试作出平板表面的温度分布曲面z=f(x,y)的图形。
x = 1:5 ;
y = 1:3 ;
temps = [82 81 80 82 84;79 63 61 65 81;84 84 82 85 86] ;
mesh(x,y,temps) %未插值前的图形
xi = 1:0.1:5 ;
yi = 1:0.1:3 ;
%zi = interp2(x,y,temps,xi,yi','linear');
%zi = interp2(x,y,temps,xi,yi','nearest');
%zi = interp2(x,y,temps,xi,yi','spline');
zi = interp2(x,y,temps,xi,yi','cublic');%插值后的图形
mesh(xi,yi,zi)
三、用MATLAB做散点数据的插值计算
插值函数:cz = griddata(x,y,z,cx,cy,'method')
cz : 被插值点的函数值
x、y、z :插值节点
cx、cy : 被插值点
method :插值方法(下面四种)
1、‘nearest':最邻近插值
2、‘1inear':双线性插值
3、‘cubic':双三次插值
4、'V4':MATLAB提供的插值方法
缺省时:双线性插值
注意:要求cx,cy为插值点坐标矩阵,或者cx取行向量,cy取为列
eg: 例在某海域测得一些点(x,y)处的水深z由下表给出,
船的吃水深度为5英尺,在矩形区域(75,200)*(-50,150)
里的哪些地方船要避免进入。
x 129 140 103.5 88 185.5 195 105
y 7.5 141.5 23 147 22.5 137.5 85.5
z 4 8 6 8 6 8 8
x 157.5 107.5 77 81 162 162 117.5
y -6.5 -81 3 56.5 -66.5 84 -33.5
z 9 9 8 8 9 4 9
x = [129 140 103.5 88 185.5...
195 105 157.5 107.5 77 81 162 162 117.5] ;
y = [7.5 141.5 23 147 22.5 137.5...
85.5 -6.5 -81 3 56.5 -66.5 84 -33.5] ;
z= -[4 8 6 8 6 8 8 9 9 8 8 9 4 9] ;
[cx,cy] = meshgrid(75:5:200,-90:5:150) ;
cz = griddata(x,y,z,cx,cy,'cubic') ;
figure(1)
mesh(cx,cy,cz) ;
view(-60,30) ;%绘制图形后的视角
figure(2) ;
contour(cx,cy,cz,[-5,-5],'k') %绘制等高线