如何获得功率设定?

时间:2019-05-04 08:46:19

标签: matlab

我想考虑代码中设置的功率。我想在每个循环中都获得{1,2,3,...,n}的子集。例如,n=3。在第一个循环中,我想提取数字1并存储在变量Index中。最终,我想在第二个循环中获得Index=2,在第三个循环中获得Index=3,在第四个循环中获得Index=[1,2],在第五个循环中,Index=[1,3]获得{ }在第六循环中,Index=[2,3]在第七循环中。当然,我希望Index=[1,2,3]可以是任意数字,可以是100。我可以考虑列出所有案例,但是有什么方法可以完成我的任务?

1 个答案:

答案 0 :(得分:1)

nchoosk应该找到所有k长的组合。我建议以下解决方案:

n = 3;
index = {};
for ii = 1:n
    k = nchoosek(1:n,ii);
    c = num2cell(k,2);
    index(end+1:end+length(c),1) = c;
end

另一种方法是使用二进制系统,其中001表示您只取1,011等于[1,2],111等于[1,2,3]等。然后可以使用dec2bin进行获取而没有循环:

isChosen = dec2bin(1:2^n-1) == '1';

但是,如果我们必须将其作为单元格数组,则可以遍历各行:

index1 = {};
for ii = 1:size(isChosen,1)
    index1{ii,1} = find(isChosen(ii,:));
end

然后,如果您坚持明智的命令:

[~,order] = sort(cellfun(@sum,index1));
index1 = index1(order);