【Matlab】如何对二维矩阵进行线性/非线性插值?

  • Post author:
  • Post category:其他


在这里插入图片描述



1.Introduction

最近又遇到了矩阵插值(重采样)的问题,在最开始写博客的时候就写了篇关于

Excel

重采样的文章,不过在逐渐熟悉

Matlab

的过程中,还是决定看看能不能编程自动实现,不出所料,Matlab果然是万能的。如下图所示,本文以3×3为例,将其插值到9×9。

在这里插入图片描述



2.Materials and methods

首先,最简单的插值即线性插值,可以把上图的过程理解为两步。

(1)对每两列之间求均值并插入其中,可多次重复

(1)对每两行之间求均值并插入其中,可多次重复

在这里插入图片描述

如果每次都一步步手动计算那真的是累死了(上面这张图做的我更爱Matlab了),所以我们接下来使用

Matlab

全自动完成上述操作。代码如下。

A = [1 2 3;4 5 6;7 8 9];	% 生成3×3原始矩阵

x = 1:4:9;					% 原始矩阵插值后的x轴坐标位置,即第159个    
y = 1:4:9;					% y轴坐标含义同上
[X,Y] = meshgrid(x,y);		% 过渡

x = 1:9;					% 插值后矩阵的x轴数值,即[1 2 3 4 5 6 7 8 9]
y = 1:9;					% y轴坐标含义同上
[Xq,Yq] = meshgrid(x,y);	% 过渡

B = interp2(X,Y,A,Xq,Yq); 	% 生成线性插值后的矩阵



3. Results and discussion

代码运行结果如下图,代码中具体变量含义和格式,可以直接在工作区查看,在此不做赘述。

在这里插入图片描述

在这里插入图片描述

本文开篇提到线性插值是最为简单的一种方法,下面介绍下非线性插值:

B = interp2(X,Y,A,Xq,Yq); 			% 生成线性插值后的矩阵
C = interp2(X,Y,A,Xq,Yq,'cubic'); 	% 生成非线性插值后的矩阵

你没有看错,就是把之前代码的最后一行代码,稍作修改。为了更好的展示效果,我们以

magic(3)

矩阵为例,将其插值到9×9。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

通过二维矩阵可能很难感受到两个矩阵的区别(B vs. C),接下来将其转为三维热度图,如下图 。
在这里插入图片描述

同时,如果你只想对列之间进行插值,行间保持不变。代码做相应修改即可,如下所示。

在这里插入图片描述



4. Conclusion

本文提出的方法可以对任意大小的二维矩阵进行任意次的线性/非线性插值,对比Excel效果大幅度提高。但是在对原始矩阵插值时需要计算下现有坐标插值后的对应坐标,需要读者具备小学三年级以上的数学水平~

猜你喜欢:👇🏻



excel大数据重采样批量操作(每两列中插入新一列,新一列为左右两列的平均值)




【Matlab】一种超简单的二维矩阵降维方法




【Matlab】如何简单实现数组间交集,并集和补集?

在这里插入图片描述



版权声明:本文为YaoYee_21原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。