【问题标题】:Matlab Error using vertcat Out of memory使用vertcat的Matlab错误内存不足
【发布时间】:2015-11-20 18:38:24
【问题描述】:

我正在运行以下代码。它适用于较小的 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

【问题讨论】:

  • 从你的代码来看,我不明白你在实现什么。可能创建s 已经填满了内存,所以结果没有剩余空间,也许在s 中按需创建行是一种选择。

标签: matlab


【解决方案1】:
 s = combnk(integers,NumberOfVariables);

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

k!/((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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 2016-04-30
    • 1970-01-01
    相关资源
    最近更新 更多