【问题标题】:Event Multiple Calculator/Generator? - MatLab事件多计算器/生成器? - MatLab
【发布时间】:2016-04-07 17:50:22
【问题描述】:

这对某些人来说可能是一个显而易见的问题,但是我是一名初学者,如果我能获得任何链接或建议,我将不胜感激。

我正在尝试创建一个代码来生成一个矩阵,该矩阵的值基于可能发生的事件的数量。

我正在考虑每个最终成员都有一个独立的事件(这被应用于化学中的最终成员混合场景)。这些事件中的每一个都可以以两种不同的方式发生(值可以是负数或正数)。我也试图让这段代码能够处理任意数量的独立事件。我认为这个矩阵将是,ncol = 独立事件的数量,nrows = 事件倍数的数量。

例如:如果我有 3 个独立事件(矩阵中的 3 列),每个事件可能出现 2 次(正或负),这意味着有 8 个事件倍数或组合(矩阵中的 8 行)。

对于每个组合(行),如果我只使用“1”表示值为正,使用“-1”表示值为负,我想自动生成结果。行组合的顺序应该无关紧要。

不幸的是,我使用的是 MatLab R2015a,但我在想一个与我所要求的功能类似的功能,在 MatLab R2016a 中称为“combnk”或“combntns”。

% Beginning of code:
  NoIndEvents = 3;   % Number of independent events
  NoOccur     = 2;   % Number of occurrences for each ind. event
  newmatrix = ones(NoOccur^NoIndEvents,NoIndEvents); % Initialize matrix

  % Have no idea how to generate this part...

  % My desired output (no hard coding & easily modified for any
  % number of columns/ ind. events)

  newmatrix = 
       1   1   1
      -1  -1  -1
       1   1  -1
       1  -1   1
      -1   1   1
      -1  -1   1
      -1   1  -1
       1  -1   1

有人知道我可以为此使用的功能吗?我有一种感觉,这可能非常简单,我只是无法将我的大脑包裹在它的编码方面......

提前感谢您! ~悉尼

【问题讨论】:

    标签: matlab events generator combinations


    【解决方案1】:

    问题在于nchoosekcombnk 等不考虑对结果进行排序,因此它们不会产生足够的组合(即[-1 -1 1][1 -1 -1] 相同)。您可以生成输入的所有排列(每个可能的值重复NoIndEvents 次)。然后在结果的第一个 NoIndEvents 列上使用 unique 以获取所有排列。

    P = perms(repmat([-1 1], NoIndEvents, 1));
    out = unique(P(:,1:NoIndEvents), 'rows')
    
        -1    -1    -1
        -1    -1     1
        -1     1    -1
        -1     1     1
         1    -1    -1
         1    -1     1
         1     1    -1
         1     1     1
    

    【讨论】:

    • 谢谢!!我还刚刚在 fileexchange 上找到了 combinator.m,它似乎也很有用!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    • 1970-01-01
    • 2016-03-17
    • 1970-01-01
    相关资源
    最近更新 更多