我想在Matlab中使用穷举搜索找到客观结果。让我们说我有一个向量/矩阵' x'如下:
x = [a b c;d e f]; a,b,c,d,e,f are Boolean (i.e., 0 or 1)
基于' x',我有2 ^ 6个决定。通常,我们可以使用' for循环'解决这个问题:
for t1=0:1
a = t1;
for t2=0:1
b = t2;
.....
for t6=0:1
f = t6;
g = a + ... + c + d + ... + f;
end
.....
end
end
但是,如果元素数量增加,那将会很麻烦。有没有其他方法可以简化循环而不添加许多循环'?
答案 0 :(得分:1)
使用numel
查找x
的元素数量。使用colon
运算符在基数10中生成所有可能的组合。使用dec2bin
将它们转换为基数2字符向量。通过减去'0'
将它们分成单个双元素。现在sum
在第二维上获得g
。
g = sum(dec2bin(0:2^numel(x)-1)-'0', 2);
请注意,随着变量数量的增加,需要更多内存。例如使用30个变量的示例(工作空间中30个这样的变量不是一个好主意),g
需要8.2 GB内存,处理需要更多内存。对于这种情况,你可以这样做:
g = repmat(uint8(0),1,2^numel(x));
for k = 0:2^numel(x)-1
g(k+1) = sum(dec2bin(k)-'0', 2);
end
但要注意uint8
有其限制(0-255)