我是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循环是一项非常大的任务。 任何人都可以建议我使用代码吗?
答案 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)。