大家好,又见面了,我是你们的朋友全栈君。
——————————————————————
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
- 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) ; %算出的结果根据二维的类推
附件:二维网格例子的结果图。
x0=-3:.6:3;
y0=-2:.4:2;
[x,y]=ndgrid(x0,y0);
[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);
- 其实,对于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都是两维矩阵。
- 最后给一个实例,说明两者在这里是通用的:
附件:meshgrid和ndgrid网格例子的结果比较图
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/131325.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...