对于某些人来说,这可能是一个显而易见的问题,但我是一名初学者,并且非常感谢我能得到的任何链接或建议。
我正在尝试创建一个代码来生成一个矩阵,其中的值基于可能发生的事件的数量。
我正在考虑每个最终成员我有一个独立的事件(这适用于化学中的最终成员混合场景)。这些事件中的每一个都可以以两种不同的方式发生(值可以是负数或正数)。我也试图使这个代码能够进行任意数量的独立事件。我认为这个矩阵是,ncol =独立事件的数量,nrows =事件倍数。
例如:如果我有3个独立事件(矩阵中有3列),每个事件有两个可能出现(正或负),这意味着有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
有谁知道我可以使用的功能吗?我有一种感觉,这可能是非常容易的,我无法将我的大脑包裹在它的编码方面......
提前谢谢! 〜悉尼
答案 0 :(得分:0)
问题是nchoosek
,combnk
等不考虑对结果进行排序,因此他们不会产生足够的组合(即[-1 -1 1]
与{相同} {1}})。您可以生成输入的所有排列(每个可能的值重复[1 -1 -1]
次)。然后在结果的前NoIndEvents
列上使用unique
来获取所有排列。
NoIndEvents