[x0,y0]=meshgrid(-3:0.25:3);
z=peaks(x0,y0);
[x,y]=meshgrid(-3:0.125:3);
z1=interp2(x0,y0,z,x,y);%默认采用了双线性插值算法。
figure
title("chushi");
surfl(x0,y0,z);
% hold on;
figure
title("chazhi");
surfl(x,y,z1);
axis([-3 3 -3 3 -5 20]);%这个是x的范围是[-3,3]
%yd的范围[-3,3],z的范围[-5,20]
①其中interp2()函数实现了插值,
interp2(x0,y0,z,x,y,‘method’)
method有以下几种方法:
’linear’:双线性插值算法(缺省算法);
’nearest’:最临近插值;
’spline’:三次样条插值;
’cubic’:双三次插值。
②也有一个一维的插值函数interp1()
method:
nearest’:最近邻点插值,直接完成计算;
’linear’:线性插值(缺省方式),直接完成计算;
’spline’:三次样条函数插值。对于该方法,命令interp1 调用函数spline、ppval、mkpp、umkpp。这些命令生成一系列用于分段多项式操作的函数。命令spline 用它们执行三次样条函数插值;
’pchip’:分段三次Hermite 插值。对于该方法,命令interp1 调用函数pchip,用于对向量x 与y 执行分段三次内插值。该方法保留单调性与数据的外形;
’cubic’:与’pchip’操作相同;
’v5cubic’:在MATLAB 5.0 中的三次插值。
对于超出x 范围的xi 的分量,使用方法’nearest’、’linear’、’v5cubic’的插值算法,相应地将返回NaN。对其他的方法,interp1 将对超出的分量执行外插值算法。
我测试了一段
x=[1 2 4];
y=[3 5 8];
a=2.2;
z=interp1(x,y,a);
这个就是用这个插值方法算出x=2.2点处的对应y值
③peaks()
z = peaks(n); % returns an n-by-n matrix
z = peaks(v); % returns an n-by-n matrix, where n = length(v)
% ============================================
z = peaks(x,y); % returns at the given x and y domain
% ensure size(x) == size(y)