【matlab】函数meshgrid的用法详解(生成网格矩阵)和ndgrid的区别及用法

------------------------------------------------------------------

 meshgrid 函数用来生成网格矩阵,可以是二维网格矩阵。

  • exp1_1:生成二维网格,用法为:[x y]=meshgrid(a b);  % a 和b是一维数组,如a=[1 2 3]; b= [2 3 4]; 则生成的 X 和 Y 都是为 3X3 维的矩阵,

>> [x y]=meshgrid(a,b)
x =
    1     2     3
    1     2     3
    1     2     3
y =
  2     2     2
  3     3     3
  4     4     4
    

  • exp1_2:生成二维网格,用法为:[x y]=meshgrid(a b);  % a 和b是一维数组,如a=[1 2 3]; b= [2 3]; 则生成的 X 和 Y 都是为 3X2 维的矩阵,

>> [x y]=meshgrid(a,b)
x =
     1     2     3
   
 1     2     3
y =
     2     2     2
     3     3     3

  • exp1_3:生成二维网格,用法为:[x y]=meshgrid(a b);  % a 和b是一维数组,如a=[1 2]; b= [2 3 4]; 则生成的 X 和 Y 都是为 2X3 维的矩阵,

>> [x y]=meshgrid(a,b)
x =
     1     2
     1     2
     1     2
y =
      2     2
      3     3
      4     4

------------------------------------------------------------------
 meshgrid 函数用来生成网格矩阵,可以是三维网格矩阵。
  • exp2_1:生成三维网格,

x 的每行都是 1 2 3,共三行,y 每列都是2 3 4,共三列。

举个实例:估计函数:x*exp(-x^2-y^2),取值范围 -2 < x < 2, -2 < y < 2,

                [X,Y] = meshgrid(-2:.2:2, -2:.2:2);

                 Z = Y .* exp(-X.^2 - Y.^2);

                 mesh(X,Y,Z)

对于三维网格,生成方式与二维一样 :[x y z]=meshgrid(a b c) ; %算出的结果根据二维的类推

附件:二维网格例子的结果图。

 

------------------------------------------------------------------

meshgrid和ndgrid的区别及用法

实例:z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y), 用三次样条插值方法得到三维数据网格的样条插值拟合,并绘制曲面
  x0=-3:.6:3;
  y0=-2:.4:2;
  [x,y]=ndgrid(x0,y0);
%{
>> x0=-3:.6:3;y0=-2:.4:2;
  [x,y]=ndgrid(x0,y0)
x =
  Columns 1 through 6
   -3.0000   -3.0000   -3.0000   -3.0000   -3.0000   -3.0000
   -2.4000   -2.4000   -2.4000   -2.4000   -2.4000   -2.4000
   -1.8000   -1.8000   -1.8000   -1.8000   -1.8000   -1.8000
   -1.2000   -1.2000   -1.2000   -1.2000   -1.2000   -1.2000
   -0.6000   -0.6000   -0.6000   -0.6000   -0.6000   -0.6000
    0       0       0       0       0       0
    0.6000   0.6000   0.6000   0.6000   0.6000    0.6000
    1.2000   1.2000   1.2000   1.2000   1.2000    1.2000
    1.8000   1.8000   1.8000   1.8000   1.8000    1.8000
    2.4000   2.4000   2.4000   2.4000   2.4000    2.4000
    3.0000   3.0000   3.0000   3.0000   3.0000    3.0000
  Columns 7 through 11
   -3.0000   -3.0000   -3.0000   -3.0000   -3.0000
   -2.4000   -2.4000   -2.4000   -2.4000   -2.4000
   -1.8000   -1.8000   -1.8000   -1.8000   -1.8000
   -1.2000   -1.2000   -1.2000   -1.2000   -1.2000
   -0.6000   -0.6000   -0.6000   -0.6000   -0.6000
    0       0       0       0       0
    0.6000    0.6000    0.6000    0.6000    0.6000
    1.2000    1.2000    1.2000    1.2000    1.2000
    1.8000    1.8000    1.8000    1.8000    1.8000
    2.4000    2.4000    2.4000    2.4000    2.4000
    3.0000    3.0000    3.0000    3.0000    3.0000
y =
  Columns 1 through 6
   -2.0000   -1.6000   -1.2000   -0.8000   -0.4000         0
   -2.0000   -1.6000   -1.2000   -0.8000   -0.4000         0
   -2.0000   -1.6000   -1.2000   -0.8000   -0.4000         0
   -2.0000   -1.6000   -1.2000   -0.8000   -0.4000         0
   -2.0000   -1.6000   -1.2000   -0.8000   -0.4000         0
   -2.0000   -1.6000   -1.2000   -0.8000   -0.4000         0
   -2.0000   -1.6000   -1.2000   -0.8000   -0.4000         0
   -2.0000   -1.6000   -1.2000   -0.8000   -0.4000         0
   -2.0000   -1.6000   -1.2000   -0.8000   -0.4000         0
   -2.0000   -1.6000   -1.2000   -0.8000   -0.4000         0
   -2.0000   -1.6000   -1.2000   -0.8000   -0.4000         0
  Columns 7 through 11
    0.4000    0.8000    1.2000    1.6000    2.0000
    0.4000    0.8000    1.2000    1.6000    2.0000
    0.4000    0.8000    1.2000    1.6000    2.0000
    0.4000    0.8000    1.2000    1.6000    2.0000
    0.4000    0.8000    1.2000    1.6000    2.0000
    0.4000    0.8000    1.2000    1.6000    2.0000
    0.4000    0.8000    1.2000    1.6000    2.0000
    0.4000    0.8000    1.2000    1.6000    2.0000
    0.4000    0.8000    1.2000    1.6000    2.0000
    0.4000    0.8000    1.2000    1.6000    2.0000
    0.4000    0.8000    1.2000    1.6000    2.0000
%}
  z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y);
  sp=csapi({x0,y0},z);
  fnplt(sp);
附件:san维网格例子的结果图。

    
    
  • 其实,对于2D,3D使用meshgrid和ndgrid都可以,但要注意:
  • [X1,X2,X3] = NDGRID(x1,x2,x3)<=>[X2,X1,X3] = MESHGRID(x2,x1,x3)
  • x和y轴要反向
    
    
  • 为何呢?帮助说的很清楚:因为NDGRID适用于n维空间,而meshgrid适用于笛卡尔空间。
  • meshgrid和ndgrid的用法不同之处在于:2D、3D都可以使用(区别是x轴,y轴的转换),但对于4D、5D...只能使用ndgrid.
  • 为什么要使用meshgrid?
  • matlab使用矩阵的方式进行运算,对于2D而言,如果采样10个点(指x,y轴),那么对于x=第一个采样点,反映到矩阵就是10个,即不管y是哪个值,x的第一采样点保持不变;对y是同理。因此,2D产生的x和y都是两维矩阵。
  • 最后给一个实例,说明两者在这里是通用的:
x0=-3:.6:3; y0=-2:.4:2; [x,y]=ndgrid(x0,y0); [Y,X]=meshgrid(y0,x0); z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y); Z=(X.^2-2*X).*exp(-X.^2-Y.^2-X.*Y); SP1=csapi({x0,y0},z); SP2=csapi({x0,y0},Z); subplot(121),fnplt(SP1); subplot(122),fnplt(SP2);
附件:meshgrid和ndgrid网格例子的结果比较图


  • 130
    点赞
  • 544
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值