在前面介绍了学习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,方便观察与原图的差别。
插值后的图:文章来源:https://www.toymoban.com/news/detail-516063.html
今天的学习内容结束!!文章来源地址https://www.toymoban.com/news/detail-516063.html
到了这里,关于(每日一练)MATLAB二维插值的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!