设置一个matlab程序,用于反向排序两个向量

时间:2015-04-28 09:22:30

标签: matlab matlab-figure

我有一个50x3矩阵,并希望将第一列与另外两列的总和相反。即假设我们有A,B和C列。取A,我求和B和C.这样我有两列(50x2)。接下来,使用50x2矩阵我想重新排列A,使其与第二列(从添加B和C得到)相反。如果

,则两个向量a,b的顺序相反
(a_j - a_k)(b_j - b_k) ≤ 0 , ∀ 1≤j,k≤N  Where N=50,j=2.

例如 X =   [15.2221,49.0000,12.3631; 20.3201,22.5702,30.6228; 12.1306,9.4257,10.3228; 16.1499,21.3606,11.5000; 16.6777,30.6228,13.4338]

使用第一列,取其他两列的总和。所以我们有一个新的矩阵 Y =    [15.2221,61.3631; 20.3201,53.1930; 12.1306,19.7485; 16.1499,32.8606; 16.6777,44.0565]

重新排列第一列,只有

(y11-y12)(y21-y22)< = 0 y11-y13)(y21-y23)< = 0,e.t.c

最后我们有一个新的矩阵Y,其中第一列重新排列,而第二列保持不变。例如

Y =    [15.2221,61.3631; 16.1499,53.1930; 20.3201,19.7485; 16.6777,32.8606; 12.1306,44.0565]

我希望你理解我的解释。我想导入到目前为止我在matlab上所做的事情,但我还在学习基础知识。

1 个答案:

答案 0 :(得分:0)

首先,您需要2 x 50矩阵:

X =
   [15.2221   49.0000   12.3631;
    20.3201   22.5702   30.6228;
    12.1306   9.4257    10.3228;
    16.1499   21.3606   11.5000;
    16.6777   30.6228   13.4338]

Xtransform = [X(:,1),(X(:,2)+X(:,3))]; %//This generates 2 by 50 Matrix

接下来你要重新排序第一列,以便(y11-y12)(y21-y22)< = 0(基于我的理解),所以对此进行一些数学运算:

您希望v1和v2的所有可能组合构建函数:

  C1 = nchoosek(v1,2);
  C2 = nchoosek(v2,2);

  %//Do y11-y12 
  CC1 = C1(:,1) - C1(:,2);
  %//Consider backwards
  CB1 = C1(:,2) - C1(:,1);
  %//Do y21-y22
  CC2 = C2(:,1) - C2(:,2); 
  %//Consider backwards
  CB2 = C2(:,2) - C2(:,1);
  %//CC1 *CC2 should return negative or zero
  CC = find(CC1.*CC2 < 0);
  CB = find(CB1.*CC2 < 0);
  %//The indexes returned are possible v1 and v2 combinations that fullfills the required function.

所以我达到了这一点,并想知道如果这个问题可以满足多种解决方案。如果有多个排序完全填充函数,那么订购它的正确方法是什么?

有了索引,您可以查看C1和C2,看看哪个ajk和bjk值满足函数。