您的位置:首页 > 编程语言 > MATLAB

Matlab之插值

2015-07-29 16:43 549 查看
Matlab中有5种基本的插值方法:

nearest:最近邻插值法(平面立体均适用)

linear:线性插值法(interp1默认的插值方法)[b](平面立体均适用)[/b]

spline:三次样条插值法[b](平面立体均适用)[/b]

pchip:分段三次厄米多项式插值法[b](只适用于平面)[/b]

cubic:三次多项式插值法[b](平面立体均适用)[/b]

平面插值:

Matlab中的平面插值函数为interp1:

[plain] view
plaincopy

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是需要插值的横坐标,返回的是插值后的纵坐标



[plain] view
plaincopy

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坐标



进行插值:

[plain] view
plaincopy

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坐标

[plain] view
plaincopy

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

如图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: