大家好,又见面了,我是你们的朋友全栈君。
函数形式
[C,R] =meshgrid(c, r)
初步解释
首先需要明确的是参数 c, r 都是行向量,该函数将行向量c, r指定的域变换为数组C,R,这2个数组能用来指示有2个变量的函数和三维的图。
输出数组C的每一行都是行向量c,输出数组R的每一列都是行向量r。例如我们需要形成一个二维函数,其元素是由坐标变量x和y的值的平方和。也就是f(x,y) = x^2 +y^2这样的形式。其中变量x =0,1,2和y= 0,1。繁琐地来列出所有的坐标对:
(x,y) = (0,0) (0,1)
(1,0) (1,1)
(2,0) (2,1)
在matlab中我们所需要的就是这样的数据,然后将坐标对代入函数就可以得到结果了。
[C,R] = meshgrid([0,1],[0,1,2])
%%%%%%%%%结果%%%%%%%%%
C =
0 1
0 1
0 1
R =
0 0
1 1
2 2
%%%%%%%%%%%%
% f(1,1) = R(1,1).^2 +C(1,1).^2
f = R.^2 + C.^2
仔细观察上面的结果你会发现,R这个二维数组指明了x这个行标(分量),C这个二维数组指明了y这个列标(分量)。
加深理解
再举一个例子,主要是为了加深理解meshgrid函数,如实现 f(x,y) = A*sin(u0*x+v0*y),其中x =0,1,2,…,M-1;y=0,1,2,….,N-1.
另外需要说明的是,M,N,A,u0,v0这些常数都是自己给定的。
首先给一个一般实现,但是速率很慢。
for r =1:M
u0x = u0*(r-1)
for c=1:N
v0y =v0*(c-1)
f(r,c) = A*sin(u0x+v0y)
end
end
用meshgrid函数实现,根据上面给出的条件,说明x =[0,1,..,M-1]而y=[0,1,…,N-1],这样一来我们也就确定了c,r这2个行向量。然后生成各自对应的行标、列标的二维数组C,R。
r = 1:M-1;
c = 1: N-1;
[C,R] =meshgrid(c,r);
g = A*sin(u0*R +v0*C);
g = mat2gray(g);
imshow(g)
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/134136.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...