配对数组元素与最小差异matlab

时间:2015-08-28 10:05:07

标签: arrays matlab

我有两个阵列1x4' x'和'。我想找到哪些元素的组合'配对'在这两个数组之间'将给出最小的差异(数组的元素是角度)。我想找到WHICH元素应该配对以达到最小值。我不关心最低限度的结果。我尝试使用索引但没有到达任何地方。

示例:

x=[x1 x2 x3 x4], y=[y1 y2 y3 y4].  
x=[ 295 10 25 18 ], y=[ 200   290   245   326]    

我得到x和y之间的最小角度差异xyMin'从这里: Calculating absolute differences between two angles

xyMin=  [ 95    80   140    52];

这是2个数组的角度元素之间的最小差异。但是,我想知道数组的哪些元素配对以给出这个最小值。所以我需要得到类似的东西:
    [实施例]

xyArrayElementsThatGiveMinCombination:  [x1-y3, x2-y4, x3-y1, x4-y2]. 

编辑:

我想澄清一下,我想找到' x'的哪个元素?配对' y'使角度之间的差异最小。即x [1 2 3 4] -y [1 2 3 4]将给出最小值。如果有多个组合给出相同的最小值,则先选择。

抱歉,我意识到它令人困惑! 非常感谢你的帮助!

3 个答案:

答案 0 :(得分:1)

你可以在这里使用它(如果它真的解决了你的问题)

[v,i] = min(sum(abs(perms(y)-repmat(x, factorial(4), 1)), 2))

然后你获得v最小值和i特定最小值的索引(第一个)

  

注意:如果大小超过10个条目(对于一个向量),那么排列将超过3个演出!

答案 1 :(得分:1)

这基本上是RobertSettlers solution,但是使用现在从讨论中清楚的距离指标,一个简单的暴力攻击:

x=x(:);
y=y(:);
Y=perms(y);
[distance,I]=min(sum(bsxfun(absDiffDeg,x,Y.'),1));
best_permuted_y=Y(I,:);

答案 2 :(得分:1)

这是另一个想法如何解决问题。我不确定它是否总能产生正确的结果。它基于一个假设:

  

最佳解决方案可以创建对x和y进行排序,然后循环移位y。

如果这是真的,这个解决方案要好得多,但我不确定这是否属实。

x=x(:);
y=y(:);
%Sort both vector to reduce the problem to the simplified case
[sorted_x,index_x]=sort(x);
[sorted_y,index_y]=sort(y);
distance=nan(1,numel(x));
%circular shift, try all combinations
for shift=1:numel(x)
    distance(shift)=sum(absDiffDeg(circshift(sorted_x,shift),sorted_y));
end
%get the best shift
[minimal_distance,shift]=min(distance);
%Now a solution is fond permuting both x and y, the permutations for x and y are:
%circshift(index_x,shift) and index_y
%but permuting x is unnessecary. Undo the permutation of x and keep the paris between x and y
[~,reverse_x]=sort(circshift(index_x,shift));
%Best permutation for y
y_permutation=index_y(reverse_x);
%permute y
y_permuted=y(y_permutation);