D for loops concatenated
3 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Luca Fenzi
am 17 Okt. 2015
Beantwortet: Luca Fenzi
am 20 Okt. 2015
I would like to generalize the following codes for dimension D=2:
D=2;
dim=factorial(P-1+D)/(factorial(P-1)*factorial(D));
indexes=zeros(dim,D);
s=0;
for i=1:P
for j=1:i
s=s+1;
indexes(s,:)=[i-j,j-1];
end
end
dimension D=3:
D=3;
dim=factorial(P-1+D)/(factorial(P-1)*factorial(D));
indexes=zeros(dim,D);
s=1;
for i=1:P
for j=1:i
for k=1:j
indexes(s,:)=[i-j,j-k,k-1];
s=s+1;
end
end
end
P can be an arbitrary integer (e.g. P=4).
In other words I would like to create D for loops in such a way that the first loop goes from 1 to P (i=1:P) the second loop from 1 to the previous one (j=1:i) the third one from 1 to the second one (h=1:j) etc.
Thank you in advance.
0 Kommentare
Akzeptierte Antwort
Jan
am 17 Okt. 2015
D = 3;
dim = factorial(P-1+D)/(factorial(P-1)*factorial(D));
indexes = zeros(dim,D);
v = ones(1, dim);
for s = 1:dim
indexes(s, 1:D-1) = diff(v);
indexes(s, D) = v(D) - 1;
% Update index vector:
found = false;
for k = D:-1:1
v(k) = v(k) + 1;
if k > 1
if v(k) <= v(k - 1)
break; % Exit for k loop
end
v(k) = 1;
end
end
end
Please test and adjust this to your needs. The idea gets clear: Use one loop and a vector of indices, which are incremented according to the rules in each iteration.
0 Kommentare
Weitere Antworten (1)
Siehe auch
Kategorien
Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!