我必须将一个向量传递给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 Ram)。
对于Matlab 7.9.0(R2009b)
答案 0 :(得分: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长循环不会导致挂起。
答案 1 :(得分:0)
要生成此系列的index
元素,请将索引转换为base-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开始)。或者你可以随时生成它们。
答案 2 :(得分:-1)
您可以通过以下方式保存所有循环:
data=0.4:0.2:1;
DupData=kron(ones(1,6),data);
DesResult=unique(nchoosek(DupData,6),'rows');
这将按照你想要的顺序给你矢量,没有循环......