目录

背景

本博文主要分析 ndgrid, meshgrid是附送的,都是类似的东西,学会了一个,另一个很容易就理解了。

为什么会对 ndgrid 感兴趣呢?因为对它的不理解,导致我少写了几篇博文,最后,决定将 ndgrid 总结一番,去除这个绊脚石,或者加工一下,让它称为垫脚石。

我决定从低维到高维的思路来分析 ndgrid 到底怎么用?

ndgrid以及meshgrid其实就是将利用坐标轴上的坐标生成一些网格,一维的情况就不存在网格,所以坐标还是坐标;二维的情况,ndgrid的输入是两个矢量,可以看做是分别在x和y轴上的坐标,然后根据这些坐标生成网格点,所以输出肯定是2阶矩阵了。依次类推,可以得到高维的情况。

下面这句话,摘自网络看到的内容:对于网格矢量(gird vectors)x1gv,x2gv,x3gv,长度分别是M,N,P。ndgrid(x1gv, x2gv)函数输出一个MXN的数组,而meshgrid(x1gv, x2gv)输出一个N*M的数组,类似的,ndgrid(x1gv, x2gv, x3gv)函数输出一个M*N*P 的数组,而meshgrid(x1gv, x2gv, x3gv)输出一个N*M*P 的数组。

看不懂没关系,这里只是提前预热下而已,正式的内容下面一一呈现。

主题是N-D空间中的矩形网格。

一维空间中的矩形网格:

>> a = -3:3

a =

-3    -2    -1     0     1     2     3

>> x = ndgrid(a)

x =

-3

-2

-1

0

1

2

3

对一维空间,也即一个坐标轴来划分网格意义不大,主要是做一个对比作用。

二维空间中的矩形网格:

>> a = -3:3

a =

-3    -2    -1     0     1     2     3

>> b = -2:2

b =

-2    -1     0     1     2

>> [x,y]=ndgrid(a,b)

x =

-3    -3    -3    -3    -3

-2    -2    -2    -2    -2

-1    -1    -1    -1    -1

0     0     0     0     0

1     1     1     1     1

2     2     2     2     2

3     3     3     3     3

y =

-2    -1     0     1     2

-2    -1     0     1     2

-2    -1     0     1     2

-2    -1     0     1     2

-2    -1     0     1     2

-2    -1     0     1     2

-2    -1     0     1     2

从工作空间可以看到,a是7维的向量,b是5维的向量,那么使用ndgrid生成的网格点,x是一个7*5的矩阵,其x的列是a的复制;y是一个7*5的矩阵,b构成y的行,也即是说,y的行是b的复制。

这其实不难理解,毕竟是低维的情况,x这个矩阵的列可以看成是垂直于b轴的坐标点,而b有5个坐标点,所以x有5个列;y这个矩阵的行可以看成是垂直于a轴的坐标点,由于a有7个坐标点,所以y有7个行。x和y的交叉不就构成了一个又一个的网格点了吗,这也就是生成网格的作用体现出现了。

后面更高维的情况类似,我将不进行这样描述了,只给出范例。

这时就需要和meshgrid对比一下了:

>> [x1,y1] = meshgrid(a,b)

x1 =

-3    -2    -1     0     1     2     3

-3    -2    -1     0     1     2     3

-3    -2    -1     0     1     2     3

-3    -2    -1     0     1     2     3

-3    -2    -1     0     1     2     3

y1 =

-2    -2    -2    -2    -2    -2    -2

-1    -1    -1    -1    -1    -1    -1

0     0     0     0     0     0     0

1     1     1     1     1     1     1

2     2     2     2     2     2     2

meshgrid也用于生成网格点,只是实现的方式好像有点不一样,同样是a,b两个向量作为输入,输出x1的行成了a的拷贝,b有多少个坐标,a就有多少个行,也就是5行;y的列成了b的拷贝,a有多少个坐标,y就有多少个列,可见有7个列。

二者也构成了一系列的网格点。

三维空间中的矩形网格:

>> a = -3:3

a =

-3 -2 -1 0 1 2 3

>> b=-2:2

b =

-2 -1 0 1 2

>> c=-1:1

c =

-1 0 1

