Matlab插值计算

计算插值的软件很多,这里我们只介绍如何用MATLAB做一维插值和高维插值.

4.4.1  一维插值 

   MATLAB中的插值函数为interp1(),其调用格式为 

       yi=interp1(x,y,xi, 'method')

其中x,y为观测数据点,xi为插值(自变量)向量,yi为xi的插值结果(函数值).'method '表示采用的插值方法.MATLAB提供的插值方法有几种:   'nearest'    最邻近插值; 'linear '线性插值; 'spline'  三次样条插值; 'cubic ' 立方插值.缺省时表示线性插值.

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

     例4.2  在一天24小时内,从零点开始每间隔2小时测得的环境温度为(摄氏度) 

                                12,9,9,10,18,24,28,27,25,20,18,15,13

推测在每一秒时的温度.并利用不同的插值方法描绘温度曲线 

    键入: 

x=0:2:24;

y=[12 9 9 10 18 24 28 27 25 20 18 15 13]; 

xi=0:1/3600:24; 

                  

yi=interp1(x,y,xi,'nearest');

hold on

plot(xi,yi,'r');

yi=interp1(x,y,xi,'linear');

plot(xi,yi,'g');

yi=interp1(x,y,xi,'spline');

plot(xi,yi,'b');

yi=interp1(x,y,xi,'cubic');

plot(xi,yi,'y');

 Matlab插值计算_第1张图片

还有其他的插值函数,如 interplq ,interpft, spline, intep2, interp3, interpN.

4.4.2    高维插值 

        N维插值函数 interpN( )

其中N可以为2,3,…,如N=2为二维插值,调用格式为

                                  zi=interp2(x,y,z,Xi,Yi,’method’) 

其中x,y为横纵坐标上的坐标点,{(x,y)}=mashgrid(x,y)生成平面网格点,z为观测到的在网格点上的二元函数值.{(x,y,z)}构成空间插值节点.引入两个向量xi,yi.xi为横坐标上的插值点,yi为纵坐标上的插值点.便可给出

    [Xi,Yi]=meshgrid(xi,yi)

zi为新的或者是加细了的网格点上产生的插值结果(函数值).

   'method'   表示采用的插值方法.`nearest`   最邻近插值,`linear`线性插值,`cubic`双三次插值.缺省时表示线性插值.所有的插值方法都要求x和y是单调的网格,x和y可以是等距的也可以是不等距的.

   例如,产生一个山顶函数peaks曲面.

        1)产生peaks的粗糙近似山顶曲面

        [x,y,z]=peaks(10);

        hold on

        mesh(x,y,z)

Matlab插值计算_第2张图片

        2)通过插值作出更加精细的山顶曲面

    xi=-3:.1:3;

    yi=xi;

        [Xi,Yi]=meshgrid(xi,yi);

         Zi=interp2(x,y,z,Xi,Yi,`cubic`);

        mesh(Xi,Yi,Zi)

 

Matlab插值计算_第3张图片    例4.3   气旋变化情况的可视化

    表4.1  是气象学家测量得到的气象资料,它们分别表示在南半球地区按不同纬度、不同月份的平均气旋数字.根据这些数据,绘制出气旋分布曲面图形.

    解   下面用二维(interp2)三次(cubic)插值方法,可以得到不同月份按纬度变化的气旋值(插值结果),然后再作出其可视化图形,如图4.1MATLAB程序如下:

x=1:12;  

y=5:10:85;

z1=[2.4  1.6  2.4  3.2  1.0  0.5  0.4  0.2  0.5  0.8   2.4  3.6];

z2=[18.7 21.4   16.2   9.2  2.8  1.7  1.4  2.4  5.8  9.2  10.3  16];

z3=[20.8  18.5  18.2  16.5  12.9  10.1  8.3  11.2  12.5  21.1  23.9  25.5];

z4=[22.1 20.1  20.5  25.1  29.2  32.6  33.0  31.0  28.6  32.0   28.1  25.6];

z5=[37.3  28.8  27.8  37.2  40.3  41.7  46.2  39.9  35.9  40.3  38.2  43.4];

z6=[48.2  36.6  35.5  40  37.6  35.4  35  34.7  35.7  39.5  40  41.9];

z7=[25.6  24.2  25.5  24.6  21.1  22.2  20.2  21.2  22.6  28.5  25.3  24.3];

z8=[5.3  5.3  5.4  4.9  4.9  7.1  5.3  7.3  7  8.6  6.3  6.6 ];

z9=[0.3  0  0  0.3  0  0  0.1  0.2  0.3  0  0.1  0.3];

z=[z1;z2;z3;z4;z5;z6;z7;z8;z9]; 

[xi,yi]=meshgrid(1:12,5:1:85);

zi=interp2(x,y,z,xi,yi,'cudic');

mesh(xi,yi,zi)

xlabel('月份'),ylabel('纬度'),zlabel('气旋'),

axis([0  12  0  90  0 50])

title('南半球气旋可视化图形')

 

Matlab插值计算_第4张图片 

还有两个二维插值函数e01sef和e01sff,它们分别被用于求散点数据的插值函数和插值函数值,通常是两者配合使用,其调用格式为:

    [fnodes,a,rnw,b,c]=e01sef(x,y,z);

    [pf(i,j),ifail]=e01sff(x,y,z,rnw,fnodes,px(j),py(i);

其中x,y,z为插值节点,均为向量;px(j),py(i)为被插值点;pf(I,j)为被插值. 

  

                   表4.1 南半球地区按不同纬度     不同月份的平均气旋数据

             0-10      10-20      20-30     30-40     40-50     50-60     60-70     70-80     80-90

1月       2.4        18.7         20.8        22.1       37.3      48.2         25.6        5.3         0.3

2月       1.6        21.4         18.5        20.1       28.8      36.6         24.2        5.3          0

3月       2.4        16.2         18.2        20.5       27.8      35.5         25.5        5.4          0

4月       3.2         9.2          16.6        25.1       37.2      40            24.6        4.9         0.3

5月       1.0         2.8          12.9        29.2       40.3      37.6         21.1        4.9          0

6月    0.5         1.7          10.1        32.6       41.7      35.4         22.2         7.1         0

7月       0.4        1.4           8.3          33.0       46.2        35          20.2        5.3         0.1

8月       0.2        2.4          11.2         31.0       39.9      34.7         21.2        7.3         0.2

9月       0.5        5.8          12.5         28.6       35.9      35.7         22.6          7          0.3

10月   0.8        9.2          21.1        32.0       40.3      39.5         28.5         8.6          0

11月      2.4       10.3         23.9        28.1       38.2       40           25.3         6.3        0.1

12月   3.6        16           25.5         25.6      43.4       41.9        24.3         6.6         0.3 

点(px(j),py(j)处的插值结果,其他输出参数涉及插值算法,可以不用了

你可能感兴趣的:(编程,Matlab,转载,学习)