首先,MATLAB中常用的三维曲面绘制函数是mesh和surf,这两个函数都要求输入的XYZ都为矩阵
years = 1950:10:1990;
service = 10:10:30;
wage = [ 150.697 199.592 187.625 179.323 195.072; 250.287 203.212 179.092 322.767 226.505;153.706 426.730 249.633 120.281 598.243];
[X, Y] = meshgrid(years, service);
% 三维曲面
figure
surf(X, Y, wage)
years 为 1x5的矩阵;service为 1x3的矩阵;
这里可以看到生成的X和Y变成了meshgrid(years,service)中的3x5矩阵 即years和service对应的网格;
意味着15个xy坐标对应着15个Z坐标,Z与X和Y是同类型矩阵;
可知surf要求输入的数据都为同类型的矩阵(一维向量不行),mesh同理
interup2函数
[XI,YI] = meshgrid(1950:5:1990,10:5:30)
ZI=interp2(X,Y,wage,XI,YI)
% ’linear’:双线性插值算法(缺省算法);
% ’nearest’:最临近插值;
% ’spline’:三次样条插值;
% ’cubic’:双三次插值
surf(XI, YI, ZI)
注意 ZI=interp2(X,Y,wage,XI,YI)这里的X Y wage可以用初始的一维向量替代即years,service;
gridate函数
surf(XI, YI, ZI)
ZI=griddata(X,Y,wage,(1950:5:1990)',10:5:30,'nearest');%插值
% linear’:基于三角形的线性插值(缺省算法);
% ‘cubic’: 基于三角形的三次插值;
% ‘nearest’:最邻近插值法;
% ‘v4’:MATLAB 4 中的griddata 算法。
surf(XI, YI, ZI)
interup2函数和griddate函数的区别
1.首先函数的适用对象不同;
interup2函数要求元数据是x和y即NxM的矩阵 (要求有NxM个数据点)
griddate函数要求元数据可以是矩阵也可以是不成矩阵的散点 即(NxM个或者是N个xyz对应的数据点);
interp2的插值数据必须是矩形域,要求xy规则排列。griddata中x,y,v是包含分散(非均匀)样本点和数据的向量。
2.函数要求输入的数据格式不同;
例ZI=griddata(X,Y,wage,(1950:5:1990)',10:5:30,'nearest');%插值
中的(1950:5:1990)',10:5:30,第一个数据必须使用转置变为列向量
3.griddata更适用一个x对一个y对应一个z的三维散点插值
interup2更适用多个x对多个y对应多个z的三维散点插值