>> [x,y,z]=ndgrid(a,b,c)

x(:,:,1) =

-3 -3 -3 -3 -3

-2 -2 -2 -2 -2

-1 -1 -1 -1 -1

0 0 0 0 0

1 1 1 1 1

2 2 2 2 2

3 3 3 3 3

x(:,:,2) =

-3 -3 -3 -3 -3

-2 -2 -2 -2 -2

-1 -1 -1 -1 -1

0 0 0 0 0

1 1 1 1 1

2 2 2 2 2

3 3 3 3 3

x(:,:,3) =

-3 -3 -3 -3 -3

-2 -2 -2 -2 -2

-1 -1 -1 -1 -1

0 0 0 0 0

1 1 1 1 1

2 2 2 2 2

3 3 3 3 3

y(:,:,1) =

-2 -1 0 1 2

-2 -1 0 1 2

-2 -1 0 1 2

-2 -1 0 1 2

-2 -1 0 1 2

-2 -1 0 1 2

-2 -1 0 1 2

y(:,:,2) =

-2 -1 0 1 2

-2 -1 0 1 2

-2 -1 0 1 2

-2 -1 0 1 2

-2 -1 0 1 2

-2 -1 0 1 2

-2 -1 0 1 2

y(:,:,3) =

-2 -1 0 1 2

-2 -1 0 1 2

-2 -1 0 1 2

-2 -1 0 1 2

-2 -1 0 1 2

-2 -1 0 1 2

-2 -1 0 1 2

z(:,:,1) =

-1 -1 -1 -1 -1

-1 -1 -1 -1 -1

-1 -1 -1 -1 -1

-1 -1 -1 -1 -1

-1 -1 -1 -1 -1

-1 -1 -1 -1 -1

-1 -1 -1 -1 -1

z(:,:,2) =

0 0 0 0 0

0 0 0 0 0

0 0 0 0 0

0 0 0 0 0

0 0 0 0 0

0 0 0 0 0

0 0 0 0 0

z(:,:,3) =

1 1 1 1 1

1 1 1 1 1

1 1 1 1 1

1 1 1 1 1

1 1 1 1 1

1 1 1 1 1

1 1 1 1 1

也很符合预期吧。

同样需要和meshgrid对比下:

>> [x1,y1,z1]=meshgrid(a,b,c)

x1(:,:,1) =

-3 -2 -1 0 1 2 3

-3 -2 -1 0 1 2 3

-3 -2 -1 0 1 2 3

-3 -2 -1 0 1 2 3

-3 -2 -1 0 1 2 3

x1(:,:,2) =

-3 -2 -1 0 1 2 3

-3 -2 -1 0 1 2 3

-3 -2 -1 0 1 2 3

-3 -2 -1 0 1 2 3

-3 -2 -1 0 1 2 3

x1(:,:,3) =

-3 -2 -1 0 1 2 3

-3 -2 -1 0 1 2 3

-3 -2 -1 0 1 2 3

-3 -2 -1 0 1 2 3

-3 -2 -1 0 1 2 3

y1(:,:,1) =

-2 -2 -2 -2 -2 -2 -2

-1 -1 -1 -1 -1 -1 -1

0 0 0 0 0 0 0

1 1 1 1 1 1 1

2 2 2 2 2 2 2

y1(:,:,2) =

-2 -2 -2 -2 -2 -2 -2

-1 -1 -1 -1 -1 -1 -1

0 0 0 0 0 0 0

1 1 1 1 1 1 1

2 2 2 2 2 2 2

y1(:,:,3) =

-2 -2 -2 -2 -2 -2 -2

-1 -1 -1 -1 -1 -1 -1

0 0 0 0 0 0 0

1 1 1 1 1 1 1

2 2 2 2 2 2 2

z1(:,:,1) =

-1 -1 -1 -1 -1 -1 -1

-1 -1 -1 -1 -1 -1 -1

-1 -1 -1 -1 -1 -1 -1

-1 -1 -1 -1 -1 -1 -1

-1 -1 -1 -1 -1 -1 -1

z1(:,:,2) =

0 0 0 0 0 0 0

0 0 0 0 0 0 0

0 0 0 0 0 0 0

0 0 0 0 0 0 0

