-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、4 GB 内存)。

对于 Matlab 7.9.0 (R2009b)

4

3 回答 3

1

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

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 长循环不会导致挂起。

于 2013-08-28T17:21:11.093 回答
0

要生成本index系列的第 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 开始)。或者您可以随时生成它们。

于 2013-08-28T17:25:30.507 回答
-1

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

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

这将按照您想要的顺序为您提供向量,没有循环......

于 2013-08-28T19:49:18.810 回答