produce combination one by one error

1 Ansicht (letzte 30 Tage)
NA
NA am 5 Jun. 2020
Beantwortet: jmac am 5 Jun. 2020
I want to produce combination to check some condition. For finding combination, I used combnk.
but if
n = 32;
newn = 31;
indices = combnk(1:n, newn);
I got "out of memory" error. For solving this problem I used nextchoose to produce combination one by one.
H = nextchoose(n,newn);
for ii = 1:(prod(1:n)/(prod(1:(n-newn)) * prod(1:newn)))
indices_matrix = H();
%% do some calculation
end
But I got this error
Array indices must be positive integers or logical values.
Error in nextchoose/nestfunc (line 96)
lim = WV(K+1-inc); % lim for next run.
Is there any way to fix this?

Antworten (1)

jmac
jmac am 5 Jun. 2020
For n=32 and newn=31, indices should be a 32x31 matrix; you should not get an "out of memory" error.
For different values of n end newn you may get introuble, since C(n,k) grows pretty fast. For example, for newn=16 you get over 600M combinations (you will need >150GB of memory to hold that matrix).
I tested nextchoose.m and worked pretty well. From your error message it seems that the limit testing on line 79 of nextchoose.m did not capture the end of the cycle, so you got to line 96 with k+1-inc negative.
I suspect you may be changing one or more of the persistent variables of the nested function during your calculation, somehow.

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!

Translated by