0 0 0 0 0 0 0

z1(:,:,3) =

1 1 1 1 1 1 1

1 1 1 1 1 1 1

1 1 1 1 1 1 1

1 1 1 1 1 1 1

1 1 1 1 1 1 1

语法对比

从帮助文档上,我们可以得知,ndgrid的语法形式有两种:

[X1,X2,...,Xn] = ndgrid(x1,x2,...,xn)

[X1,X2,...,Xn] = ndgrid(xg)

事实上,上面我们的举例只是说到了第一种,那第二种是什么情况呢?

其实更加的简单,xg也是一个向量,n为多少,那么替换成第一种形式,就相当于输入有多少个xg向量。

使用二维网格为例试一下:

>> clear

>> a = -2:2

a =

-2 -1 0 1 2

>> [x1,x2] = ndgrid(a);

>> [x1,x2] = ndgrid(a)

x1 =

-2 -2 -2 -2 -2

-1 -1 -1 -1 -1

0 0 0 0 0

1 1 1 1 1

2 2 2 2 2

x2 =

-2 -1 0 1 2

-2 -1 0 1 2

-2 -1 0 1 2

-2 -1 0 1 2

-2 -1 0 1 2

是不是和预期的一样。

那么meshgrid是不是也有这种用法呢?

且看meshgrid的语法格式:

[X,Y] = meshgrid(x,y)

[X,Y] = meshgrid(x)

[X,Y,Z] = meshgrid(x,y,z)

[X,Y,Z] = meshgrid(x)

这里透露出了一个大信息,首先,meshgrid肯定也能那么用;其实,meshgrid只能用于生成2维网格以及三维网格。

对比,ndgrid的语法格式:

[X1,X2,...,Xn] = ndgrid(x1,x2,...,xn)

[X1,X2,...,Xn] = ndgrid(xg)

可见,ndgrid对维度是没有限制的。

1、在网格域上计算函数:

% Evaluate Function Over Gridded Domain

clear

clc

close all

[X1,X2] = ndgrid(-2:.2:2);

Z = X1 .* exp(-X1.^2 - X2.^2);

mesh(X1,X2,Z)

2、插入数据

%interpolate data

clear

clc

close all

[X,Y] = ndgrid(-5:0.5:5);

f = sin(X.^2) * cos(Y.^2);

surf(X,Y,f)

%interpolate data

clear

clc

close all

[X,Y] = ndgrid(-5:0.5:5);

f = sin(X.^2) * cos(Y.^2);

subplot(2,1,1);

surf(X,Y,f)

% 使用更精细的网格在点之间插值,并绘制结果图。

[X1,Y1] = ndgrid(-5:0.125:5);

F = interpn(X,Y,f,X1,Y1,'spline');

subplot(2,1,2);

surf(X1,Y1,F)

参考链接:帮助文档

本文同步分享在 博客“李锐博恩”(CSDN)。

如有侵权,请联系 support@oschina.cn 删除。

本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

