Wolfram mathematica Mathematica自动退出计算

Wolfram mathematica Mathematica自动退出计算,wolfram-mathematica,block,limit,Wolfram Mathematica,Block,Limit,我有一个来自Wolfram示范项目的小程序(链接:) 我想看看如果我将矩阵大小增加到1000甚至更大,会发生什么,但Mathematica拒绝了我。如果我在操纵中做了更改,它只显示“操纵已中止”。如果没有操纵,则退出内核 我不知道我的版本(9.00)是否有问题,或者仅仅因为Mathematica的限制 非常感谢您抽出时间 L = 1000; p1 = 0.6; seed = 2000; perColation[{i_, j_}] := If[1 <= i <= L &

我有一个来自Wolfram示范项目的小程序(链接:)

我想看看如果我将矩阵大小增加到1000甚至更大,会发生什么,但Mathematica拒绝了我。如果我在操纵中做了更改,它只显示“操纵已中止”。如果没有操纵,则退出内核

我不知道我的版本(9.00)是否有问题,或者仅仅因为Mathematica的限制

非常感谢您抽出时间

L = 1000;
p1 = 0.6;
seed = 2000;

perColation[{i_, j_}] :=

  If[1 <= i <= L && 1 <= j <= L && a[[i, j]] == 1,
   a[[i, j]] = 2;
   perColation[{i + 1, j}];
   perColation[{i - 1, j}];
   perColation[{i, j + 1}];
   perColation[{i, j - 1}];
   ];

SeedRandom[seed];

Block[{a, $RecursionLimit = Infinity},
 a = RandomReal[{0, 1}, {L, L}];
 For[j = 1, j <= L, j++,
  For[i = 1, i <= L, i++,
   If[a[[i, j]] < p1,
    a[[i, j]] = 1,
    a[[i, j]] = 0
    ]]];

 a[[IntegerPart[L/2], IntegerPart[L/2]]] = 1;
 perColation[{IntegerPart[L/2], IntegerPart[L/2]}];
 ArrayPlot[Transpose[a], ImageSize -> 1000, 
  ColorRules -> {0 -> White, 1 -> White, 2 -> Red}]]
L=1000;
p1=0.6;
种子=2000;
渗流=

如果[1听起来这是一个记忆限制问题,类似于我在工业环境中遇到的问题(尽管提供的不同信息可能导致不同的结论)。对于上下文,如果您没有,您可能希望查看Mathematica的以下帖子,或者直接联系他们的团队寻求帮助。正如他们所指出的:

“记忆空间是Mathematica计算中最常见的限制因素。然而,时间也可能是一个限制因素。你通常会准备等待一秒钟,甚至一分钟,以获得计算结果。但你很少准备等待一小时或一天,而且你几乎永远无法等待一年。”

他们还注意到,在行为方面:

如果你的计算机在计算过程中内存不足,大多数版本的Mathematica别无选择,只能立即停止。因此,重要的是计划你的计算,这样他们就永远不需要比你的计算机拥有更多的内存。
这个解释可以解释你的程序在执行过程中自动退出的原因。

当L=3003时,我始终看到Win7中的同一个数学内核以8 gig的速度退出,除了MMA和任务管理器正在运行外,其他什么都没有。所使用的总内存在失败之前不会占用所有内存。我建议你非常礼貌地联系Wolfram Suppo与每次失败的代码完全一致。不要告诉他们“我发现了一个bug”或者你会让他们生气,他们可能会否认这一点,并拒绝对此采取任何行动。假设你感到困惑,这似乎很奇怪,因为数学内核消失了,你想知道你是否做错了什么。删除ArrayPlot以使其更简单。最终,这是递归函数的可爱演示,但不是可行的al解决大n问题的算法。你的问题不清楚你是在寻求更好的方法,还是只是想了解内存问题。旁白(与内存问题无关)你不能在中间开始这样——原因是开始像素可能不在连接路径上。在这个例子中,整个顶部/底部行被初始化为1,并且你需要从一端开始。