Matlab之插值

转自:http://blog.csdn.net/htttw/article/details/7251459


Matlab之插值


Matlab中有5种基本的插值方法:

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

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

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

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

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



平面插值:

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

[plain]  view plain copy
  1. t=1900:10:1990;  
  2. p=[75.995 91.972 105.711 123.203 131.669 150.697 179.323 203.212 226.505 249.633];  
  3. x=1900:1990;  
  4. y1=interp1(t, p, x);              %默认为linear  
  5. y2=interp1(t, p, x, 'nearest');  
  6. y3=interp1(t, p, x, 'spline');  
  7. y4=interp1(t, p, x, 'pchip');  
  8. y5=interp1(t, p, x, 'cubic');  
  9. subplot(2, 3, 1);  
  10. plot(x, y1, t, p, 'ro');  
  11. title('linear');  
  12. subplot(2, 3, 2);  
  13. plot(x, y2, t, p, 'ro');  
  14. title('nearest');  
  15. subplot(2, 3, 3);  
  16. plot(x, y3, t, p, 'ro');  
  17. title('spline');  
  18. subplot(2, 3, 4);  
  19. plot(x, y4, t, p, 'ro');  
  20. title('pchip');  
  21. subplot(2, 3, 5);  
  22. plot(x, y5, t, p, 'ro');  
  23. title('cubic');  


注意:interp1(t, p, x)中的(t, p)是对应的精确坐标,x是需要插值的横坐标,返回的是插值后的纵坐标



[plain]  view plain copy
  1. disp('        year        linear      nearest     spline      pchip       cubic ');  
  2. for i=10:20  
  3.   k(i-9, 1) = 1900+i;  
  4.   k(i-9, 2) = y1(i+1);  
  5.   k(i-9, 3) = y2(i+1);  
  6.   k(i-9, 4) = y3(i+1);  
  7.   k(i-9, 5) = y4(i+1);  
  8.   k(i-9, 6) = y5(i+1);  
  9. end  
  10. disp(round(k));     %取整  


结果如下:




三维插值:

Matlab中的三维插值函数为interp2:

注意:interp2(x, y, z, x1, y1, method)中的(x, y, z)是对应的精确坐标,x1是需要插值的x坐标,y1是需要插值的y坐标,method可以省略,表示那5种插值方法。返回的是插值后的z坐标


进行插值:

[plain]  view plain copy
  1. x=-3*pi:0.5*pi:3*pi;  
  2. y=x;  
  3. [X, Y] = meshgrid(x, y);  
  4. Z=sin(sqrt(X.^2 + Y.^2))./sqrt(X.^2 + Y.^2);  
  5. subplot(2, 3, 1);  
  6. mesh(X, Y, Z);  
  7. title('origin');  
  8.   
  9.   
  10. x=-3*pi:0.1*pi:3*pi;  
  11. y=x;  
  12. [X1, Y1] = meshgrid(x, y);  
  13.   
  14.   
  15. Z1=interp2(X, Y, Z, X1, Y1);            %默认用linear法拟合  
  16. subplot(2, 3, 2);  
  17. mesh(X1, Y1, Z1);  
  18. title('linear');  
  19.   
  20. Z2=interp2(X, Y, Z, X1, Y1, 'nearest');  
  21. subplot(2, 3, 3);  
  22. mesh(X1, Y1, Z2);  
  23. title('nearest');  
  24.   
  25. Z3=interp2(X, Y, Z, X1, Y1, 'spline');  
  26. subplot(2, 3, 4);  
  27. mesh(X1, Y1, Z3);  
  28. title('spline');  
  29.   
  30. Z4=interp2(X, Y, Z, X1, Y1, 'cubic');  
  31. subplot(2, 3, 5);  
  32. mesh(X1, Y1, Z4);  
  33. title('cubic');  






除了interp1和interp2插值函数外,Matlab还提供了另外几个插值函数:

1:三次样条插值

2:牛顿插值(多项式插值)

3:切比雪夫插值(Chebyshev)



三次样条插值:

Y=spline(x, y, X)

其中(x, y)是精确点的坐标,X是要插值的x坐标,返回的Y是插值求出的y坐标

[plain]  view plain copy
  1. x=1:5;  
  2. y=[1 3 4 3 4];  
  3. X=0:0.1:6;  
  4. Y=spline(x, y, X);  
  5. plot(X, Y, x, y, 'ro');  

如图:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值