首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >编制两向量逆向排序的matlab程序

编制两向量逆向排序的matlab程序
EN

Stack Overflow用户
提问于 2015-04-28 17:22:30
回答 1查看 70关注 0票数 0

我有一个50x3的矩阵,我想相反地将第一列排序为其他两列的总和。也就是说,假设我们有A、B和C列。A,我把B和C相加。所以我有两列(50x2)。接下来,使用50x2矩阵,我想重新排列A,使其与第二列(通过将B和C相加得到的列)的顺序相反。如果满足以下条件,则两个向量a,b是相反顺序的

代码语言:javascript
复制
(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上所做的工作,但我还在学习基础知识。

EN

回答 1

Stack Overflow用户

发布于 2015-04-28 19:47:03

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

代码语言:javascript
复制
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的所有可能组合来构造函数:

代码语言:javascript
复制
  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值填充了函数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29915379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档