如何在matlab中创建一个随机矩阵,使每列的总和等于1,其行是按升序排序的?

时间:2017-08-17 13:21:09

标签: matlab matrix

我想创建一个随机矩阵,以便每列的总和为1,每行按升序排列。我想要这个矩阵来解决以下问题: 我有一个单元格数组P {k}(r,a),每个单元格是一个随机矩阵,并且必须具有以下条件:

1)阵列每个单元格中矩阵的每列总和应等于1
∀k,Σp{k}(r,a)= 1

2)在阵列单元中矩阵的每列之间,必须满足以下条件  为k'> k P {k'}(r,a)> p {k}(r,a)

我写了这段代码,但没有提供第一个条件:

var a = [
    {name: "john", id: 200, points: "333"},
    {name: "alice", id: 302, points: "20"},
    {name: "alice", id: 302, points: "13"},
    {name: "kevin", id: 501, points: "3"},
    {name: "adam", id: 999, points: "100"},
    {name: "adam", id: 999, points: "30"},
    {name: "adam", id: 999, points: "60"},
];

var o = {};

a.forEach((i) => {
  var id = i.id;
  i.points = parseInt(i.points)
  if (!o[id]) {
    return o[id] = i
  }
  return o[id].points = o[id].points + i.points
})

console.log(o)
var a2 = []
Object.keys(o).forEach((key) => {
 a2.push(o[key])
})

console.log(a2)

3 个答案:

答案 0 :(得分:1)

这可能有效但随机生成并不均匀。告诉我,如果它不是你正在寻找的东西。

rowMax = 10;
columnMax = 11;

for i = 1:columnMax
  val = 1;
  for j = 1:rowMax-1
    r = rand();
    M(i, j) = val*r;
    val -= val*r;
  end
  M(i, rowMax) = val;
  M(i, :) = sort(M(i, :));
end

答案 1 :(得分:1)

你可以试试这段代码,

n=3;%Number of rows
m=2;%Number of columns
A =rand(n,m)% create a random matrix
A_s=sort(A,2)% arrang/sort rows in ascending order
A_n=normc(A_s)% Normalize columns of matrix (sum of A columns is one)

如果你试试这个,你可能会得到类似的东西,

A =

0.7572    0.5678
0.7537    0.0759
0.3804    0.0540

A_s =

0.5678    0.7572
0.0759    0.7537
0.0540    0.3804

A_n =

0.9868    0.6677
0.1318    0.6646
0.0938    0.3355

代码可以进一步简化,但只是想说清楚。如果您有任何其他问题或需要进一步澄清,请与我们联系。

答案 2 :(得分:0)

无法按升序对行进行排序,并且每列的总和等于1.

给定M, mxn 矩阵Matrix

您需要Condition

但是在[1; n],Demonstration

中给出了我

因此,您无法找到一个矩阵,其中ech colums的总和等于1,并且该行按升序排列。