matlab meshgrid作用,【 MATLAB 】ndgrid 和 meshgrid 对比理解以及应用相关推荐

  1. 【 MATLAB 】ndgrid 和 meshgrid 对比理解以及应用

    目录 背景 一维空间中的矩形网格: 二维空间中的矩形网格: 三维空间中的矩形网格: 语法对比 1.在网格域上计算函数: 2.插入数据 背景 本博文主要分析 ndgrid, meshgrid是附送的,都 ...

  2. 【matlab】三维曲面(矩形网格---meshgrid)

    [matlab]三维曲面(矩形网格-meshgrid) 二维曲线: 先找到x,找到对应的y,绘制点. >> x=1:2*pi; >> y=sin(x); >> pl ...

  3. matlab里meshgrid函数,matlab中meshgrid函数

    meshgrid是MATLAB中用于生成网格采样点的函数.在使用MATLAB进行3-D图形绘制方面有着广泛的应用. 生成绘制3-D图形所需的网格数据.在计算机中进行绘图操作时, 往往需要一些采样点,然 ...

  4. Matlab之peaks,mesh,meshgrid函数

    转自:http://blog.csdn.net/htttw/article/details/7240354 Matlab之peaks,mesh,meshgrid函数 peaks: Matlab提供了一 ...

  5. 基于matlab的数字图像边缘检测算法研究,基于MATLAB数字图像边缘检测算法的研究与对比分析...

    ·161· 居 舍 研究探讨 2017年10月(中) 1 绪论 图像边缘中通常包含着重要的边界信息,这些边界信息便于分析和研究图像.另外,边缘检测可以大大降低图像处 理的工作量,将提高图像分析的效率. ...

  6. 【 MATLAB 】使用 MATLAB 得到高密度谱(补零得到DFT)和高分辨率谱(获得更多的数据得到DFT)的方式对比(附MATLAB脚本)

    上篇博文分析了同一有限长序列在不同的N下的DFT之间的不同: MATLAB ]使用 MATLAB 作图讨论有限长序列的 N 点 DFT(强烈推荐)(含MATLAB脚本) 那篇博文中,我们通过补零的方式 ...

  7. matlab randomsample,randperm和randsample函数用法对比

    构建替代数据的时候,一种常见的思路是打乱原数据的排列次序,通过随机置换原数据的排列次序从而产生和原数据系列统计特征(如均值.方差.分布)一致的随机数据.具体到Matlab中,此思路的实现会涉及到两个命 ...

  8. ACO蚁群算法优化BP神经网络(ACO-BPNN)回归预测MATLAB代码(有优化前后的对比)

    ACO蚁群算法优化BP神经网络(ACO-BPNN)回归预测MATLAB代码(有优化前后的对比) 代码注释清楚. main为运行主程序,可以读取本地EXCEL数据. 很方便,容易上手. (以电厂运行数据 ...

  9. SSA麻雀算法优化BP神经网络(SSA-BPNN)回归预测MATLAB代码(有优化前后的对比

    SSA麻雀算法优化BP神经网络(SSA-BPNN)回归预测MATLAB代码(有优化前后的对比) 代码注释清楚. main为运行主程序,可以读取本地EXCEL数据. 很方便,容易上手. (以电厂运行数据 ...

最新文章

  1. xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; found b‘b\x14#e\xbc\
  2. js1:对象的学习,构造函数,继承构造函数【使用教材:JavaScript深度剖析第2版】...
  3. MAC 下 安装redis 并配置 php redis 扩展
  4. Opencv学习笔记之OpenCV介绍
  5. linux远程画面同步,如何使VNC和Linux tty7 显示同步效果
  6. 喜庆红色C4D立体电商首焦模板|PSD分层格式,设计师大呼真香!
  7. 数据库实验5 数据库的嵌套查询实验
  8. ASP.net AJAX 调用PageMethods实例
  9. python定时任务contrib_python定时任务的实现
  10. 轻松入门微信小程序云开发(详细)
  11. oracle误删除数据恢复
  12. Win10微软输入法不见了
  13. android 警报声音_Android接近警报教程
  14. 电脑通话有回音解决方案 使用电脑通话时有回音(可以听到对方电脑中自己说话的声音)电脑通话回音解决方案【以Thinkpad Win10系统为例】
  15. 菜狗为了打败菜猫,学了一套如来十三掌
  16. 手机号 MD5加密解密工具类
  17. 成为腾讯开发者——如何使用QQ开放平台和微信开放平台
  18. 首次公开,300多页阿里百亿级系统架构设计实录
  19. vim底部查找最后一个关键字
  20. 玩彩票赢钱概率有多少?用Python来告诉你

热门文章

  1. 春节期间如何管理好你的亚马逊店铺之设置预售篇?
  2. [IOS] 内购碰见的一个坑 (无法连接到 iTunes Store)
  3. 联想服务器显示叹号,桌面图标出现“红色叹号”
  4. vue移动端用audio做背景音乐
  5. 【D3.js实战】 品牌排名动态可视化
  6. 防水运动蓝牙耳机,分体式蓝牙耳机品牌推荐
  7. Spring实现策略模式
  8. ListView控件--SimpleAdapter适配器
  9. 基于jsp+ssm+java的干洗店洗衣管理系统-计算机毕业设计
  10. win10系统运行vc6.0编译后的程序报:“0xc000007b应用程序无法正常启动”的解决方法