现在的位置: 首页 > 综合 > 正文

Matlab之插值

2013年10月12日 ⁄ 综合 ⁄ 共 1747字 ⁄ 字号 评论关闭

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');

如图:





抱歉!评论已关闭.