(每日一练)MATLAB二维插值

在前面介绍了学习MATLAB的一维插值方法,今天来学习MATLAB二维插值方法。

        首先来看二维插值函数的使用格式:

z1=interp2(x,y,z,x1,y1,'method')

        其中x , y , z分别是我们给定的三个同维矩阵,x , y , z三者一 一对应构成我们需要的网格数据,x1,y1即是我们要插值点对应的坐标,z1是同维数的矩阵,称为插值点。也就是说已知x , y来求 z 的值。‘method‘是插值使用的方法,二维插值的方法有‘linear’(双线性插值),‘nearest’(最临近点插值),‘spline’(三次样条插值),‘cubic’(双立方插值)。

         注意:x,y,z三者同维矩阵,但不和x1,y1,z1同维

        要进行插值,我们得定义需要的数据:确定x , y , z的值。在此我们使用meshgrid()函数来生成直角平面中的网格坐标。

[x,y]=meshgrid(0:3,0:3)

        这样我们就得到了两个同维的矩阵,通过发现x经过转置后即为y,我们可以理解为将行坐标和列坐标拆开,然后再分别存储到两个矩阵当中,一旦x , y相结合,便可以表示为坐标矩阵。

        随后,我们来定义z的值,因为x , y , z必须是同维数矩阵,所以我们定义z时要注意维数。如上图,x,y,z皆为四行四列的方阵,并且x,y对应一个z,例如x,y=(0 , 0)对应着z=1;x,y=(1 , 0)对应着z=2,以此类推,x和y相应位置组成的坐标点,对应着相应位置的z点。

代码如下:

clc;clear;
[x,y]=meshgrid(0:3,0:3)
z=[1,2,3,4
   5,6,7,8
   9,10,11,12
   13,14,15,16]
surf(x,y,z)
xlabel('x');ylabel('y');zlabel('z')

效果图:

         接下来,主角登场,我们开始对原数据进行插值

代码如下:

clc;clear;
[x,y]=meshgrid(0:3,0:3) %也可meshgrid(0:1:3,0:1:3),方便理解
z=[1,2,3,4
   5,6,7,8
   9,10,11,12
   13,14,15,16]
% surf(x,y,z)
[x1,y1]=meshgrid(0:0.1:1,0:0.1:1)
z1=interp2(x,y,z,x1,y1,'spline')
surf(x2,y2,z2)
xlabel('x');ylabel('y');zlabel('z')

        在上面我们定义了x,y的范围是[0:3],间隔为1,所以x1,y1的范围不能超过这个范围,这里我们间隔设为0.1,方便观察与原图的差别。

插值后的图:

        今天的学习内容结束!!

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值