02、MATLAB之数据插值

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_41591279/article/details/95012060

一、一维插值函数

插值函数:yi = interp1(x,y,xi,'method')

yi : xi处的插值结果

x、y :插值节点

xi : 被插值点

method :插值方法(下面四种)

1、‘nearest':最邻近插值

     2、‘1inear':线性插值

     3、‘cubic':立方次插值

     4、‘spline':三次样条插值

     缺省时:分段线性插值。

注意:所有的插值方法都要求x是单调的,并且xi不能够超过xi的范围。

eg:例:在1-12的11小时内,每隔1小时测量一次温度,

   测得的温度依次为:5,8,9,15,25,29,31,30,

   22,25,27,24。试估计每隔1/10小时的温度值。

hours = 1:12 ;
temps = [5 8 9 15 25 29 31 30 22 25 27 24] ;
%plot(hours,temps) ;%为插值前
%hold on
h = 1:0.1:12 ;
t = interp1(hours,temps,h,'spline') ;
%plot(h,t,'r') ;%插值后,线条颜色为红色
plot(hours,temps,'+',hours,temps,'r:',h,t)
xlabel('Hour'),ylabel('Degrees Celsius')  %定义横纵坐标名称

 

二、利用MATLAB做网格节点的插值

插值函数:z = interp2(x0,y0,z0,x,y','method')

    z : 被插值点的函数值

  x0、y0、z0 :插值节点

  x、y : 被插值点

    method :插值方法(下面四种)

    1、‘nearest':最邻近插值

  2、‘1inear':双线性插值

  3、‘cubic':双三次插值

    4、‘spline':三次样条函数

注意事项:要求x0,y0单调;x,y可取为矩阵,

            或x取行向量,y取为列向量,

            x,y的值分别不能超出x0,y0的范围。

eg:例:测得平板表面3*5网格点处的温度分别为:

        82 81 80 82 84

        79 63 61 65 81

        84 84 82 85 86

       试作出平板表面的温度分布曲面z=f(x,y)的图形。 

x = 1:5 ;
y = 1:3 ;
temps = [82 81 80 82 84;79 63 61 65 81;84 84 82 85 86] ;
mesh(x,y,temps) %未插值前的图形
xi = 1:0.1:5 ;
yi = 1:0.1:3 ;
%zi = interp2(x,y,temps,xi,yi','linear');
%zi = interp2(x,y,temps,xi,yi','nearest');
%zi = interp2(x,y,temps,xi,yi','spline');
zi = interp2(x,y,temps,xi,yi','cublic');%插值后的图形
mesh(xi,yi,zi)

 

三、用MATLAB做散点数据的插值计算

插值函数:cz = griddata(x,y,z,cx,cy,'method')

             cz : 被插值点的函数值

             x、y、z :插值节点

             cx、cy : 被插值点

             method :插值方法(下面四种)

                   1、‘nearest':最邻近插值

                   2、‘1inear':双线性插值

                   3、‘cubic':双三次插值

                   4、'V4':MATLAB提供的插值方法

             缺省时:双线性插值

注意:要求cx,cy为插值点坐标矩阵,或者cx取行向量,cy取为列

      eg:  例在某海域测得一些点(x,y)处的水深z由下表给出,

           船的吃水深度为5英尺,在矩形区域(75,200)*(-50,150)

           里的哪些地方船要避免进入。

           x     129 140 103.5 88 185.5 195 105

           y     7.5 141.5 23 147 22.5 137.5 85.5

           z     4 8 6 8 6 8 8

           x     157.5 107.5 77 81 162 162 117.5

           y     -6.5 -81 3 56.5 -66.5 84 -33.5

           z     9 9 8 8 9 4 9

x = [129 140 103.5 88 185.5...
        195 105 157.5 107.5 77 81 162 162 117.5] ;
y = [7.5 141.5 23 147 22.5 137.5...
        85.5 -6.5 -81 3 56.5 -66.5 84 -33.5] ;
z= -[4 8 6 8 6 8 8 9 9 8 8 9 4 9] ;
[cx,cy] = meshgrid(75:5:200,-90:5:150) ;
cz = griddata(x,y,z,cx,cy,'cubic') ;
figure(1) 
mesh(cx,cy,cz) ;
view(-60,30) ;%绘制图形后的视角
figure(2) ;
contour(cx,cy,cz,[-5,-5],'k') %绘制等高线

 

猜你喜欢

转载自blog.csdn.net/qq_41591279/article/details/95012060