Matlab 如何实现一个循环,使向量中的一组值的所有可能组合成为可能?

Matlab 如何实现一个循环,使向量中的一组值的所有可能组合成为可能?,matlab,vector,Matlab,Vector,我必须在MATLAB中将一个向量传递到一个函数中。它有六个元素,每个元素可以有四个不同的值。我需要做一个循环,可以覆盖所有可能的组合 基本上,向量应取以下值: 0.4 0.4 0.4 0.4 0.4 0.4 0.4 0.4 0.4 0.4 0.4 0.6 0.4 0.4 0.4 0.4 0.4 0.8 0.4 0.4 0.4 0.4 0.4 1.0 0.4 0.4 0.4 0.4 0.6 0.4 0.4 0.4 0.4 0.4 0.6 0.6 ... ... 1 1 1

我必须在MATLAB中将一个向量传递到一个函数中。它有六个元素,每个元素可以有四个不同的值。我需要做一个循环,可以覆盖所有可能的组合

基本上,向量应取以下值:

0.4 0.4 0.4 0.4 0.4 0.4

0.4 0.4 0.4 0.4 0.4 0.6

0.4 0.4 0.4 0.4 0.4 0.8

0.4 0.4 0.4 0.4 0.4 1.0

0.4 0.4 0.4 0.4 0.6 0.4

0.4 0.4 0.4 0.4 0.6 0.6

...

...

1   1   1   1   1   1
我想是4^6=4096个组合。我必须为每个组合运行函数。那么我如何在这里做循环呢?我尝试了几个嵌套循环,我可以更改其中一个值并循环该值的位置,但这不会产生所有组合。请帮忙

另一方面,将所有这些4096个向量按顺序传递到函数中会导致任何问题吗?像系统挂起?(我使用i5,4GB内存)


对于Matlab 7.9.0(R2009b)

如果只需要编写循环,一种方法是:

for i = [0.4 0.6 0.8 1];
    for j = [0.4 0.6 0.8 1];

    % work
    output = myfunction(whatever, args, i, j);

    end
end
在循环过程中,i和j将取该数组中的值(0.4,0.6,0.8,1)。如果您希望迭代器变量采用整数值,以便可以将它们用作输出的索引,您可以这样做

% out-of-loop variables
combo = [0.4 0.6 0.8 1]
output = zeros(length(combo)); % good coding practice to initialize variable outside of loop. 

for i = 1:length(combo);
    for j = 1:length(combo);

    % work
    output(i,j) = myfunction(whatever, args, combo(i), combo(j));

    end
end

不,运行5000长的循环不会导致挂断

要生成本系列的
索引
th元素,请将索引转换为基数为4的数字。像这样:

values = 0.4:0.2:1;
index = 2314;
base4representation = dec2base(index, 4, 6);  %Returns the string "210022"
bese4representation_vector = double(base4representation-'0');  %Returns the vector [2 1 0 0 2 2]
result = values(bese4representation_vector+1);  %Returns [.8 .6 .4 .4 .8 .8]    

如果需要,可以将其放入循环中以生成所有4096个值(从0开始)。或者您可以在运行时生成它们。

您可以通过以下方式保存所有循环:

data=0.4:0.2:1;
DupData=kron(ones(1,6),data);
DesResult=unique(nchoosek(DupData,6),'rows');

这将按您想要的顺序为您提供向量,无循环…

谢谢。我使用了6个循环,并使用每个循环变量作为数组元素。为什么不在函数内部全部执行呢?看看我的答案,只需向函数添加两行(如果您传递原始的vactor)。