数学与matlab中变量大小的可能组合

时间:2014-07-27 09:54:06

标签: matlab combinations

我是matlab的初学者。 我有一系列数字。说5(4,2,1,4,3) 这意味着变量1可以取0到1之间的值,变量2取值1,2 变量3可以取0和1,变量4取0到4,变量5取0 0 0。

我尝试在matlab中使用“combntns”,但它是一个特定的,并不像我的情况,每个变量都有定义的数字集。 我需要所有的组合。我尝试使用for循环

for a=i1:-1:0
    for b=i2:-1:0
        for c =i3:-1:0
            for d=i4:-1:0
                for e = i5:-1:0
               com(j,1)=a;
                com(j,2)=b;
                com(j,3)=c;
                com(j,4)=d;
                com(j,5)=e;
                j=j+1;                    
            end
        end
    end
end

我不想使用这些for循环。如果我的数组大小增加到100个数,那么编写100个for循环是一项非常大的任务。 任何人都可以建议我使用代码吗?

1 个答案:

答案 0 :(得分:0)

我设法以下列方式递归地解决您的问题:

A = [ 0 1
      1 2
      0 1
      0 4
      0 3 ]; %// <= This is the example that you gave.

out = recursivePermutations(A,[]);

函数recursivePermutations是:

function out = recursivePermutations(boundsMat,previousCombos)

if size(boundsMat,1)==0
    out = previousCombos;
    return;
else
   lowBound = boundsMat(end,1);
   uppBound = boundsMat(end,2);
   tmp = (lowBound:uppBound)';

   if ~isempty(previousCombos)         
       tmp = [repmat(previousCombos,[length(tmp),1]),...
          reshape(repmat(tmp',[length(previousCombos),1]),...
          length(previousCombos)*length(tmp),1)];

   end   
   out = recursivePermutations(boundsMat(1:end-1,:),tmp);
end

结果是大小为160 * 5的向量。这对应于您在此示例中应该获得的可能性数量(2 * 2 * 2 * 5 * 4)。