转自:http://blog.csdn.net/htttw/article/details/7251459
Matlab之插值
Matlab中有5种基本的插值方法:
nearest:最近邻插值法(平面立体均适用)
linear:线性插值法(interp1默认的插值方法)(平面立体均适用)
spline:三次样条插值法(平面立体均适用)
pchip:分段三次厄米多项式插值法(只适用于平面)
cubic:三次多项式插值法(平面立体均适用)
平面插值:
Matlab中的平面插值函数为interp1:
- t=1900:10:1990;
- p=[75.995 91.972 105.711 123.203 131.669 150.697 179.323 203.212 226.505 249.633];
- x=1900:1990;
- y1=interp1(t, p, x); %默认为linear
- y2=interp1(t, p, x, 'nearest');
- y3=interp1(t, p, x, 'spline');
- y4=interp1(t, p, x, 'pchip');
- y5=interp1(t, p, x, 'cubic');
- subplot(2, 3, 1);
- plot(x, y1, t, p, 'ro');
- title('linear');
- subplot(2, 3, 2);
- plot(x, y2, t, p, 'ro');
- title('nearest');
- subplot(2, 3, 3);
- plot(x, y3, t, p, 'ro');
- title('spline');
- subplot(2, 3, 4);
- plot(x, y4, t, p, 'ro');
- title('pchip');
- subplot(2, 3, 5);
- plot(x, y5, t, p, 'ro');
- title('cubic');
注意:interp1(t, p, x)中的(t, p)是对应的精确坐标,x是需要插值的横坐标,返回的是插值后的纵坐标
- disp(' year linear nearest spline pchip cubic ');
- for i=10:20
- k(i-9, 1) = 1900+i;
- k(i-9, 2) = y1(i+1);
- k(i-9, 3) = y2(i+1);
- k(i-9, 4) = y3(i+1);
- k(i-9, 5) = y4(i+1);
- k(i-9, 6) = y5(i+1);
- end
- disp(round(k)); %取整
结果如下:
三维插值:
Matlab中的三维插值函数为interp2:
注意:interp2(x, y, z, x1, y1, method)中的(x, y, z)是对应的精确坐标,x1是需要插值的x坐标,y1是需要插值的y坐标,method可以省略,表示那5种插值方法。返回的是插值后的z坐标
对进行插值:
- x=-3*pi:0.5*pi:3*pi;
- y=x;
- [X, Y] = meshgrid(x, y);
- Z=sin(sqrt(X.^2 + Y.^2))./sqrt(X.^2 + Y.^2);
- subplot(2, 3, 1);
- mesh(X, Y, Z);
- title('origin');
- x=-3*pi:0.1*pi:3*pi;
- y=x;
- [X1, Y1] = meshgrid(x, y);
- Z1=interp2(X, Y, Z, X1, Y1); %默认用linear法拟合
- subplot(2, 3, 2);
- mesh(X1, Y1, Z1);
- title('linear');
- Z2=interp2(X, Y, Z, X1, Y1, 'nearest');
- subplot(2, 3, 3);
- mesh(X1, Y1, Z2);
- title('nearest');
- Z3=interp2(X, Y, Z, X1, Y1, 'spline');
- subplot(2, 3, 4);
- mesh(X1, Y1, Z3);
- title('spline');
- Z4=interp2(X, Y, Z, X1, Y1, 'cubic');
- subplot(2, 3, 5);
- mesh(X1, Y1, Z4);
- title('cubic');
除了interp1和interp2插值函数外,Matlab还提供了另外几个插值函数:
1:三次样条插值
2:牛顿插值(多项式插值)
3:切比雪夫插值(Chebyshev)
三次样条插值:
Y=spline(x, y, X)
其中(x, y)是精确点的坐标,X是要插值的x坐标,返回的Y是插值求出的y坐标
- x=1:5;
- y=[1 3 4 3 4];
- X=0:0.1:6;
- Y=spline(x, y, X);
- plot(X, Y, x, y, 'ro');
如图: