相关疑难解决方法(0)

正确的方法来限制Mathematica内存的使用?

在32位操作系统下,分配给任何一个程序的最大内存有限,Mathematica优雅地终止内核并返回最大内存分配错误.

然而,在64位操作系统上,Mathematica将自由使用所有可用内存并使系统停止运行.因此,限制内存使用的正确方法是什么?可以使用MemoryConstrained组合$PreCellEvaluationFunction但我不想为此目的绑定其中任何一个,或者必须修改现有用途以合并此功能.

是否存在另一种全局限制内存使用的方法,例如内核标志或系统$ Option?

memory wolfram-mathematica allocation cap

21
推荐指数
1
解决办法
2540
查看次数

Mathematica耗尽内存

我正在尝试运行以下程序,该程序计算度数达到d的多项式的根,系数仅为+1或-1,然后将其存储到文件中.

d = 20; n = 18000; 
f[z_, i_] := Sum[(2 Mod[Floor[(i - 1)/2^k], 2] - 1) z^(d - k), {k, 0, d}];
Run Code Online (Sandbox Code Playgroud)

这里f [z,i]给出z中的多项式,其中加号或减号以二进制计数.说d = 2,我们会的

f [z,1] = -z 2 - z - 1
f [z,2] = -z 2 - z + 1
f [z,3] = -z 2 + z - 1
f [z,4] = - z 2 + z + 1

DistributeDefinitions[d, n, f]

ParallelDo[ 
            Do[ 
                     root = N[Root[f[z, i], j]];
                     {a, b} = Round[n ({Re[root], Im[root]}/1.5 …
Run Code Online (Sandbox Code Playgroud)

memory-leaks memory-management wolfram-mathematica

18
推荐指数
1
解决办法
1万
查看次数

防止Mathematica中的运行时错误雪崩

当笔记本超出一些功能时我遇到的一个典型情况 - 我评估一个表达式,但是我得到了Beep而不是正确的答案,然后是几十个无用的警告,接着是"进一步输出...将被抑制"

我觉得有用的一件事 - 在函数内部使用类似Python的"断言"来强制内部一致性.还有其他提示吗?

Assert[expr_, msg_] := If[Not[expr], Print[msg]; Abort[], None]
Run Code Online (Sandbox Code Playgroud)

编辑11/14 警告雪崩的一般原因是子表达式评估为"坏"值.这会导致父表达式计算为"坏"值,并且此"不良"会一直传播到根目录.内置评估一路上注意到不良并产生警告."坏"可能意味着表达错误的头部,列表中的元素数量错误,负的确定矩阵而不是正定义等等.一般来说,它不适合父表达式的语义.

解决这个问题的一种方法是重新定义所有函数,以便在"输入错误"时返回未评估的值.这将处理内置函数生成的大多数消息.执行像"Part"这样的结构操作的内置函数仍将尝试评估您的值并可能产生警告.

将调试器设置为"中断消息"可以防止出现大量错误,尽管将其一直打开似乎有点过头了

wolfram-mathematica

13
推荐指数
2
解决办法
1386
查看次数