我想构造一个 2^n*n 矩阵来评估 n 个代理的二元决策的所有可能的决策向量。
因此,N个人在{0,1}之间进行选择,他们的选择形成了一个决策向量,例如[1,1,0,1,0.....]。我想要一个由所有可能的决策向量组成的矩阵。
我尝试使用 repmat
复制 {0,1} n 次,然后使用 allcomb
,但这不起作用。 (也许我做错了。)
我还在某处读到我可以使用 A = (dec2bin(0:(2^n)-1));
事实上,我确实得到了类似于我的东西然而,之后我的程序的其余部分(用于我研究的实际分析部分)给出了垃圾结果。
我在 matlab 中编写了一段代码,可以为 5 个人执行此操作(和模式),但我只嵌套了 5 个循环。我想延长这一点。任何帮助表示赞赏。
当前代码是
A= zeros (2^n,n); %creates blank strategy space
x=0; % x is an iteration counting term and should be = 2^n if code runs correctly
for i=0:1
for j=0:1
for k=0:1
for l=0:1
for m=0:1
x=x+1;
v1=i;
v2=j;
v3=k;
v4=l;
v5=m;
A(x,:)=[v1 v2 v3 v4 v5]; % at termination this loop should generate an exhaustive list of all possible strategy profiles
end
end
end
end
end
x;
我昨天才开始使用 MATLAB,所以我想这很糟糕......
最佳答案
如果我正确地解释了您的问题,给定 n
位,您希望将所有可能的十进制值枚举为从 0 到 2^n-1
的二进制等值(value)。这可以通过调用 dec2bin
来完成。并转换为数值数组:
n = 5;
A = dec2bin(0:2^n-1, n) - '0';
我提供了一个从 0 到 2^n-1
的向量,步长为 1,并允许 dec2bin
将这些十进制值中的每一个转换为二进制形式,有 n
位数字。
使用'0'
进行减法很重要,因为dec2bin
最初生成一个字符数组,其中每行都是二进制数字序列,但实际上是字符。如果要将字符数组转换为数字,请记住字符以 ASCII 表示。因此,用数字 0 的 ASCII 代码相减即可得出 0 和 1 的实际值。
使用n=5
,我们得到这个(与您的代码生成的结果相同):
A =
0 0 0 0 0
0 0 0 0 1
0 0 0 1 0
0 0 0 1 1
0 0 1 0 0
0 0 1 0 1
0 0 1 1 0
0 0 1 1 1
0 1 0 0 0
0 1 0 0 1
0 1 0 1 0
0 1 0 1 1
0 1 1 0 0
0 1 1 0 1
0 1 1 1 0
0 1 1 1 1
1 0 0 0 0
1 0 0 0 1
1 0 0 1 0
1 0 0 1 1
1 0 1 0 0
1 0 1 0 1
1 0 1 1 0
1 0 1 1 1
1 1 0 0 0
1 1 0 0 1
1 1 0 1 0
1 1 0 1 1
1 1 1 0 0
1 1 1 0 1
1 1 1 1 0
1 1 1 1 1
关于matlab - 需要考虑 MATLAB 中二元选择的可能组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31839037/