在Matlab中简化穷举搜索的for循环次数

时间:2018-06-09 09:39:48

标签: matlab for-loop

我想在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

但是,如果元素数量增加,那将会很麻烦。有没有其他方法可以简化循环而不添加许多循环'?

1 个答案:

答案 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)