Matlab错误使用vertcat内存不足

时间:2015-11-20 18:38:24

标签: matlab

我正在运行以下代码。它适用于较小的NumberOfVariables,但由于内存不足,不适用于8或更大的任何变量。我真的只需要第一个不包含零的AllAnswers,但如果可能的话,我想要所有AllAnswers。

NumberOfVariables = 9;
k=NumberOfVariables^2-NumberOfVariables+1;
integers = 0:k-1;
numbers = 1:k-1;
tic
s = combnk(integers,NumberOfVariables);
AllAnswers = [];
for i = 1:size(s,1)
G=combnk(s(i,:),2);
G = [(G(:,1)'-G(:,2)') (G(:,2)'-G(:,1)')];
G = sort(mod(G,k));
if (isequal(G,numbers))
AllAnswers = [AllAnswers;s(i,:)];
end
end
toc

1 个答案:

答案 0 :(得分:4)

 s = combnk(integers,NumberOfVariables);

Number of Variables中所有integers大小的元素组合的列表。所以这是一个带

的列表

ķ!/((NumberOfVariables!(K-NumberOfVariables)!)

或者,因为k = NumberOfVariables ^ 2-NumberOfVariables

(NumberOfVariables ^ 2-NumberOfVariables)!/((NumberOfVariables!(NumberOfVariables ^ 2-2 * NumberOfVariables)!)

使用x代替NumberOfVariables,以保持可读性:

      (x²-x)!        x²!            x²!            x²!     
#s= ----------  > ---------- > ------------ = ------------ 
     x!(x²-2x)!   x!(x²-2x)!   x!(x²-2x+1)!    x!((x-1)²!)

你明白了。如果您通过为#s元素分配内存来实际接近它,那么这个东西不是你的朋友。事实上,看看这个,对于x> = 4,这将比e ^ x增长得更快。

对于从10开始的NumberOfVariables,它只会变得非常大。

算一算!

https://www.wolframalpha.com/share/clip?f=d41d8cd98f00b204e9800998ecf8427euo0stpao37

Image created with wolfram alpha