以下哪一项陈述将找出任何一对元素(a,b)之间的最小差异,其中a来自向量A,b来自向量B.
A. [X,Y] = meshgrid(A,B);
min(abs(X-Y))
B. [X,Y] = meshgrid(A,B);
min(abs(min(Y-X)))
C. min(abs(A-B))
D. [X,Y] = meshgrid(A,B);
min(min(abs(X-Y)))
有人可以向我解释一下吗?
答案 0 :(得分:1)
D. [X,Y] = meshgrid(A,B);
min(min(abs(X-Y)))
meshgrid
将从向量生成两个网格 - X和Y - 这些网格的排列使得X-Y
将生成ax-bx的所有组合,其中ax在a中,bx在b中。
表达式的其余部分只是从减法得到的数组得到最小绝对值,这是你想要的值。
答案 1 :(得分:1)
通过说"任何一对元素(a,b)"之间的最小差异,我认为你的意思是你将A和B视为集合,并且你打算在这两组中任何可能的元素对。所以在这种情况下你应该使用你的选项D
[X,Y] = meshgrid(A,B);
min(min(abs(X-Y)))
说明:Meshgrid将一对1-D向量转换为2-D网格。这个链接可以解释我的意思:
http://www.mathworks.com/help/matlab/ref/meshgrid.html?s_tid=gn_loc_drop
因此(X-Y)将给出所有可能的对(a,b)的差异,使得a属于A和b属于B.注意,这将是2-D矩阵。
abs(X-Y)将返回此矩阵中所有元素的绝对值(每对中的绝对差值)。
要找到此矩阵中的最小元素,您必须使用min(min(abs(X-Y)))。这是因为如果Z是矩阵,则min(Z)将Z的列视为向量,返回包含每列中的最小元素的行向量。因此,单个min命令将给出一个行向量,其中每个元素都是该列元素的min。第二次使用min返回此行向量的最小值。这将是整个矩阵中的最小元素。
这可以提供帮助:
http://www.mathworks.com/help/matlab/ref/min.html?searchHighlight=min
如果将A和B视为向量而非集合,则选项C是正确的。在这种情况下,你不会考虑所有可能的配对。您最终会找到(a-b)的最小值,其中a,b在它们相应的向量中处于相同的位置(成对差异)。
答案 2 :(得分:0)
正确的答案是D
允许m = size(A)
和n = size(B)
你想减去每对(a,b)
,使得a来自向量A,b来自向量B.
meshgrid(A,B)
创建两个大小为X Y
的矩阵nxm
,其中X
的行具有向量A
,而Y
的列与向量{B
相同1}}。
因此,Z = X-Y
将为您提供一个矩阵,其n*m
值对应于从A
和B
取得的每对值之间的差异。现在,您所要做的就是在Z
的所有值中找到绝对最小值。
你可以做到这一点
req_min = min(min(abs(z)))
整个代码是
[X Y ] = meshgrid(A,B);
Z= X-Y;
Z = abs(Z);
req_min = min(min(Z));
答案 3 :(得分:0)